1

我有五张桌子。它们如下:

  1. 顾客类型
  2. 顾客
  3. 地区
  4. 项目

这是表之间关系的解释。对于第一个表 customer_type,数据/行包含一个客户类型,可以是个人、公司、政府等的值。

根据客户的类型,围绕该特定客户可以在另一张表上创建的内容有几个规则。规则如下:

  • 如果客户类型是个人,则客户不能拥有(不允许创建)区域和项目。
  • 如果客户类型是公司,客户不能没有(不允许创建)区域。
  • 如果客户类型是政府,客户可以链接到地区、项目和汽车。

一个区域可以由多个项目组成。一个特定的项目可以分配多辆汽车。

但是,就像我之前解释的那样,如果客户类型是个人,则客户没有区域和项目。客户的关系直接与汽车。

如果客户类型是公司,首先客户与项目有关系,然后项目与汽车有关系。与政府类似,首先与区域有关系,然后区域与项目有关系,然后项目与汽车有关系。

+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 中应用 Check 约束的变通方法,因为我认为它不支持它们。Customer->Project 和 Region->Project 可以以相同的方式完成,Customer->Region 也可以。

于 2013-01-25T11:33:59.453 回答