鍍金池/ 問答/數(shù)據(jù)庫/ 數(shù)據(jù)庫建表疑問,是否要用復(fù)合主鍵?

數(shù)據(jù)庫建表疑問,是否要用復(fù)合主鍵?

我需要建一張表:

OrderId*  UserId  OrderDate  Total
1          1      2017-1-1  100
2          1      2017-1-1  120
3          9      2017-1-1  20
4          12     2017-1-1  88

一般情況下我們就用OrderId作為主鍵,查詢的時(shí)候也是where UserId='x'作為條件查詢的。

但是我想知道是否有必要建立這樣的結(jié)構(gòu):

UserId* OrderId*  OrderDate  Total
1          1      2017-1-1  100
1          2      2017-1-1  120
9          3      2017-1-1  20
12         4      2017-1-1  88

同時(shí)把UserId和OrderId作為復(fù)合主鍵,當(dāng)用戶1在更新的數(shù)據(jù)的時(shí)候,用戶9來查詢時(shí)能夠立即返回結(jié)果,而不用等1鎖表結(jié)束?

是否這樣設(shè)計(jì)在多用戶需求的場(chǎng)景下可以劃分?jǐn)?shù)據(jù)的操作細(xì)粒度?

求大神來幫忙,小的感謝!

回答
編輯回答
貓小柒

不建議在數(shù)據(jù)庫層面加鎖,建議通過服務(wù)端的內(nèi)存鎖(鎖主鍵)。當(dāng)某個(gè)用戶要修改某個(gè)id的數(shù)據(jù)時(shí),把要修改的id存入memcache,若其他用戶觸發(fā)修改此id的數(shù)據(jù)時(shí),讀到memcache有這個(gè)id的值時(shí),就阻止那個(gè)用戶修改。原文詳情

2017年8月26日 11:44
編輯回答
涼薄

毫無必要,根據(jù)主鍵更新數(shù)據(jù)只會(huì)鎖定一行數(shù)據(jù),而不是鎖定整個(gè)表。

2018年3月20日 06:42
編輯回答
情已空

沉下去了呢,沒有人搞這個(gè)嗎?這里難道都是JS專區(qū)?

2017年8月2日 05:08