Kov*_*dra 4 database database-design
我对识别一对多关系的含义有一些疑问.我读了一些关于堆栈溢出的其他相关问题,但我需要更多信息:)
让我们假设我们有表"国家"和表"城市".在我看来,这是一对多识别关系的例子.但是当我使用MySql Workbench在这两个表之间创建一对多的识别关系时,我得到以下结果:
Countries
---------
country_id (PK)
...
Cities
--------
city_id (PK)
country_id (PK)
...
Run Code Online (Sandbox Code Playgroud)
我们在Cities表中有复合主键,它将允许该表中的后续行(假设country_id和city_id是字符串以提高可读性):
1) France, Paris
2) England, London
3) England, Manchester
4) France, London
Run Code Online (Sandbox Code Playgroud)
为了使其正确,我们需要在city_id上设置UNIQUE约束,以便它只能属于一个国家.但是,在Cities表中将country_id设为NOT_NULL(FK)并获得相同的效果是不是更清楚:
Cities
---------
city_id (PK)
country_id (FK) (NOT_NULL)
Run Code Online (Sandbox Code Playgroud)
那么,这是识别还是非识别关系?在我看来它是"逻辑上识别",但根据定义,它是非识别的,因为父PK不是儿童PK的一部分.这有点令人困惑:)
如果城市的密钥是(country_id,city_id),则关系是"识别" - 意味着主键部分或全部是对另一个表的外键引用.如果country_id不是主键的一部分,则它是非标识的.
这两个不同的键会使表格在每种情况下代表非常不同的东西,但只有你可以说哪个更适合你的要求.
不要过分担心识别与非识别关系的概念.这是一个源于ER建模的概念,但在关系数据库设计中,它通常具有很小的实际意义.