在两个表中的两列上创建唯一约束

时间:2016-05-08 05:37:23

标签: oracle oracle11g unique-constraint

这是我的数据模型。

data-model

我需要将username表中的USER列作为唯一列。但它应该与公司一致。

例如,公司A 的用户名可以是 James ,而公司B 的用户名也可以是 James

为实现这一目标,我的意见是使用unique constraintusername制作company_id

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您需要更改数据库,将company_id添加到用户。然后在表中添加唯一索引(company_id,用户名)。

user
----
user_id     (PK)
company_id  (UNIQUE INDEX)
emplyee_id
email
username    (UNIQUE INDEX)
password

但我认为你不需要多对多关系, 以这种方式更改数据库以消除多对多的反应可能是一个好主意:

company
-------
company_id  (PK)
company_name

user
----
user_id     (PK)
company_id  
emplyee_id
email
username
password

答案 1 :(得分:1)

从数据模型中可以清楚地看出,用户可以属于多个公司,公司可以拥有多个用户。因此,将company_id添加到USER表将导致USER表爆炸,每个公司实例都有大量冗余用户数据。 USER_COMPANY实体专门用于避免这种情况。

不建议使用数据模型更改来处理此要求。处理此要求的最佳方法是通过应用程序代码或触发器。

通过数据模型更改实现此目标的效率最低的方法是,在user_company表中添加username列,并在整个应用程序中跨所有DML同步user_name列的user和user_company表。这将再次需要大量的应用程序代码。

因此,最好的解决方案是将其留给应用程序,而不是干扰良好的数据模型。

希望这有帮助。