1

次の目的でmysqlテーブルを設計しようとしています。このサイトは、1 つまたは複数のトピックに属する任意のトピックおよびアイテムに関するものです。たとえば、トピック「バットマン」を取り上げてみましょう。このために、映画ビデオ ゲーム(バットモービル)など、いくつかのカテゴリに属する​​アイテムがあります。カテゴリの数は 10 ~ 20 です。私の考えは、これらのテーブルを作成することです:

Topic
-------
id
name

Item
-------
id
name
category_id
decscription and some other common columns

Movie (and other categories, like Car, VideoGame, Book,...)
-------
id
item_id 
specific columns for each category

Item_Topic (and other tables like Item_Category, Item_Movie, Item_Car, Item_Videogame, Item_Person...)
-------
item_id
topic_id (movie_id, car_id, person_id, ...)

Person
-------
item_id
name
role

これまでのところ、これは良い解決策だと思います (または間違っていますか?)

しかし、私の2つの問題は次のとおりです。

  1. テーブル デザインの映画の俳優と本の著者は、アイテムとは見なされません。俳優と作家の場合、アイテムと人物 を接続するテーブルPersonItem-Personテーブルがあります。しかし、話題が「スティーブン・キング」だったら?スティーブン・キングがシナリオを書いた本や映画を探すにはどうすればよいですか? 私の頭に浮かんだ唯一のアプローチは、テーブルのデザインを変更し、人もアイテムと見なすことです. それは良い考えですか?この問題のテーブル設計ソリューションは何ですか? また、適切なテーブル設計を使用してトピックとアイテムを一致させるための一般的なクエリはどのように見えるべきか教えてください。

  2. 1 つのトピックに属する詳細情報 ( MovieBookVideoGameなどに保存されている) を含むすべてのアイテムを 1 ページに表示したい - 使用できる最適なクエリは何ですか?

回答ありがとうございます。

4

1 に答える 1

0

あなたのデザインのこの部分についてコメントさせてください。

Movie (and other categories, like Car, VideoGame, Book,...)
-------
item_id 
specific columns for each category

リレーショナル モデルを使用する場合、これは通常、最善の方法ではありません。可能であれば、、、 、 などのCategoryレコードを含むテーブルを用意することをお勧めします。そうすれば、必要に応じて新しいカテゴリを簡単に追加できます。MovieCarVideoGameBook

アイテム データがカテゴリに基づいて大きく異なる場合、それを処理する手法がありますが、きれいではありません (通常、アイテムの属性のテーブルであり、アイテム テーブルは属性と値のマッピング テーブルです)。

アップデート

@RichardCZ に感謝します。属性マッピング アプローチはEAV、Entity–attribute–value、modelと呼ばれることを思い出させてくれました。

于 2012-12-11T11:21:26.300 に答える