リレーショナルデータベースの考え方について質問です。
MySQL+SQLAlchemyを使ってレシピ管理のwebアプリを作っています。登録したいデータは、「メニュー名」、「材料」、「作り方」の3項目です。例えば、カレーであれば以下の様なデータを保存します。
メニュー名:カレー
材料:”じゃがいも”、”にんじん”、”玉ねぎ”、”カレールー”
作り方:”材料を切る”、”材料を煮る”、”カレールーを入れる”
PosgtreSQLであれば、array型が使えるので、
column1="カレー"
column2=[”じゃがいも”、”にんじん”、”玉ねぎ”、”カレールー”]
column3=[”材料を切る”、”材料を煮る”、”カレールーを入れる”]
とするだけで1つのテーブルでスッキリとデータを保存することができますが、MqSQLではarray型は使えないので、お手本のコードなどを参考にしながら以下のコードを書きましたが、
①MySQLでは本当にこんなに面倒な方法で上記のレシピを管理するのが正しいでしょうか。
②arrayが使えず、リレーショナルの考え方を頼りに、こんなに単純な事の為に3つもテーブルを作るメリットが理解できません。。。arrayがサポートされない理由をご存知でしたら教えて下さい。
python3
1''' 2略 3''' 4class Recipe(db.Model): 5 __tablename__="recipe_table" 6 id = db.Column(db.Integer, primary_key=True) 7 name = db.Column(db.String(40)) 8 zairyou = db.relationship('Zairyou', backref='recipe') 9 tejun = db.relationship('Tejun', backref='recipe') 10 11class Zairyou(db.Model): 12 __tablename__="zairyou_table" 13 id = db.Column(db.Integer, primary_key=True) 14 zairyou_name = db.Column(db.String(20)) 15 recipe_id = db.Column(db.Integer, db.ForeignKey('recipe_table.id')) 16 17class Tejun(db.Model): 18 __tablename__="tejun_table" 19 id = db.Column(db.Integer, primary_key=True) 20 tejun_name = db.Column(db.String(20)) 21 recipe_id = db.Column(db.Integer, db.ForeignKey('recipe_table.id')) 22 23@app.route('/') 24def show_recipe(): 25 26 menu = Recipe.query.filter_by(name="カレー").first() 27 materials = menu.zairyou #backref=を使ってRecipeからSozaiへの 28relationを利用し、カレーの材料をzairyou_tableから取り出す 29 steps = menu.tejun #backref=を使ってRecipeからTejunへのrelationを利用し、カレーの作成手順をtejun_tableから取り出す 30 31if __name__ == '__main__': 32 app.run(debug = True)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/22 07:23
2020/09/22 21:34
2020/09/24 02:26