Database design 在1:N关系-逻辑模型中添加哪些外键

Database design 在1:N关系-逻辑模型中添加哪些外键,database-design,foreign-keys,Database Design,Foreign Keys,我对在逻辑模型中标记双向1:N关系感到困惑 我们有两张桌子:员工和部门。每个员工都知道自己在哪个部门工作,每个部门都知道员工在哪个部门工作——换句话说,就是员工标识符的集合 从正式的角度来看,我是否通过将FK添加到两个表中来标记这一点 |EMPLOYEE | |DEPARTMENT| |____________| |__________| |PK EMP_ID |>O------||-|PK DEPT_ID| |FK DEPT_ID |

我对在逻辑模型中标记双向1:N关系感到困惑

我们有两张桌子:员工和部门。每个员工都知道自己在哪个部门工作,每个部门都知道员工在哪个部门工作——换句话说,就是员工标识符的集合

从正式的角度来看,我是否通过将FK添加到两个表中来标记这一点

|EMPLOYEE    |           |DEPARTMENT|
|____________|           |__________|
|PK EMP_ID   |>O------||-|PK DEPT_ID|
|FK DEPT_ID  |           |FK EMP_ID |
|NAME        |           |NAME      |
|...         |           |...       |

当一个位置的子代码值必须在其他位置显示为CK候选键时,FK外键保持不变

这取决于您决定在哪些表中需要哪些信息,即希望每个表代表哪些业务关系/关联。有了表的含义之后,会出现什么业务情况&表的含义决定了会出现什么数据库状态,即约束是什么,基数是什么。我们告诉DBMS,这样它就可以防止不可能出现的状态更新

在这种情况下,部门中有emp_id意味着什么?如果表的意思是有特征谓词department\u id有员工emp\u id。。。那么,部门id在员工中是多余的,而b部门id在部门中不是PK,c部门违反了规范化原则。如果该表表示部门id具有经理emp\U id。。。那么PK/FK就有意义了。但是,您碰巧遇到了典型的SQL DBMS,不需要处理FK周期。但你似乎只是想让部门id有个名字。。。。所以部门中没有emp_id列。或者,您可能希望员工和部门没有彼此的id加上工作人员id,部门id员工emp id在部门id工作,这涉及什么FKs

PS Knows不是一个有用的概念。你似乎怀疑这一点,因为你把它放在了吓人的语录里。你似乎试图捕捉到,你的头脑中有一些涉及员工和部门的含义。决定需要哪些谓词来记录您的情况。当一个FK成立时发生的事情是,给定您选择的某些含义,如果某些值满足某个关系/关联,那么它们也满足某个其他关系/关联。关系用于表示FK,虽然非常常见,但源于对关系模型和ER建模的误解


遵循已发布信息建模与数据库设计方法的texbook/参考演示。

回答后,我编辑了您的问题以改进标题。然后我在谷歌上搜索了一下,马上就找到了。总是用谷歌搜索你的问题和标签的许多清晰、简洁、具体的措辞,并加上和不加上“stackoverflow”。不是对它的模糊或笼统的描述。如果你找不到答案,那就选一个短语作为你的标题。我留下我的答案是因为这是一个不同的更好的选择&具体到您的桌子。