質問

またデータベースの保存衝突試験のデータを様々な車です。したいデータの衝突試験のための参加、自動車、ゴーカート.

この三つの別々のテーブル:SpeedboatTests,CarTests、GokartTests.がたくさんのカラムは同じでもそれぞれのテーブル(例えば、社員証の人は試験の方向に衝突(前面、側面、背面)。しかし、たっぷりの列が異なるので、使いいただけるようになすべての試験データを単一のテーブルがきかなりの数の列である場合はnull参加があり、それが必ずnullの場合は、自動車とかなりの数のことは常にnullのためにカート.

うまい店舗情報なに直接関連する試験など、社員証のデザイナーのものが試されている).これらのカラムそうにないから右に、"試験"テーブル、特るため、あるいは繰り返されるすべての試験と同じ車両です。

私の例を配置のテーブルでもお分かり頂けるように質問。

Speedboats
id | col_about_speedboats_but_not_tests1 | col_about_speedboats_but_not_tests2

Cars
id | col_about_cars_but_not_tests1 | col_about_cars_but_not_tests2

Gokarts
id | col_about_gokarts_but_not_tests1 | col_about_gokarts_but_not_tests2

Tests
id | type | id_in_type | col_about_all_tests1 | col_about_all_tests2
(id_in_type will refer to the id column of one of the next three tables,
depending on the value of type)

SpeedboatTests
id | speedboat_id | col_about_speedboat_tests1 | col_about_speedboat_tests2

CarTests
id | car_id | col_about_car_tests1 | col_about_car_tests2

GokartTests
id | gokart_id | col_about_gokart_tests1 | col_about_gokart_tests2

何が良い/悪いこの構造のうえで、最適な方法を実施す。

う場合もあり一部の情報に適用されるすべての車両というについての車両にテーブルは?そのCarTests表しよう...

id | vehicle_id | ...

With a Vehicles table like this:
id | type | id_in_type
(with id_in_type pointing to the id of either a speedboat, car, or go-kart)

これは単なっているロイヤル混乱していたように見えます。どうもこのように設定する。

役に立ちましたか?

解決

typeid_in_type デザインと呼ばれ 明協会.このデザインブルールの正常化を複数の方法。何といっても、この赤旗す できない を宣言するのに実際の外部キー制約が id_in_type を参照を複数のテーブル

こちらはより良い方法を定義するテーブル:

  • ること抽象表 Vehicles を提供する抽象基準点として、車両のサブ種類や車両試験までを実施。
  • 各車両のサブタイプは、主キーがないの自動インクリメントではなく参考文献 Vehicles.
  • それぞれの試験サブタイプは、主キーがないの自動インクリメントではなく参考文献 Tests.
  • それぞれの試験サブタイプまたは外部キーに対応する車両サブタイプです。

こちらのサンプルDDL:

CREATE TABLE Vehicles (
 vehicle_id INT AUTO_INCREMENT PRIMARY KEY
);

CREATE TABLE Speedboats (
 vehicle_id INT PRIMARY KEY,
 col_about_speedboats_but_not_tests1 INT,
 col_about_speedboats_but_not_tests2 INT,
 FOREIGN KEY(vehicle_id) REFERENCES Vehicles(vehicle_id)
);

CREATE TABLE Cars (
 vehicle_id INT PRIMARY KEY,
 col_about_cars_but_not_tests1 INT,
 col_about_cars_but_not_tests2 INT,
 FOREIGN KEY(vehicle_id) REFERENCES Vehicles(vehicle_id)
);

CREATE TABLE Gokarts (
 vehicle_id INT PRIMARY KEY,
 col_about_gokarts_but_not_tests1 INT,
 col_about_gokarts_but_not_tests2 INT,
 FOREIGN KEY(vehicle_id) REFERENCES Vehicles(vehicle_id)
);

CREATE TABLE Tests (
 test_id INT AUTO_INCREMENT PRIMARY KEY,
 col_about_all_tests1 INT,
 col_about_all_tests2 INT
);

CREATE TABLE SpeedboatTests (
 test_id INT PRIMARY KEY,
 vehicle_id INT NOT NULL,
 col_about_speedboat_tests1 INT,
 col_about_speedboat_tests2 INT,
 FOREIGN KEY(test_id) REFERENCES Tests(test_id),
 FOREIGN KEY(vehicle_id) REFERENCES Speedboats(vehicle_id)
);

CREATE TABLE CarTests (
 test_id INT PRIMARY KEY,
 vehicle_id INT NOT NULL,
 col_about_car_tests1 INT,
 col_about_car_tests2 INT,
 FOREIGN KEY(test_id) REFERENCES Tests(test_id),
 FOREIGN KEY(vehicle_id) REFERENCES Cars(vehicle_id)
);

CREATE TABLE GokartTests (
 test_id INT PRIMARY KEY,
 vehicle_id INT NOT NULL,
 col_about_gokart_tests1 INT,
 col_about_gokart_tests2 INT,
 FOREIGN KEY(test_id) REFERENCES Tests(test_id),
 FOREIGN KEY(vehicle_id) REFERENCES Gokarts(vehicle_id)
);

きまを宣言する Tests.vehicle_id を参照 Vehicles.vehicle_id を行い,駆除してくださvehicle_id外部キーにそれぞれの試験サブタイプテーブル、そのように異常などのスピードボート試験を参照しgokartのidです。

他のヒント

マッピングの継承階層データベースのテーブルだと思いマルタンファウラーシテの選択肢かなものにパターン入します。

http://martinfowler.com/eaaCatalog/singleTableInheritance.html

http://martinfowler.com/eaaCatalog/classTableInheritance.html

http://martinfowler.com/eaaCatalog/concreteTableInheritance.html

多数の場合は追加項目/列が小さいためにサブクラスは、単一のテーブル相続は、通常最も簡単なる。

使用している場合は、PostgreSQLデータベースというタイの自分へのデータベース固有の特徴についても支援を行っていテーブルの継承に直接:

http://www.postgresql.org/docs/8.3/static/ddl-inherit.html

私が休みで入の異なるテーブルなど自動車(ID、等)VehicleAttributes()VehicleID,AttributeID,Value),CrashTestInfo(VehicleID,CrashtestID、日付等) CrashtestAttributes(CrashTestID,AttributeID,Value)

やな属性別のテーブルの各設定の詳細が記録を残さなければならない。

ご利用の場合 SQLAlchemy, では、オブジェクト-リレーショナルマッパーのためのPythonでき 設定方法の継承階層マッピングされるデータベースのテーブル.オブジェクト関係のmappersは良質な面倒なSQL.

問題が好きにも、垂直ます。の代わりにものすべてを保存するにはスキーマに、店舗のオブジェクトの型は、主キーテーブルとキー/値のタプルオブジェクトを別表に示す。また納車試験、このセットアップもりやすいように追加新しい結果が得られます。

いるgoogle検索のグローバル-スペック関係のモデル化".いただけ記事の設定方法はテーブル内カンパニーのヘルスケアの属性の一般エンティティ(うOOのプログラマが呼びスーパークラス)とは別のテーブルのそれぞれの専門団体(サブクラスは、使いかた外部キーにリンクします。

は、IMO(国際海事機関について議論gen-specのERモデル化。だか訳ERモデルによる関係モデルは、故をSQLテーブル、まいまい方をご紹モデルgen-仕様に細胞

ばかりのときはgoogleの"グローバル-スペック"は、いだでオブジェクト指向は関係します。ることもあるとして極めて有用であること、とんどのように克服するオブジェクトリレーショナルインピーダンスのミスマッチ.

デザインの正確かつ詳細な内容は以下の正常化。が足りない車両テーブルの車両Idタイプ(ieの"親会社"の参加、自動車、Gokarts...がうまいもののように"DesignedByUserId").間の車両テーブルに参加テーブルには一対一の関係との間の車両やスピードボート/車/GoKartsが1だ-1に関する計画です。車で1記録のための高速船、自動車やゴーカート)...なdbのなごや執行の機構です。

一正規化ルールをお手伝このようなものであること、分野によるべきであるだけに、主キーは、表に示す。連結のテーブルスピードボート、自動車、gokart試験結果の保存とその後の車関連分野に頼るだけでなく、試験日のvechicle idや車両タイプです。主キーのための試験成績表は試験日の車両や車両タイプなど、試験データの列になります。直しとかは出来ないんですかを試験01/01/200912:30特定の車両の両方のスピードボートや車---swsホルテンは完成後も内部が...ではできません).

いを説明する正規化ルールparticularily。が3/4/5は通常形態規則を常に混乱させてくれるのを拝読させていただきました正式な内容に更新しました。その一つ(3rd/4th/5th)を扱分野ごとに、主キーはその有効なタイプを利用します。の原則を前提に、主キーが更が認められる(誤defininhの主キーがあまりにも簡単にしています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top