1

私は5つのテーブルを持っています。それらは次のとおりです。

  1. 顧客タイプ
  2. お客様
  3. 領域
  4. 事業
  5. 車両

これは、テーブル間の関係の説明です。最初のテーブル、つまりcustomer_typeの場合、データ/行は、個人、企業、政府などの値である顧客タイプで構成されます。

顧客のタイプに応じて、この特定の顧客が他のテーブルで作成できるものに関するいくつかのルールがあります。ルールは次のとおりです。

  • 顧客のタイプが個人的なものである場合、顧客はリージョンとプロジェクトを持つことはできません(作成することはできません)。
  • 顧客のタイプが企業の場合、顧客はリージョンを持つことはできません(作成することはできません)。
  • また、顧客のタイプが政府である場合、顧客は地域、プロジェクト、および自動車にリンクできます。

1つの地域は、複数のプロジェクトで構成できます。特定のプロジェクトには、複数の車を割り当てることができます。

ただし、前に説明したように、顧客のタイプが個人である場合、顧客には地域とプロジェクトがありません。お客様との関係は直接車です。

顧客のタイプが企業の場合、最初の顧客はプロジェクトと関係があり、次にプロジェクトは自動車と関係があります。政府と同様に、最初の関係は地域との関係であり、次に地域には関係プロジェクトがあり、プロジェクトには自動車との関係があります。

+Customer Type -> Customer -> Region -> Project -> Car : table relation if customer type government.
+Customer Type -> Customer -> Project -> Car : table relation if customer type corporate.
+Customer Type -> Customer -> Car : table relation if customer type personal.

どのようにこれを解決することができますか、私は何のようなこの場合のための良いテーブルデザインを意味します。冗長な説明でごめんなさい

データベース設計

4

1 に答える 1

0

以下の車の解決策は次のとおりです。1対多のテーブルを作成するだけです。

CREATE TABLE Car
(
  CarId int PRIMARY KEY,
  ...
)    

CREATE TABLE CustomerCar
(
  CarId int PRIMARY KEY,
  CustomerId int,
  FOREIGN KEY fk1 (CarId) references Car(CarId)
 )

CREATE TABLE ProjectCar
(
  CarId int PRIMARY KEY,
  ProjectId int,
  FOREIGN KEY fk1 (CarId) references Car(CarId)     
 )

車が CustomerCar と ProjectCar の両方に存在できないという制約が必要な場合は、サポートされていないと思うので、MySQL でチェック制約を適用するための回避策を探す必要があります。Customer->Project および Region->Project は、Customer->Region と同様に同じ方法で実行できます。

于 2013-01-25T11:33:59.453 に答える