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。这个改变会影响数据库的规范化吗?我想这个改变是在规范化之前,我建议改变实体关系模型,增加一个约束:一个用户只能在一个公司工作。