Database design 为解决多值属性而创建的表上的外键约束是好的设计吗?

Database design 为解决多值属性而创建的表上的外键约束是好的设计吗?,database-design,relational-database,entity-relationship,Database Design,Relational Database,Entity Relationship,在我的ER模型中,我有一个实体类型“City”,它有一个多值属性ZIPCode。到目前为止,一切顺利 现在,当我将ER模型转换为关系模式时,我创建了一个额外的表来解析多值ZIPCode属性。类似于CityZIPCityID,ZIPCode,带有复合主键:CityID,ZIPCode 现在让我们假设,我正在一个雇员表中存储一个雇员的地址,该表必须存储城市和邮政编码。一种方法是在我的employee表中有两列CityID,ZIP,并在CityZIP表上有一个外键约束 但这是允许的吗?根据我的ER图,

在我的ER模型中,我有一个实体类型“City”,它有一个多值属性ZIPCode。到目前为止,一切顺利

现在,当我将ER模型转换为关系模式时,我创建了一个额外的表来解析多值ZIPCode属性。类似于CityZIPCityID,ZIPCode,带有复合主键:CityID,ZIPCode

现在让我们假设,我正在一个雇员表中存储一个雇员的地址,该表必须存储城市和邮政编码。一种方法是在我的employee表中有两列CityID,ZIP,并在CityZIP表上有一个外键约束


但这是允许的吗?根据我的ER图,我引用的表本身不是实体,只是为了解析多值ZIP属性而创建的。

是的,允许这样做。这是一个完全合理的设计,至少只要邮政编码可能跨越城市,即功能依赖性{ZIPCode}->{CityID}不成立


表不直接对应于ER模型中的实体,并不意味着不能在关系模型中用外键引用它。模型在这方面是独立的,它们之间没有单一的正确映射。

答案几乎肯定是肯定的,这是可以的,但其背后的原因和原理是冗长、复杂的,属于数据建模讨论组或课堂,因为任何数量的子主题和解释都会根据您实际处理的内容而出现。同样,仅仅因为它可以做到并不意味着它应该做到,但这也取决于你在建模什么。是时候阅读一本出版的关于信息建模和数据库设计的学术教科书了。记录和使用设计的语言和工具手册不是信息建模和数据库设计的教科书。谢谢你的回答。非常感谢。