sql工作台上的单独表而不是单个表

Posted

技术标签:

【中文标题】sql工作台上的单独表而不是单个表【英文标题】:Separate tables on sql workbench rather than a single one 【发布时间】:2021-07-05 11:27:27 【问题描述】:

我可能有一个老生常谈的问题,但我需要一个建议。

我在一个中心的 DBMS 工作,那里有两种不同类型的客户:我们称他们为 customerOrdinarycustomerSpecial

当然,它们有共同的属性,例如姓名、姓氏、出生日期…… 然后 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工作台上的单独表而不是单个表的主要内容,如果未能解决你的问题,请参考以下文章

复制工作表而不复制代码

Django,级联移动到单独的表而不是级联删除

在 MySQL 中,如何编写 SQL 来连接两个表而不是一个子查询?

sql 评估PDF分数使用数据库表而不是硬编码生成

在 R 中拆分大型数据框并输出到单个 Excel 工作簿中的单独工作表中

MS Access VBA 修改 Excel 工作表而不写入 Drive