问题: 数据库建表疑问,是否要用复合主键?
描述:

我需要建一张表:

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作为主键,查询的时候也是where UserId='x'作为条件查询的。

但是我想知道是否有必要建立这样的结构:

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

同时把UserId和OrderId作为复合主键,当用户1在更新的数据的时候,用户9来查询时能够立即返回结果,而不用等1锁表结束?

是否这样设计在多用户需求的场景下可以划分数据的操作细粒度?

求大神来帮忙,小的感谢!


解决方案1:

不建议在数据库层面加锁,建议通过服务端的内存锁(锁主键)。当某个用户要修改某个id的数据时,把要修改的id存入memcache,若其他用户触发修改此id的数据时,读到memcache有这个id的值时,就阻止那个用户修改。原文详情

解决方案2:

毫无必要,根据主键更新数据只会锁定一行数据,而不是锁定整个表。

解决方案3:

沉下去了呢,没有人搞这个吗?这里难道都是JS专区?

上一篇win10安装sql server 2005出错,求指教
下一篇怎么关闭sql server 查询后用减号生成的字段名与字段值的分割行
明星图片
相关文章
《 数据库建表疑问,是否要用复合主键?》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)