1

優れたリレーショナル データベースの作成について、少し混乱しています。phpmyAdmin を使用してデータベースを作成しています。次の4つのテーブルがあります。場所と価格はオプションであることを心配しないでください。

  1. 人 (必須)
  2. 項目 (必須)
  3. 場所(任意)
  4. 価格(オプション)

アイテムはメインテーブルです。常に人がリンクされます。* mysql でテーブルの結合を行っていることは知っています。テーブルを一緒にリンクしたい場合、(各テーブルの ID を使用して) 複合キーを使用できますが、これがテーブルをリンクする最も正しい方法ですか? また、アイテムにはそれ自体を含む 5 つの ID があることも意味します。place と price がオプションで、 items テーブルへの 1 つのエントリで使用されていない場合、そこに null 値があるため、これはすべて null 値を引き起こします (明らかに、私が理解できる大きな違いです)。助けてください!

前もって感謝します。これが理にかなっていることを願っています。

4

1 に答える 1

2

NULL 値

また、アイテムにはそれ自体を含む 5 つの ID があることも意味します。place と price がオプションで、 items テーブルへの 1 つのエントリで使用されていない場合、そこに null 値があるため、これはすべて null 値を引き起こします (明らかに、私が理解できる大きな違いです)。

個人的には、これはNULL値が完璧である状況の 1 つだと思います。これをデータベース設計に組み込むことに疑いの余地はありません。

他の人が値なしで同じことを達成するのを見た 1 つの方法はNULL、関連するレコードがないことを示す 0 の ID を持つオプションのテーブル (例では場所と価格) にレコードを作成することですが、これは 10 倍の作業になります。アプリケーションの開発者がこれらのレコードを除外するには、結合を行う方がはるかに簡単です。レコードが返されない場合は、オプションのテーブルに関連するレコードがありません。

orが関連付けられているかどうかに関係なく sを返したい場合は or joinを実行LEFTすることを忘れないでください(レコードが関連付けられていない s のオプションのテーブル列に値を取得します) 。オプションのレコードが関連付けられているsRIGHT OUTERItemPlacePriceNULLItemINNERItem

複合キー

複合キーは、複数の列で構成されるテーブル内のキーです。、Person、およびすべてItemにID がある場合 (自動インクリメント番号であっても)、複合キーは必要ありません。各テーブルの主キー列と、それぞれのテーブルの外部キー列だけです。関連テーブル - 例: 、、。独自の ID があると述べているため、複合キーは必要ありません。列の主キーだけです。PlacePriceItemitem_idperson_idplace_idprice_idItemitem_id

于 2010-04-13T09:00:05.230 に答える