這是我的數據模型。在兩個表格的兩列上創建唯一約束
我需要在USER
表中的列username
作爲唯一的列。但它應該是公司獨一無二的。
例如,公司A可以具有用戶名作爲詹姆斯和公司B也可以具有用戶名作爲詹姆斯。
爲了達到這個目的,我的意見是製作一個unique constraint
與username
和company_id
。
我該怎麼做?
這是我的數據模型。在兩個表格的兩列上創建唯一約束
我需要在USER
表中的列username
作爲唯一的列。但它應該是公司獨一無二的。
例如,公司A可以具有用戶名作爲詹姆斯和公司B也可以具有用戶名作爲詹姆斯。
爲了達到這個目的,我的意見是製作一個unique constraint
與username
和company_id
。
我該怎麼做?
您需要更改數據庫,將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
從數據模型,很顯然,一個用戶可以屬於多個公司,一個公司可以有多個用戶。因此,將company_id添加到USER表將導致USER表爆炸,併爲每個公司實例提供大量冗餘用戶數據。 USER_COMPANY實體專門用於避免這種情況。
不建議使用數據模型更改來處理此要求。處理此要求的最佳方法是通過應用程序代碼或觸發器。
通過數據模型更改實現此目的的效率最低的方法是,在user_company表中添加username列,並在整個應用程序的所有DML中同步user_name列的user和user_company表。這將再次需要大量的應用程序代碼。
所以最好的解決方案是把它留給應用程序,而不是打擾一個好的數據模型。
希望這會有所幫助。
謝謝達尼洛。這種改變是否會影響數據庫的規範化? – Bishan
我認爲這種變化是在規範化之前,我建議改變實體關係模型增加一個約束:用戶只能在一家公司工作。 –