2016-09-10 120 views
0

enter image description here有沒有使用複合主鍵?

ENTITY _COMMENT表爲什麼我們選擇Entity_IDCOMMENT_NO複合主鍵代替,爲什麼我們不能採取只COMMENT_NO作爲主鍵。

+0

我認爲沒有采取複合主鍵,而是我們只能採取單一主鍵 – beginner

+0

comment_no是獨特的,'自動生成''autoincreament'因此它沒有機會是相同的 – beginner

回答

1

你是對的,數據庫設計中的常見做法是使用人造主鍵,如所有行中唯一的「串行」列。

但您的案例中的entity_id就是一個很好的示例,其中列與實體標識關係。將標識關係應用於作爲標識表中行的一部分的列。因此它是該表的主鍵的一部分。

+0

我收到你,你是說如果我們有一個'user_info'表,我們不能把'user_name'作爲主鍵(因爲名字可以有相同的值)。所以我們將'user_id'作爲主鍵,但是我們也可以將user_name作爲主鍵的一部分,因爲通過名稱通常可以幫助我們識別該行。僅當user_id本身不唯一時, – beginner

+0

(user_id,user_name)纔是適當的主鍵。 –

0

每個實體都有其註釋集,由Comment_no(1,2,3等)標識。因此,不同的實體將具有相同的Comment_no,並且該屬性不能區分所有其他實體中的Entity comment。相反,對(Entity_id, Comment_no)可以識別所有其他中的每一個單獨的Entity comment並且可以用作主鍵。

+0

在這種情況下,一個用戶只能在一個實體 – beginner

+0

@beginner上評論一次,每次添加新評論時,即使它來自同一個用戶,也會收到一個新的comment_no,因此任何用戶都可以評論任何數量的倍。 – Renzo

+0

然後comment_no將永遠是唯一的,對於哪些評論你說的評論有相同的'comment_no',請告訴我。 – beginner

0


讓我解釋清楚。你有兩個Entity_ID和COMMENT_NO作爲主鍵,並且兩者的組合往往是唯一的。考慮在ENTITY_COMMENT表中,您的值已經爲ENTITY = 10COMMENT_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. 

希望你的疑問很清楚。如果不讓我知道會澄清你。

+0

如果我們將'comment_no'作爲主鍵,它可以是相同的,例如,如果添加的每個新評論'comment_no'將會不同,例如我們可以將'comment_no'作爲'int'' unsigned', 'autoincreament'值(像一個連續的列) – beginner

+0

是的你是對的,因爲每一個新的comment_no數據都會被插入。但是你不應該將現有的entity_id和comment_no放在一起。 –

+0

我們可以在數據庫設計中看到'comment_no'之前沒有用過,所以我怎麼纔能有現有的價值。並且我們將它作爲串行列,然後它如何可以是現有的或相同的 – beginner

1

在複合鍵中,我們確保這兩個鍵的組合不會重複。換句話說,組合將唯一標識一個特定的行。

我認爲在您的情況下,可能會有多次輸入commentno與單個實體id.for避免這種情況,並確保業務完整性組合設置爲主鍵的機會。