这是我的数据模型。
我需要将username
表中的USER
列作为唯一列。但它应该与公司一致。
例如,公司A 的用户名可以是 James ,而公司B 的用户名也可以是 James
为实现这一目标,我的意见是使用unique constraint
和username
制作company_id
。
我该怎么做?
答案 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表。这将再次需要大量的应用程序代码。
因此,最好的解决方案是将其留给应用程序,而不是干扰良好的数据模型。
希望这有帮助。