公司用多列做主键,但是我觉得没必要

2019-08-30 18:07:28 +08:00
 likefly

PRIMARY KEY ('sys_id', 'sys_date')

说明一下 sys_id 是有序唯一的,且 sys_id 的前缀其实就是 sys_date,我上司说就这么搞,我说没必要,然后反问为什么这么搞,然后告诉我说听他的就对了。

怎么破?

4254 次点击
所在节点    数据库
34 条回复
Livid
2019-08-31 04:17:57 +08:00
如果表上还有 partition,那么确实会需要把用于分区的列也放入主键。
kxjhlele
2019-08-31 07:36:48 +08:00
我们的业务 常年 3 列为主键,类似时序内容,
jinsongzhao
2019-08-31 08:32:24 +08:00
@Livid 哇不错,学了一招。原来分区还需要这样
jinsongzhao
2019-08-31 08:43:11 +08:00
@likefly 如果是为了将来升级性能预留的设计,感觉这是超过 10 年工作经验的人才会考虑的问题吧。
@Livid 果可能产生超多数据的表,岂不是都应该把时间加入主键。看来 hibernate 中复合键的各种操作,有必要玩得溜溜的,费那么大力气设计了这个功能,也从未看人抱怨还是有道理的。
leeton
2019-08-31 09:12:05 +08:00
反正背锅的是你
jorneyr
2019-08-31 09:46:08 +08:00
你行你上啊 ^_^
ruhexiechengxu
2019-08-31 09:57:16 +08:00
不要你觉得,要领导觉得
sdot96
2019-08-31 16:26:52 +08:00
对数据表进行分区的列必须属于主键,可能是考虑以后数据量大了直接用 sys_date 做 range 分区
Kenhengge
2019-08-31 18:47:58 +08:00
谁负责听谁的,人家要担负失败责任,你提出意见就尽到责了,采纳与否负责的人权衡。也许你的方案也行,但是条条大路通罗马,人家的方案成功过,风险可控,按他的路继续走无可厚非
conn4575
2019-08-31 20:08:25 +08:00
可能是为了按时间分区
whywhywhy
2019-08-31 20:46:19 +08:00
我们在用的 erp 系统,没有主键。。。sqlserver,没有主键。。。。

ID 字段是 uuid
likefly
2019-09-02 09:16:31 +08:00
@jinsongzhao
@sdot96
受教了
jinsongzhao
2019-09-02 13:41:15 +08:00
@whywhywhy uuid 就是主键吧,可能是你们在导入导出数据时,重建表了,主键自动消失了。很多运维人员维护数据库时,也会把主键搞掉。
whywhywhy
2019-09-03 07:37:48 +08:00
@jinsongzhao 我导入导出从不动表的,一般直接导整个数据库,看了很多表都是没主键。没看到有主键的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/596620

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX