回答
你是對的,數據庫設計中的常見做法是使用人造主鍵,如所有行中唯一的「串行」列。
但您的案例中的entity_id就是一個很好的示例,其中列與實體標識關係。將標識關係應用於作爲標識表中行的一部分的列。因此它是該表的主鍵的一部分。
我收到你,你是說如果我們有一個'user_info'表,我們不能把'user_name'作爲主鍵(因爲名字可以有相同的值)。所以我們將'user_id'作爲主鍵,但是我們也可以將user_name作爲主鍵的一部分,因爲通過名稱通常可以幫助我們識別該行。僅當user_id本身不唯一時, – beginner
(user_id,user_name)纔是適當的主鍵。 –
每個實體都有其註釋集,由Comment_no
(1,2,3等)標識。因此,不同的實體將具有相同的Comment_no
,並且該屬性不能區分所有其他實體中的Entity comment
。相反,對(Entity_id, Comment_no)
可以識別所有其他中的每一個單獨的Entity comment
並且可以用作主鍵。
讓我解釋清楚。你有兩個Entity_ID和COMMENT_NO作爲主鍵,並且兩者的組合往往是唯一的。考慮在ENTITY_COMMENT表中,您的值已經爲ENTITY = 10和COMMENT_NO = 20。我會舉幾個例子,
If you try to insert a value as,
Entity_ID COMMENT_NO
10 5 - Data will be inserted because COMMENT is not 20
6 20 - Data will be inserted because Entity_id is not 10
10 20 - Here data will not be inserted because the combination of Entity_ID and COMMENT_NO is same.
希望你的疑問很清楚。如果不讓我知道會澄清你。
如果我們將'comment_no'作爲主鍵,它可以是相同的,例如,如果添加的每個新評論'comment_no'將會不同,例如我們可以將'comment_no'作爲'int'' unsigned', 'autoincreament'值(像一個連續的列) – beginner
是的你是對的,因爲每一個新的comment_no數據都會被插入。但是你不應該將現有的entity_id和comment_no放在一起。 –
我們可以在數據庫設計中看到'comment_no'之前沒有用過,所以我怎麼纔能有現有的價值。並且我們將它作爲串行列,然後它如何可以是現有的或相同的 – beginner
在複合鍵中,我們確保這兩個鍵的組合不會重複。換句話說,組合將唯一標識一個特定的行。
我認爲在您的情況下,可能會有多次輸入commentno與單個實體id.for避免這種情況,並確保業務完整性組合設置爲主鍵的機會。
- 1. 沒有@EmbeddedId的複合鍵
- 2. SQL表中有複合鍵和主鍵
- 3. 有沒有辦法只返回複合主鍵的一部分?
- 4. 具有複合主鍵的實體類沒有getter和setter
- 5. 當主鍵沒有主鍵時,mysql主鍵重複輸入
- 6. 外鍵必須與引用的主鍵具有相同的列數。但我沒有使用複合鍵
- 7. 具有空值的JPA複合主鍵
- 8. 具有複合主鍵的Yii模型
- 9. SQL Server - 表具有複合主鍵
- 10. 使用外鍵保存複合主鍵
- 11. 使用複合主鍵作爲外鍵
- 12. 複合主鍵
- 13. 複合主鍵
- 14. 複合主鍵,
- 15. 刪除沒有主鍵的重複項
- 16. 表沒有主鍵
- 17. 使用Cloudformation創建具有複合主鍵的DynamoDB
- 18. 使用複合主鍵或具有多個刀片
- 19. 使用具有*嵌套*複合主鍵的@IdClass限制JPA 1.0?
- 20. yii沒有顯示這個$ model->錯誤代碼 - 使用複合主鍵
- 21. 創建具有複合主鍵的表引用兩個外鍵
- 22. 當表沒有主鍵時使用DeleteAllOnSubmit
- 23. 查找後沒有使用主鍵
- 24. 對沒有主鍵的表使用DbUnit
- 25. 複合鍵沒有得到相應ID
- 26. RailsAdmin沒有弄清楚複合鍵
- 27. ManyToMany在休眠沒有複合鍵
- 28. 沒有關鍵屬性的複合PK
- 29. 有沒有像主鍵和輔助鍵?
- 30. 引用複合主鍵
我認爲沒有采取複合主鍵,而是我們只能採取單一主鍵 – beginner
comment_no是獨特的,'自動生成''autoincreament'因此它沒有機會是相同的 – beginner