强制表参与的最佳方式

时间:2013-04-07 20:18:32

标签: mysql sql-server database oracle database-design

我不确定什么是强制参与以下数据库设计的最佳方式(可以是SQL服务器,Oracle,mySQL等)。我有两张桌子:工厂和工人。我为设计创建了两条规则: 1)每个工厂雇用至少一名(或许多)工人。 2)每个工人只为一个工厂工作。

我为设计创建了一个ERD:

[工厂] - || ---雇用--- |< - [工人]

FACTORY表如下所示:

Factory_ID(PK)Factory_Name

1 A
2 B
3 C

WORKER表如下所示:

Worker_ID(PK)Worker_Name Factory_ID(FK)

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参与规则的人。

我想知道实施这种参与的最佳方式是什么?

1 个答案:

答案 0 :(得分:5)

关系的1+约束通常在应用层实现。

  • 存储过程
  • 触发器
  • 后端的业务层
  • 前端
  • 以前的任何组合

问题在于有一个时间概念可以预测:有了这种限制,你需要一个工人为你的工厂,但你的工人需要一个工厂自己:这根本不可能实现这个规则同步的方式。

解决方案可能是管理一种后台以单独添加元素(用于管理目的),然后在公共前端实施适当的限制以匹配您的1+要求。 例如:

  1. 将工人移至公司时,请检查是否至少有一个工作人员
  2. 在员工更换公司时实施公司更换,以确保每位员工始终只有一家公司。