我可能有个老生常谈的问题,但我需要一个建议。
我正在为一个中心的DBMS工作,在那里有两种不同类型的客户:让我们称它们为Customer普通和CustomerSpecial。
当然,他们有共同的属性,比如名字,姓氏,出生日期...然后customerSpecial具有Customer普通没有的属性,反之亦然。
然后,customerSpecial和customerSpecial连接到不同的表:customerSpecial连接到table1,而customerSpecial连接到table2和table3
在这一点上,知道了这一点,我有两种可能的方法:
方式一:
创建具有所有公共属性的单个表“Customer”,然后创建具有相同PK和其他列的其他两个表customerS和customerO。
CUSTOMER
ID DATEOFBIRTH. NAME. SURNAME. TYPE
01. 1989/07/12. Sal. Dallow. S
02. 1987/09/12. Kreb. Krusty. O
03. 1999/01/02. Josh. Milly. S
CustomerO
ID. NumberOfCr. .....
02. 18273. .....
Customer S
ID. DateAsmp. DateEnd. TypeCon
01. 2020/12/12. 2021/10/07. STN
03. 2020/11/22. 2020/12/30. PLS
方式2
直接创建两个不同的独立表CustomerO和Customers:
CustomerS
ID DATEOFBIRTH. NAME. SURNAME. DateAsmp. DateEnd. TypeCon
01. 1989/07/12. Sal. Dallow. 2020/12/12. 2021/10/07. STN
03. 1999/01/02. Josh. Milly. 2020/11/22. 2020/12/30. PLS
CustomerO
ID DATEOFBIRTH. NAME. SURNAME. NumberOfCr.
02. 1987/09/12. Kreb. Krusty. 18273.
你认为我应该遵循哪种方法?为什么?最重要的是,第一种方法在某种程度上是不正确的?
这个问题取决于您是否需要与“客户”的外键关系。我猜答案是“是的”。
这表明第一种方法更好。如果“普通”和“特殊”客户不需要外键关系,可以考虑将所有列存储在同一表中--而不必担心null
值。