2011-07-09 36 views

回答

3

是,圖片中的以下情形:

表1的id字段是你的外鍵。這是一個獨特的索引。

Table 1: 
________________________ 
| id | value | blah... | 
|----|--------|---------| 
| 0 | val 1 | .... | 
|----|--------|---------| 
| 1 | val 2 | .... | 
|----|--------|---------| 
... ...  ... 

現在有兩種可能性與表2

1)table_1_id不是唯一

Table 2: 
_____________________________ 
| id | table_1_id | blah... | 
|----|-------------|---------| 
| 0 |  1  | .... | <------ Duplicates are okay! 
|----|-------------|---------| <--/ 
| 1 |  1  | .... | 
|----|-------------|---------| 
... ...  ... 

2)table_1_id是獨特

Table 2: 
_____________________________ 
| id | table_1_id | blah... | 
|----|-------------|---------| 
| 0 |  1  | .... | 
|----|-------------|---------| 
| 1 |  n  | .... | <------- Cannot be 1, no duplicates 
|----|-------------|---------| 
... ...  ... 
1

如果你希望它是唯一的,你聲明它是唯一的。

1

多個記錄可以引用另一個表中的單行,它是完全有效的db設計(1:M關係)。所以問題是,應該是第二個表中的字段是否唯一。它不是從問題搞清什麼是你的表現考慮

1

唯一約束通常創建如同@yi_H所說,爲了執行管理你的數據的規則。但是,由於獨特的約束等同於獨特的索引,所以創建它們有一些優缺點。字段上的索引需要更多時間來執行對該字段的插入或更新,因爲索引需要檢查重複項和更新。索引也會增加你的表的大小。在專業方面,如果您根據該字段的值(即WHERE myUniqueField = 5JOIN myTable ON myUniqueField = someOtherIndexedField)執行查詢,那麼這些查詢將運行得更快,因爲它們可以執行索引查找而不是掃描。這些考慮事項僅在您擁有大量數據或需要快速運行大量查詢時纔會發揮作用。所以一般來說,如果您有一個應該是唯一的字段,請將其設置爲唯一。

相關問題