sql工作台上的单独表而不是单个表
Posted
技术标签:
【中文标题】sql工作台上的单独表而不是单个表【英文标题】:Separate tables on sql workbench rather than a single one 【发布时间】:2021-07-05 11:27:27 【问题描述】:我可能有一个老生常谈的问题,但我需要一个建议。
我在一个中心的 DBMS 工作,那里有两种不同类型的客户:我们称他们为 customerOrdinary 和 customerSpecial。
当然,它们有共同的属性,例如姓名、姓氏、出生日期…… 然后 customerSpecial 具有 customerOrdinary 没有的属性,反之亦然。
customerSpecial 和 customerOrdinary 然后连接到不同的表:customerOrdinary 连接到 table1,customerSpecial 连接到 table2 和 table3
此时,我知道,我有两种不同的方法:
方式 1:
创建具有所有公共属性的单个表“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
直接创建 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.
您认为我应该采用哪种方法?为什么?最重要的是,第一种方法在某种程度上是不正确的?
【问题讨论】:
两种不同类型的客户这可以准确地告诉您您拥有/需要支持的内容。 @SM或者你认为哪个更好? 我删除了 sql-server,因为它与 mysql 冲突,并且 SQL Workbench 是 MySQL IDE,而不是 SQL Server。 【参考方案1】:问题取决于您是否需要与“客户”建立外键关系。我猜答案是“是”。
这表明第一种方法更好。如果您不需要“普通”和“特殊”客户的外键关系,您可以考虑将所有列存储在同一个表中,而不必担心 NULL
值。
【讨论】:
是的,外键“CustomerO_ID”用于两个表(表1和表2);而外键“CustomerS_ID”用于另一个表(表 3)。相反,“CustomerID”fk 从未在其他表中使用。 (第一种方法) 表和“客户”之间一般没有关系,包括S型和O型。所有的关系都是单独的,或与CustomerS或与customerO @珍妮。 . .我怀疑在您的系统中,您通常需要表和customers
之间的关系——事务、合同或类似的东西。
不,考虑到“客户”只是我报告的一个示例,以简化和概括我的问题。所以假的,我一般不需要表格和客户之间的关系以上是关于sql工作台上的单独表而不是单个表的主要内容,如果未能解决你的问题,请参考以下文章
在 MySQL 中,如何编写 SQL 来连接两个表而不是一个子查询?