1
A
回答
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 = 5
或JOIN myTable ON myUniqueField = someOtherIndexedField
)執行查詢,那麼這些查詢將運行得更快,因爲它們可以執行索引查找而不是掃描。這些考慮事項僅在您擁有大量數據或需要快速運行大量查詢時纔會發揮作用。所以一般來說,如果您有一個應該是唯一的字段,請將其設置爲唯一。
相關問題
- 1. 將通用聲明變量聲明爲全局是否有任何好處?
- 2. 是否有任何bluetoothdevice唯一ID
- 3. 沒有任何聲明模塊的打印文件是否有意義?
- 4. 我是否應該將Vector <>聲明爲Vector <> *?
- 5. 有多少列確認是否聲明
- 6. Auth0 JWT中的「Sub」聲明是否始終是唯一的?
- 7. 應該聲明一個鎖定變量是否爲volatile?
- 8. handlebars.js - 聲明是否聲明
- 9. 是否定時聲明好主意?
- 10. 將公共類中聲明的類成員定義的getters/setters聲明爲private是否有意義?
- 11. 列名是否應該在所有表中唯一?
- 12. 在包對象中聲明一個類與在聲明一個類之間是否有任何實質區別?
- 13. 是否有任何理由聲明一個沒有繼承的虛擬方法?
- 14. 是否有任何理由不一次性聲明所有變量?
- 15. 是否有任何目的來重新聲明JavaScript變量?
- 16. 空的聲明塊是否有任何用途?
- 17. 查看是否有任何QTips可見?
- 18. 我該如何聲明一個任意位模式的float型常量?
- 19. 將聲明合併爲一個聲明還是不合並?
- 20. 查找列是否有唯一約束
- 21. 是否有可能將數組聲明爲實例變量?
- 22. 是否有必要將AtomicReference聲明爲volatile?
- 23. 是否有將數組轉換爲字典的聲明方式?
- 24. 是否有可能將Ext.Component聲明爲全局變量?
- 25. 聲明符是否有零聲明說明符?
- 26. 是否應該在RabbitMQ中多次聲明交換或隊列?
- 27. 花括號是否意味着PowerShell變量聲明中的任何內容?
- 28. TimeStamp列是否唯一?
- 29. 是否有可能將任何任意文件轉換爲字符串? (C#)
- 30. Bash-是否有可能爲行的唯一一列使用-uniq?