これは、データベースで 1 つのテーブルまたは 3 つのテーブルとして表す必要がありますか? 私と私の友人はこれについて異なる意見を持っているので、これについての一般的な見解を見たいと思います. (おそらく、どちらかのソリューションに投票する必要がありますか?)
Create Table Order
// Basic fields of the table
- ID (Primary key)
- CustomerID (integer, with a FK)
- Quantity
- ProductID (integer, with a FK)
// Then depending on user selection, either these fields need to be specified
// (could be factored out to a separate table):
{
- InternalAccountID (integer, with a FK)
- InternalCompanyID (integer, with a FK)
}
// Or these (could be factored out to a separate table):
{
- ExternalAccountNumber (free text string)
- ExternalCompanyName (free text string)
- ExtraInformation (free text string)
}
1 テーブル アプローチ:
長所:
- パフォーマンス (2 つではなく 1 つの挿入、FK チェック、結合なし)
- おそらくスペースが少なくて済みます (追加のテーブルにはオーバーヘッド + インデックス + 追加の ID フィールドがあります)
- 3 つではなく 1 つのテーブル
- 2 + 3 フィールド (または何?) のためだけに新しいテーブルに分割することはほとんど正当化できません。
短所:
- Null 可能フィールド
- 潜在的に余分な「タイプ」列 (スキップ可能)
- 3NFを突破(?)
賛否両論と個人的な意見をお願いします。:)
編集:実際に使用しているエンティティとは異なるエンティティを使用して例を単純化しようとしたため、モデルを変更するための提案はあまり役に立ちません。つまり、ドメイン モデルよりも技術的な側面に重点を置いてください。