具有多个关系的表的DB设计

时间:2013-01-25 05:12:31

标签: mysql database database-design mysql-workbench erd

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

  1. 的customer_type
  2. 客户
  3. region
  4. 项目
  5. car
  6. 这是表格之间关系的解释。 对于第一个表,即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.
    

    如何解决这个问题,我的意思是这个案例的好表设计就像是什么。很抱歉有多余的解释

    database design

1 个答案:

答案 0 :(得分: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约束的变通方法,因为我认为它不支持它们。客户 - >项目和地区 - >项目可以采用与客户 - >地区相同的方式完成。

相关问题