現在、データベースを作成しています。これは、paperという名前のテーブルに格納されているパブリケーションをアップロードすることができ、paper_id、タイトル、抽象ファイル名およびtopic_idを格納します。トピックと呼ばれるtopic_idとtopic_nameというテーブルがあります。これはユーザーがパブリケーションのトピックを選択するために使用します。しかし、私はユーザーが少なくとも3つのトピックを選択できるようにしたい、これはこのシステムを使用して可能ですか?私はそれを行う方法のアイデアを使い果たして、大いに助けになるでしょう。複数の項目をmysqlの列に保持する
2
A
答えて
8
paper
テーブルにtopic_id
を保存しないでください。代わりに、topic_id
をpaper_id
にリンクする別の正規化(多対多)テーブルを作成します。
/* Each paper can exist in this table as many times as necessary for all its topics */
CREATE TABLE paper_topics (
paper_id INT NOT NULL,
topic_id INT NOT NULL,
FOREIGN KEY (paper_id) REFERENCES paper (paper_id),
FOREIGN KEY (topic_id) REFERENCES topic (topic_id),
PRIMARY KEY (paper_id, topic_id)
);
これにより、必要に応じて紙ごとに多数のトピックを保存できます。紙のトピックを検索するために
、使用:
SELECT
paper.*,
topic_name
FROM
paper
LEFT JOIN paper_topics ON paper.paper_id = topic.paper_id
LEFT JOIN topic ON topic.topic_id = paper_topic.topic_id
WHERE paper.paper_id = <some paper id value>
そのような中topic_id
のカンマ区切りのリストとして(1列に複数の値を格納しようとするのは良いアイデアだけでは決してありませんpaper
表)。その理由は、照会するためには、実行中の複雑さを引き起こし、照会時に列索引を使用できなくするFIND_IN_SET()
を使用する必要があるからです。
0
0
はいこれは可能です(論文とトピックごとに別の表を使用)。論文とトピックの間には、1対1の関係があります。
関連する問題
- 1. カウント複数の項目 - mysqlの
- 2. 複数の項目をテキスト項目に重複項目を追加する
- 3. 複数列のQTreeWidgetルート項目を持っている
- 4. 複数の項目を1つのフィールドに格納するmysql
- 5. 複数の項目(文章)によるMysqlのクエリの注文
- 6. 複数の項目
- 7. Cの配列に複数の項目を格納する
- 8. 複数の項目を複数の列で検索
- 9. Pythonで文字列を複数の項目に比較する
- 10. 複数の項目から項目を選択するListView - android
- 11. MySQL複数のグループ内のカウントに基づく上位項目
- 12. 列あたり2つのリスト項目を持つ複数列プロパティ
- 13. Javascriptの項目を削除せずに配列内の重複項目をユニークな項目に変換する
- 14. 複数の項目を更新する
- 15. 複数の項目を比較する
- 16. 複数のデータを列に保持
- 17. 複数の項目がアンドロイドにある行を持つListViewからカスタム項目を取得する方法
- 18. 複数の項目RadioButtonsグループ
- 19. C#が複数の項目
- 20. 複数の列のグリッドで、各列の項目数を制限する方法
- 21. 複数の行をmysqlデータベースに挿入する(カンマ区切りの項目)
- 22. 最後の項目を上に保持する方法
- 23. GridView列から複数のListBox項目を選択する
- 24. RecyclerViewのFirebaseデータベース項目から複数の項目を表示
- 25. 複数の項目をListBox1から複数の項目をバインドするListBox2に追加
- 26. 複数の列を持つmysqlのGROUP_CONCAT
- 27. 複数の行をmysqlに挿入する(コンマで区切られた項目)
- 28. MySQLデータベースの項目数を取得
- 29. OpenCL:同じグローバルメモリアドレスに結果を保存する複数の作業項目
- 30. EXCEL:他のすべての個別項目の列項目数
私はpaper_topicsテーブルに紙とそのトピック/トピックを追加するにはどうすればよい、ありがとう! –
@NickPocock 'INSERT INTO paper_topics(paper_id、topic_id)VALUES(、)' –
PHPでこれを行う方法はありますか? –