2016-05-08 64 views
0

這是我的數據模型。在兩個表格的兩列上創建唯一約束

data-model

我需要在USER表中的列username作爲唯一的列。但它應該是公司獨一無二的。

例如,公司A可以具有用戶名作爲詹姆斯公司B也可以具有用戶名作爲詹姆斯

爲了達到這個目的,我的意見是製作一個unique constraintusernamecompany_id

我該怎麼做?

回答

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 
+0

謝謝達尼洛。這種改變是否會影響數據庫的規範化? – Bishan

+0

我認爲這種變化是在規範化之前,我建議改變實體關係模型增加一個約束:用戶只能在一家公司工作。 –

1

從數據模型,很顯然,一個用戶可以屬於多個公司,一個公司可以有多個用戶。因此,將company_id添加到USER表將導致USER表爆炸,併爲每個公司實例提供大量冗餘用戶數據。 USER_COMPANY實體專門用於避免這種情況。

不建議使用數據模型更改來處理此要求。處理此要求的最佳方法是通過應用程序代碼或觸發器。

通過數據模型更改實現此目的的效率最低的方法是,在user_company表中添加username列,並在整個應用程序的所有DML中同步user_name列的user和user_company表。這將再次需要大量的應用程序代碼。

所以最好的解決方案是把它留給應用程序,而不是打擾一個好的數據模型。

希望這會有所幫助。

相關問題