关于主键的问题。

ruhong1 2017-01-11 05:01:45
我的sql主键,原来是用int自增量型的。
后来用了guid,现在问题来了,
都说guid效率低,不直观。
那么,如果不用guid,
那么我如何保证我当前增加的主键值,在数据库中没有被占用呢。
当然,自增量型是不用你管主键的,
问题是,我在本地在主表中增加一行记录,然后我又要在从表中增加一条记录来关联这个主表的键,
如果是这个时候我没有办法确认主表的键值啊,
guid就简单了,我在本地生成一个,然后从表就用他就行了。
...全文
172 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruhong1 2017-01-29
  • 打赏
  • 举报
回复
引用 11 楼 daixf_csdn 的回复:
我是有个原则的,如果一个表的字段是要作为另外一个表的外键的,我是不会用guid,以及自增id的。可读性都不好。必须使用自编码。
自编码在多用户的环境下,很容易冲突。
闭包客 2017-01-12
  • 打赏
  • 举报
回复
设计主键其实需要一些简单的技巧的。
引用 8 楼 ruhong1 的回复:
[quote=引用 7 楼 closurer 的回复:] [quote=引用 6 楼 ruhong1 的回复:] [quote=引用 5 楼 closurer 的回复:] [quote=引用 4 楼 ruhong1 的回复:] 这里面的问题,就在于从表。 从表中要记录相关联的主表键值,你查询再写主表,从表,再更新,这里面感觉问题非常的多。 比如你增加了三个工作任务,那么你必然要有三个键值, 然后这三个工作任务,又产生了相关的流程记录,记录任务的过程, 你要从服务器中去读取这三个工作任务,然后分配键值,很麻烦啊。
好像也没比自增 id 要麻烦啊。 [/quote] guid就简单,我根本就不用考虑其他人。我本地生成一个就用了。[/quote] 这是当然的。不如你就用 guid 啊,有优点为什么不用呢? guid 效率低不足信。 [/quote] 说是占用数据库空间,浪费,产生碎片,一堆理由,当然,最直接的还是可读性差。不如自己产生一个guid?加上机器码 再加一些规则?比如与时间相关?[/quote] 自己做到像 guid 这样的效果,结果可读性也是一样的差的。 那么不用自增 id 又是什么理由呢?
圣殿骑士18 2017-01-12
  • 打赏
  • 举报
回复
我是有个原则的,如果一个表的字段是要作为另外一个表的外键的,我是不会用guid,以及自增id的。可读性都不好。必须使用自编码。
圣殿骑士18 2017-01-12
  • 打赏
  • 举报
回复
guid性能方面并不是大问题。最不好的就是可读性了,在开发的时候,以及查数据库问题的时候,看到一个表里n个guid字段,我是看到要疯,脑子根本不够用,数据根本看不懂,记不住啊,如果是个自增id或者是编码,大脑里记一下,然后做其他表查询分析。用guiid的话,多了很多复制粘贴,多表关联。 我是用自增id的,没什么毛病啊。ado.net插入表数据的时候,是会给你返回id值的。
ruhong1 2017-01-11
  • 打赏
  • 举报
回复
引用 7 楼 closurer 的回复:
[quote=引用 6 楼 ruhong1 的回复:] [quote=引用 5 楼 closurer 的回复:] [quote=引用 4 楼 ruhong1 的回复:] 这里面的问题,就在于从表。 从表中要记录相关联的主表键值,你查询再写主表,从表,再更新,这里面感觉问题非常的多。 比如你增加了三个工作任务,那么你必然要有三个键值, 然后这三个工作任务,又产生了相关的流程记录,记录任务的过程, 你要从服务器中去读取这三个工作任务,然后分配键值,很麻烦啊。
好像也没比自增 id 要麻烦啊。 [/quote] guid就简单,我根本就不用考虑其他人。我本地生成一个就用了。[/quote] 这是当然的。不如你就用 guid 啊,有优点为什么不用呢? guid 效率低不足信。 [/quote] 说是占用数据库空间,浪费,产生碎片,一堆理由,当然,最直接的还是可读性差。不如自己产生一个guid?加上机器码 再加一些规则?比如与时间相关?
闭包客 2017-01-11
  • 打赏
  • 举报
回复
引用 6 楼 ruhong1 的回复:
[quote=引用 5 楼 closurer 的回复:] [quote=引用 4 楼 ruhong1 的回复:] 这里面的问题,就在于从表。 从表中要记录相关联的主表键值,你查询再写主表,从表,再更新,这里面感觉问题非常的多。 比如你增加了三个工作任务,那么你必然要有三个键值, 然后这三个工作任务,又产生了相关的流程记录,记录任务的过程, 你要从服务器中去读取这三个工作任务,然后分配键值,很麻烦啊。
好像也没比自增 id 要麻烦啊。 [/quote] guid就简单,我根本就不用考虑其他人。我本地生成一个就用了。[/quote] 这是当然的。不如你就用 guid 啊,有优点为什么不用呢? guid 效率低不足信。
ruhong1 2017-01-11
  • 打赏
  • 举报
回复
引用 5 楼 closurer 的回复:
[quote=引用 4 楼 ruhong1 的回复:] 这里面的问题,就在于从表。 从表中要记录相关联的主表键值,你查询再写主表,从表,再更新,这里面感觉问题非常的多。 比如你增加了三个工作任务,那么你必然要有三个键值, 然后这三个工作任务,又产生了相关的流程记录,记录任务的过程, 你要从服务器中去读取这三个工作任务,然后分配键值,很麻烦啊。
好像也没比自增 id 要麻烦啊。 [/quote] guid就简单,我根本就不用考虑其他人。我本地生成一个就用了。
闭包客 2017-01-11
  • 打赏
  • 举报
回复
引用 4 楼 ruhong1 的回复:
这里面的问题,就在于从表。 从表中要记录相关联的主表键值,你查询再写主表,从表,再更新,这里面感觉问题非常的多。 比如你增加了三个工作任务,那么你必然要有三个键值, 然后这三个工作任务,又产生了相关的流程记录,记录任务的过程, 你要从服务器中去读取这三个工作任务,然后分配键值,很麻烦啊。
好像也没比自增 id 要麻烦啊。
ruhong1 2017-01-11
  • 打赏
  • 举报
回复
这里面的问题,就在于从表。 从表中要记录相关联的主表键值,你查询再写主表,从表,再更新,这里面感觉问题非常的多。 比如你增加了三个工作任务,那么你必然要有三个键值, 然后这三个工作任务,又产生了相关的流程记录,记录任务的过程, 你要从服务器中去读取这三个工作任务,然后分配键值,很麻烦啊。
Poopaye 2017-01-11
  • 打赏
  • 举报
回复
写个服务来获取id
闭包客 2017-01-11
  • 打赏
  • 举报
回复
guid 效率低的观点不正确。 实际上 guid 比较分散,可以避免数据热点争用的问题。
闭包客 2017-01-11
  • 打赏
  • 举报
回复
插入记录之前查一下是否存在不就行了?

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧