我对识别一对多关系的含义有一些疑问。我阅读了一些关于堆栈溢出的其他相关问题,但我需要更多信息:)
假设我们有表“Country”和表“Cities”。在我看来,这是一对多识别关系的例子。但是当我使用 MySql Workbench 在这两个表之间创建一对多标识关系时,我得到以下信息:
Countries
---------
country_id (PK)
...
Cities
--------
city_id (PK)
country_id (PK)
...
我们在 Cities 表中有复合主键,它将允许该表中的以下行(假设 country_id 和 city_id 是字符串以提高可读性):
1) France, Paris
2) England, London
3) England, Manchester
4) France, London
为了使其正确,我们需要对city_id 进行UNIQUE 约束,使其只能属于一个国家。但是,在 Cities 表中将 country_id 设置为 NOT_NULL (FK) 并获得相同的效果不是更清楚吗:
Cities
---------
city_id (PK)
country_id (FK) (NOT_NULL)
那么,这种关系是识别关系还是非识别关系?在我看来,它是“逻辑上识别”的,但根据定义它是非识别的,因为父 PK 不是子 PK 的一部分。这有点令人困惑:)
最佳答案
如果 cities 的键是 (country_id, city_id) 那么这种关系是“识别”的——这意味着主键部分或全部是对另一个表的外键引用。如果 country_id 不是主键的一部分,则它是非标识性的。
这两个不同的键会使表格在每种情况下代表非常不同的东西,但只有你能说出哪个更符合你的要求。
不要太担心识别关系与非识别关系的概念。这是一个起源于 ER 建模的概念,但在关系数据库设计中它通常没有什么实际意义。
关于database - 识别一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7030085/