我不确定什么是强制参与以下数据库设计的最佳方式(可以是SQL服务器,Oracle,mySQL等)。我有两张桌子:工厂和工人。我为设计创建了两条规则: 1)每个工厂雇用至少一名(或许多)工人。 2)每个工人只为一个工厂工作。
我为设计创建了一个ERD:
[工厂] - || ---雇用--- |< - [工人]
FACTORY表如下所示:
1 A
2 B
3 C
WORKER表如下所示:
1 Tom 2
2安1
1月3日1日
在worker表中,Factory_ID是外键(FK),并且它被设置为NOT NULL,因为(ERD表示)每个工作人员必须为一个工厂工作而且只能工作一个工厂。可以通过将FK(Worker表中的Factory_ID字段)设置为非null来强制执行此参与。
这是我的问题,强制参与的最佳方式是什么 - 每个工厂至少雇佣一名工人?即我需要确保每个factory_id必须至少在worker表中引用一次。因此,现在#3工厂不雇用任何违反ERD参与规则的人。
我想知道实施这种参与的最佳方式是什么?
答案 0 :(得分:5)
关系的1+约束通常在应用层实现。
问题在于有一个时间概念可以预测:有了这种限制,你需要一个工人为你的工厂,但你的工人需要一个工厂自己:这根本不可能实现这个规则同步的方式。
解决方案可能是管理一种后台以单独添加元素(用于管理目的),然后在公共前端实施适当的限制以匹配您的1+要求。 例如: