我有五张桌子。它们如下:
这是表格之间关系的解释。 对于第一个表,即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.
如何解决这个问题,我的意思是这个案例的好表设计就像是什么。很抱歉有多余的解释
答案 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约束的变通方法,因为我认为它不支持它们。客户 - >项目和地区 - >项目可以采用与客户 - >地区相同的方式完成。