2016-08-02 6 views
1

パーツを保持するデータベース(ここでは簡略化)を設計しています。各パートには固有のPartIDがあります。データベース内の複数のエンティティにデータをリンクする

それは、私たちは各コンテナのための特定の異なる情報を持っていることが重要です

  • 再利用可能なバッグ
  • ボックス
  • パレット:私たちは別の容器にパーツを保存することができますバッグ: ID、マテリアルタイプ、ボリューム、ハンドタイプ
  • ボックス: ID、高さ、幅、長さ
  • パレット: ID、DateCreated、NumberOfTimesUsed、色

私の質問:に部品をリンクするための最良の方法は何ですかこれらの複数のコンテナエンティティ?

私の考えでは、概念的に最も簡単な方法は、PartテーブルにContainerTypeとContainerIDの列を作成することです。私はそれをすることを躊躇しています。なぜなら、それは違法なので、複数のテーブルに対する強制されていない外部キーを持つ列を持つ参照整合性を本質的に壊すからです。

コンテナのすべての可能なプロパティを持つ大きなコンテナテーブルを作成することもできますが、それは非常に面倒です。

何か助けや指導をいただければ幸いです!

+0

個人的には、ID、ContainerType、MaterialType、Volume、HandleType、Height、Width、Length、DateCreated、NumberOfTimesUsed、およびColorの列を持つ 'container'テーブルを作成します。あなたは1トンのNULL値を持っていますが、それは非常に簡単に結合でき、パーツテーブルで多くのデータを繰り返すことを避けることができます。あなたはID番号に参加するだけです。 –

答えて

1

これはMySQLで素晴らしい答えがない質問です。 いくつかのアプローチがあり、それぞれ長所と短所があります。

オプション#1 - 彼らは3コンテナの2のために適切ではありませんので、NULL、それらの多くは、すべての列がありますNULLのコメントで示唆したように

containers表のフル表タイプ。 SELECTJOINにこのようなテーブルを使用するのは非常に簡単ですが、この場合DBはデータの検証を手助けすることはできません。長さのある袋や箱がない袋を簡単に挿入することができ、DBはそれを強制することはできません。

オプション#2 - このアプローチでは、接続テーブル

に問題を移動し、あなたは部品の位置を記憶テーブルに、コンテナを格納するテーブルの問題を移動します。

  • バッグ
  • ボックス
  • パレット

や容器に部品を接続するための一つのテーブル::

3つの別々の容器テーブルがあります

  • parts_to_containersは
  • 列を持つ

  • part_id
  • CONTAINER_TYPE
  • は、あなたが独立して、多くの場合、コンテナの在庫を扱う場合、このオプションは良いです

をcontainer_id。これは、コンテナでの作業を非常に簡単にし、問題のある部分をコンテナ内に部品を配置する作業に置きます。

3つのLEFT JOINのクエリを書くことができます。これは、各部品のコンテナに関する情報を得ることができます。あなたは、容器のより多くの種類を持っていることが予想される場合は、上記のいずれもスケールすることは容易でないだろう

もう一つ

。より多くのコンテナタイプが追加されている場合は、すべての共通コンテナフィールドは一つのメインcontainersテーブルにあり、他のすべてのコンテナが属性全く異なるアプローチをすることができcontainer_idattribute_nameattribute_valuecontainer_attributesテーブルです。属性の1つはコンテナタイプで、その他は色、幅、音量などになります。

これは時間の経過と共に変化するさまざまなアトリビュートを持つオブジェクトに対して非常に柔軟なモデルです。

+0

あなたはコメントで人々に感謝するはずではありませんが、この回答は素晴らしいので、とにかくそれを行うつもりです。ありがとうございました。 – user1904766

0

テーブル間の1対多数の関係における経験則は、関係の片側の主キーが参照整合性を保持するために関係の多くの側で外部キーとして機能することです。

プライマリキー列containercontainersというテーブルを作成します。 idcontainerなどの他の列。 name,containercreatedOn,containerlastOpenedOn。主キーcontainer。テーブルcontaineridが、partsという外部キー列として部品表に追加されます。 container_id

+0

Yikes!多分私はよりよく指定するべきだったはずですが、それは1対多の関係です。多くのパーツは1つのコンテナに収められ、1つのパーツテーブルしかありません。 – user1904766

関連する問題