2012-05-09 5 views
0

2つの簡単な質問:データベース設計:テーブルまたは列?

私は正規化フォームについて学ぶために最善を尽くしましたが、この特定の状況についてはわかりませんでした。

  1. 私はイベントがあります。
  2. イベントには多数のインスタンスがあります。
  3. インスタンスがありますなどの食べ物、人々、コスト、評価、場所、

食べ物、人々、コストなどの各(BLOBを)自分のテーブルを取得または単にインスタンステーブルの列であるべき? にはしか属しておらず、共有されていないので、それぞれテーブルがそれぞれ必要と思われる理由はありません。しかし、...未来が私に彼ら自身の理由を与えるかもしれないかどうか分からないので、それを自分のものとして扱うほうがいいですか?

第2に、IFこれらのすべてがそれぞれ独自のテーブルである必要があります。イベント外部キーも同様に格納すると便利ですか?私はインスタンスに関係なくイベントのためのすべての食品リストを呼びたい場合は、私はちょうどイベントからすべてのインスタンスを取得し、各インスタンスの情報を呼び出します。その呼び出しが起こることを期待すれば、キーを追加するのに十分な理由があるのでしょうか、それともこの貧弱な計画ですか?

答えて

2

道路を降りて後であなたの決断を後悔する前に、将来を計画しているかもしれません。あなたのインスタンス項目(食糧、人、コストなど)を別々のテーブルに保存するほうがいいでしょう。 Instance - > Instance Itemは多対多の関係であるため、多対多の関係を可能にするためにオブジェクトテーブルの間にいくつかのリンクテーブルが必要です。

Event | EventID 
Instance | InstanceID, EventID 
InstanceFood | InstanceID, FoodID 
InstancePerson | InstanceID, PersonID 
... 
Food | FoodID, FoodName 
Person | PersonID, PersonName 

リンクテーブルの場合、primaryKeyはInstanceIDと他のid値の組み合わせです。この設定では、オブジェクト(食べ物、人)テーブルにイベントIDを格納する必要はありません。特定の人物が関連付けられているイベントを特定したい場合は、インスタンスPersonとインスタンスを持つPersonに参加して、関連するすべてのEventIDを取得してください。

+0

ありがとうございます!私はあなたがテーブルについて正しいと思うが、私は確信していなかった。しかし、たとえ誰かがインスタンス項目のすべての情報を使用したとしても、その項目を新しい項目(上書き禁止)にしたいからです。それは合理的な戦略ですか? – dewyze

+0

@Jdewzy person型またはtype型の単一のエンティティがインスタンス型の単一のエンティティにのみ関連付けられる場合は、リンクテーブルも安全に削除できます。 InstanceIDをFood、Personテーブルに追加するだけです。私にとっては合理的だと思われますが、私はあなたのように問題全体を十分に認識していないので、これが良いアイデアかどうかは言い表せません。 – AndyPerfect

+0

いいえ、それは本当に便利です。ありがとう! – dewyze

1

お使いのモデルは未定です。 Eventには「コスト」があることは何を意味していますか?それはセントで表現される単一の総計ですか?これは数字のCOSTの列に属します。それはいくつかの有料製品またはサービスの箇条書きですか?それは、1:nの関係を実装する唯一の純粋な方法であるため、別のテーブルに入れなければなりません。同様に、Evaluationは1〜10の尺度で単一のスコアですか?カラム。それはいくつかの(または、神が、変数の数を禁止している)Q &位置を持つ構造化されたアンケートですか?表。人の数だけ重要ですか?カラム。関連する人々の身元確認は重要ですか?表。

2の場合、1:nデータを保持するテーブルが関連付けられている場合、外部キーを使用して「所有」レコードを参照させることはできません。たとえば、InstancePeopleの間に1:nの関係をモデル化するテーブルが必要な場合は、PeopleにはInstanceIdの列が必要です。

+0

ありがとうございます。私はまだ最初の質問に対する答えに取り組んでいます。最初はシンプルでしたが、複雑になっています(通常どのように進むのでしょうか?)。そのためテーブルもちょうど良いアイデアかもしれません。 2番目の質問については、それがインスタンスIDだけでなく、EventIdを持つべきかどうかについてでした。すべてのイベントのPeople(インスタンスに関係なく)を比較するよりも簡単なのか、それともイベントのインスタンスを検索するのが速いのか、そのインスタンスに関連付けられた各Peopleを検索するのかがわかりませんでした。 – dewyze

関連する問題