データの整合性を維持するために、外部キーを適切に使用しようとしています。私はデータベースの専門家ではないので、私が知らない一般的な設計原則があるかどうか疑問に思っています。これが私がやろうとしていることの例です:
タイプ (乗用車、トラックなど)、メーカー、モデルを含む車両のデータベースを構築するとします。ユーザーは少なくとも Type を入力する必要がありますが、Make と Model はオプションです (Model が指定されている場合、Make は必須です)。私の最初のアイデアは、データベースを次のように設定することです。
Type:
-id (PK)
-description
Make:
-id (PK)
-type_id (FK references Type:id)
-description
Model:
-id (PK)
-make_id (FK references Make:id)
-description
Vechicle:
-id (PK)
-type_id (FK references Type:id)
-make_id (FK references Make:id)
-model_id (FK references Model:id)
タイプ、メーカー、モデルがすべて一致するようにするには、Vehicle の FK をどのように設定しますか? たとえば、車両が (Type:Motorcyle, Make:Ford, Model:Civic) を持たないようにするにはどうすればよいでしょうか? これらはそれぞれ有効な FK ですが、他のテーブルの FK によって示される関係は維持されません。
また、Model は必須ではないため、model_id FK を保存してそこから逆方向に作業することはできません。
私はデータベースの設計にまったく縛られていないので、テーブルの設定方法を変更しなければならない可能性はあります。何か案は?
PS - 誰かが興味を持っている場合、私は mysql を使用していますが、これはデータベースに関する一般的な質問です。
編集(説明):
-type_id と make_id は、model_id が null の場合にそれらを特定する方法がない限り、車両テーブルに必要です。
- type_id、make_id、および model_id の間の関係を維持する必要があります。