【发布时间】:2015-05-31 03:15:33
【问题描述】:
在一张表中存储诸如姓名、电话号码、地址等信息是不是很糟糕?这将导致 Employee 和 Customer 表具有引用“People”表的外键。
如果我们不将此类信息存储在一个表中,那么员工表和客户表就会有很多类似类型的信息。
最好的设计是什么?
【问题讨论】:
-
不,还不错。您想要存储的关于客户的信息类型与您想要存储的关于员工的信息类型非常不同——即使员工也是客户。
在一张表中存储诸如姓名、电话号码、地址等信息是不是很糟糕?这将导致 Employee 和 Customer 表具有引用“People”表的外键。
如果我们不将此类信息存储在一个表中,那么员工表和客户表就会有很多类似类型的信息。
最好的设计是什么?
【问题讨论】:
我的个人偏好:将客户和员工数据库分开。虽然客户和员工之间的某些数据可能相同,但不久之后数据要求和规则就会开始不同。例如,您可能希望为员工存储出生日期,但您可能不需要为客户存储。
保留表格还可以防止selects 中的错误。如果客户和员工是人员中的参考,而新来者不知道加入什么以及何时使用where 子句将客户和员工分开,则结果可能出乎意料并且可能未被发现。将客户和员工分开可以避免此类问题。
将它们分开也有助于将客户表添加到与客户/订单等关联的架构中,并且员工表可以转到与人力资源相关的架构。可以对它们应用不同级别的保护。
People 表的维护可能会影响 customer 和 employee 表。例如,如果您必须在大型 people 表中添加一列,则某些 RDBMS 可能会将表锁定太久。如果表格是分开的,您将只能准备相关的组。
总体而言,我认为使用 FK 创建与客户和员工相关的人员表几乎没有什么好处。也许 SO 上的其他人可能会提高人员表的好处。
【讨论】: