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

Oracle 在两个表中的两列上创建唯一约束,oracle,oracle11g,unique-constraint,Oracle,Oracle11g,Unique Constraint,这是我的数据模型 我需要将USER表中的username列设置为唯一列。但这对公司来说应该是独一无二的 例如,公司A的用户名可以是James,公司B的用户名也可以是James 为了实现这一点,我的意见是对用户名和公司id进行唯一约束 如何才能做到这一点?您需要更改数据库,向用户添加公司id。然后将唯一索引(公司id、用户名)添加到表中 user ---- user_id (PK) company_id (UNIQUE INDEX) emplyee_id email username

这是我的数据模型

我需要将
USER
表中的
username
列设置为唯一列。但这对公司来说应该是独一无二的

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

为了实现这一点,我的意见是对
用户名
公司id
进行
唯一约束


如何才能做到这一点?

您需要更改数据库,向用户添加公司id。然后将唯一索引(公司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

您需要更改数据库,向用户添加公司id。然后将唯一索引(公司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

从数据模型可以清楚地看出,一个用户可以属于多个公司,一个公司可以有多个用户。所以,将公司id添加到用户表将导致用户表爆炸,每个公司实例都有大量冗余用户数据。用户公司实体的存在就是为了避免这种情况

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

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

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


希望这能有所帮助。

从数据模型可以清楚地看出,一个用户可以属于多个公司,一个公司可以有多个用户。所以,将公司id添加到用户表将导致用户表爆炸,每个公司实例都有大量冗余用户数据。用户公司实体的存在就是为了避免这种情况

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

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

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


希望这有帮助。

谢谢Danilo。此更改是否会影响数据库的规范化?我认为此更改是在规范化之前,我建议更改实体关系模型,添加一个约束:用户只能在一个公司工作。谢谢Danilo。这个改变会影响数据库的规范化吗?我想这个改变是在规范化之前,我建议改变实体关系模型,增加一个约束:一个用户只能在一个公司工作。