首先,我不是 DBA,我是一名软件工程师,并且一直在构建应用程序,这些应用程序在我的整个职业生涯中都是由数据库支持的。我记得的一件事(可能是错误的)是,在设计 ERD 时,您要考虑现实世界,因为它是您设计的背景。
我有一种情况,我们有一个客户的概念,他可以有两个而且只有两个电话号码。一个客户也可以有零到多个地址,并且每个地址只能有两个电话号码(以及一个指示该号码是否为手机号码的标志)。地址上的号码仅用于联系该特定地址的某人,而客户的号码则用于联系客户(其地址可能不在系统中)。
我想出的设计是将 Phone1 Phone2 作为列在客户表和地址表上。我有其他人建议这不是一个好的设计,我应该创建一个 PhoneNumber 表(我不确定他们是如何建议我将这些号码与其他记录相关联的)。
当然,我也可以看到它是有效的,但我仍然需要在客户和地址表中包含 Phone1Id 和 Phone2Id,或者在 Phone 表中有一些东西告诉我哪个记录拥有该号码。我遇到的问题当然是使应用程序逻辑更加复杂,因为我现在需要添加、删除或更新电话表中的记录,而不仅仅是将相应表中的值清空或归零。
我的设计也可以接受吗?一个还是另一个更可取?或者两者都一样有效?