跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 数据库的主键字段名叫`ID`不香么,为什么非要`table 名+ID`、`table 名缩写+ID`?
未分類
24 9 月 2020

数据库的主键字段名叫`ID`不香么,为什么非要`table 名+ID`、`table 名缩写+ID`?

数据库的主键字段名叫`ID`不香么,为什么非要`table 名+ID`、`table 名缩写+ID`?

資深大佬 : luxinfl 1

大佬们的主键字段名是怎么定义的?难道不叫 ID 还会有什么好处么??

大佬有話說 (100)

  • 資深大佬 : kiracyan

    语义更明确吧

  • 資深大佬 : alexmao

    当你有 10 个表的时候,都叫`ID`你记得过来吗?

  • 資深大佬 : laravel

    我合作的小伙连 id 都没有

  • 資深大佬 : lichao

    还有类似的,表名用 t_User, t_Customer

  • 資深大佬 : wangyzj

    @laravel #3 又看到这个 id 了

  • 資深大佬 : islxyqwe

    有外键查询时键名能统一

  • 主 資深大佬 : luxinfl

    @alexmao 你说的 10 个表什么场景?写查询 sql ?用别名不行麽?

  • 資深大佬 : qq292382270

    表多了好认

  • 資深大佬 : Rwing

    是的,我觉得没必要,上说的 t_前缀也没必要,当初提出 t_前缀时是为了区分 view 和 sp,现在都不用了

  • 主 資深大佬 : luxinfl

    @islxyqwe 可是我们不用 id 当做外键关联,我们都是用表里面定义的唯一业务编号 code 关联

  • 主 資深大佬 : luxinfl

    @qq292382270 我们不用 id 关联,所以我是选择性忽略了麽

  • 資深大佬 : tabris17

    @alexmao 都叫 id 为什么会记不住?你想表达的是不宜区分吧,t1.id AS t1_id 不可以吗?

  • 資深大佬 : wd

    比较下 where t1.id = t2.user_id 和 where t1.user_id = t2.user_id

  • 資深大佬 : lichao

    @wd

    当然是 where user.id = topic.user_id 好

  • 資深大佬 : qwerthhusn

    xxx 对象,表名 xxx,字段名 xxx_id xxx_name xxx_???

    这样做,一个是有些属性像 order name status 这些可能是 DB 的关键字,有时候工具或者代码高亮显示的很奇怪,但是基本上不报错
    另外一个原因就是表连接的时候,两个表可能有一样的字段,需要表(别)名点字段(当然平常也应该加上别名)

  • 資深大佬 : ztxcccc

    user 表如果主键叫 user_id,topic 表里的用户字段就该叫 topic_user_id,这么写 SQL 不反人类?

  • 資深大佬 : ColinZeb

    @wd 又不是代码生成器,为什么叫 t1t2,user 可以简写 u,topic 简写 t,所以就是 u.id = t.userid

  • 資深大佬 : baobao1270

    叫 ID:ORM 自动映射
    不叫:手写 SQL 连表查询方便

    看你是手写 SQL 还是用 ORM 咯

  • 資深大佬 : mebtte

    科普一下, SQL 有个 AS 关键词

  • 資深大佬 : THESDZ

    当然没必要了,开发了 n 个项目,直接 ID,root-class,反而开发效率更高,封装起来更容易,前端对接也不用关心,缩写啊什么的臭毛病

  • 資深大佬 : yogogo

    谁设计的听谁的,背锅也不会是你

  • 資深大佬 : THESDZ

    @alexmao 你难道用字段的时候不用表?想学习下这样的业务场景

  • 資深大佬 : alexmao

    @THESDZ 用表是用表,但是如果能区分,为什么不区分呢?多一点信息不是更加明确吗?

  • 資深大佬 : THESDZ

    @alexmao 既然用了表,`table.id` 和 `table.table_id`,你非要选后者,理由是语义更清晰?

  • 資深大佬 : alexmao

    @THESDZ 在一个表里叫 id,另一个表里放这个 id 的时候叫 table_id,不觉得很不规整吗?

  • 資深大佬 : netnr

    个人强烈推荐字段按表统一加前缀

  • 資深大佬 : jintianfengda

    关注,我个人是倾向主键就叫 id

  • 資深大佬 : linxl

    只要项目里统一口径就行, 各有好处吧.
    除了 id, 还有很多其他单词也是很高频的字段名, 难道都要加上 table 名吗

  • 資深大佬 : libracloud

    用 rails 习惯后,我什么都是按 rails 的来的

  • 資深大佬 : THESDZ

    @alexmao
    1. 不觉得,规整应该指的是同一套标准,而非同一个名字.
    2. 顺带:良好的代码应该简介的同时可以自解释,`ID`在当前表就是主键,没人看不懂,而`USER_ID`明显就是`USER`表的主键
    3. `ID`一般都没有业务含义,统一的好处是在处理统一的非业务逻辑的时候,不需要考虑一些异化的问题,从我有限的开发经验中,我认为全部使用`ID`效率更高.

  • 資深大佬 : chendy

    自己的 id 就叫 id,关联到别人的字段叫 xxx_id
    其实怎么叫不是很重要,主要还是要有统一的命名规范

  • 資深大佬 : zhaokun

    我们更奇葩
    主键用 pk_表名全称
    外键用 fk_表名全称
    定这规则的人说是 10 年高德地图的都这么用,现在是 2020 年了

  • 資深大佬 : NO9527

    喜欢 ID
    当一个 table 很长的适合,取一个很长的 table_id 感觉不舒服

  • 資深大佬 : crist

    我™天王老子来了我也直接叫它 id !

  • 資深大佬 : sonxzjw

    貌似表名+id 的命名方法很早很早了吧,不过很早很早之前我就只用 id 了

    也符合命名简单明了的规范(当然这是单表角度)

    但是多表角度的话都会有 表明.字段名,so 个人觉得还是 id 合适

  • 資深大佬 : tadebao

    @lichao 这种用法遗传自以前的虚拟主机时代 一个 MySQL 库 跑多个应用 在表名上加前缀来区分

  • 資深大佬 : cedoo22

    记得 powerdesinger 里面建模,默认检查有效性的时候,不同表相同名字的字段是有警告⚠

  • 資深大佬 : gaorenhua

    可能是多表联查的时候,可以直接撸,不用担心字段冲突?也不用用 tableA.id as Aid 来多写几行?

  • 資深大佬 : woodensail

    我看了下,好像没人提逻辑主键和业务主键的区分。
    说白了主是用逻辑主键的,所以主键不参与关联,是个无意义字段,自然一个 id 就行。
    而里面提倡「 table 名+id 」的则是用业务主键,主键中包含表名易于关联。

    所以无所谓对错,只是逻辑主键和业务主键两种不同的习惯而已。

  • 資深大佬 : whx20202

    就叫 id,没什么问题,多表关联时候带上表名就行了

  • 資深大佬 : draguo

    直接用 id 吧,我 orm 用的多,用其他字段得手动指定,带表名也就联查方便了一点点

  • 資深大佬 : OneMan

    规矩问题,非原则问题,没什么大不了和讨论的,看什么菜下什么锅即可

  • 資深大佬 : MarioLuo

    目前感觉唯一有用的地方 select xxx_name, yyy_name …join a.xxx_id=b.yyy_id,个人倾向不加前缀,毕竟谁不使用 ORM 了

  • 資深大佬 : tsingke

    差别是不大,但是 id 省事好用,完胜啰嗦的 xxx_id,当然用 id,不会真有人用 xxx_id 吧,正经人谁用 xxx_id 是吧?

  • 資深大佬 : dayFvckingByte

    统一叫”ID 不香么”

  • 資深大佬 : lin07hui

    多表查询时,字段可以不用 AS 。他可能不知道 AS 的存在,也可能他就是看不起 AS 。

  • 資深大佬 : RickyC

    @alexmao a.id, b.id 不香吗?

  • 資深大佬 : RickyC

    世界从来不是有序的, 而是从无序中寻找有序, 人们将这称为”劳动”.

  • 資深大佬 : littlewing

    自增主键 id 应该是一个和业务无关的字段,所以叫 id 就好

  • 資深大佬 : jorneyr

    平时用 id 或者 table_name_id 选一个就好了,但考虑分库分表时,使用 table_name_id,作为 sharding key 会比较好用

  • 資深大佬 : gadsavesme

    就是在关联表里看起来舒服点吧,不然主表叫 id,关联子表里叫 xxid,语义上不是很友好

  • 資深大佬 : akira

    叫 id,自增,不参与任何业务

  • 資深大佬 : ZXCDFGTYU

    user: id,username,pwd,salt

  • 資深大佬 : ZXCDFGTYU

    @ZXCDFGTYU user_info: id, user_id,phone

    id 每个表的 id 为 pk,table+_id 为关联字段 id,我个人习惯感觉还好,如果要是表名太长的话,可以用其他意思相近的英文单词替代。这样的话,能够单看 field 就能知道这个字段关联的哪个表,更方便一点。

  • 資深大佬 : ZXCDFGTYU

    上说的单独的关联表也可以,user_info_rel,table1+table2+_rel,字段里就是 user_id ( user.id ),user_info_id(user_info.id)。

  • 資深大佬 : ZXCDFGTYU

    以上为个人习惯

  • 資深大佬 : songco

    同一个项目统一风格就好

    真码农有能力制定项目命名规则,就按自己偏好来,自己制定不了,学会适应

    现代编辑器比较先进,各种风格差别不大

  • 資深大佬 : lithiumii

    这么喜欢统一主键名,mongodb 欢迎你

  • 資深大佬 : lululau

    别争了,本表主键名称以加表名作前缀的就是沙雕行为,没有任何好处

  • 資深大佬 : qiumaoyuan

    讨论技术问题最烦“规整”、“太重”、“奇怪”这类不明所以的形容词,我 TM 都不知道这些人到底在说啥,标准都让你定了,别人讨论个尖儿。

  • 資深大佬 : whenwind

    tp 连表查询重名的会哭死

  • 資深大佬 : h82258652

    都叫 id,不然用 orm 还得去配列名映射。

  • 資深大佬 : hbolive

    统一叫 id,主键自增,没有觉得不方便或者有混淆的地方

  • 資深大佬 : SAnii

    遇到项目里表特别多联查的时候,有前缀就很方便清晰明了.

  • 資深大佬 : sambawy

    爱怎么用就怎么用,都没错,风格统一就完事了

  • 資深大佬 : darknoll

    我就叫 id,谁不服谁自己写

  • 資深大佬 : fpure

    这样连表查询的时候很直观,一眼就知道连哪张表哪个字段

  • 資深大佬 : Outshine

    当前表的主键就叫 ID 啊,外键才会带上表名,比如文章表的用户 ID 就叫 user_id 或者 creator_id
    主键带当前表的表名就很沙雕(还有表前缀)

  • 資深大佬 : zhuweiyou

    当前表 id, 其他表 xxx_id

  • 資深大佬 : zppass

    擦,刚想说点啥,发现自己项目中的也是用 ID,如果不是关键字什么的其实应该没多大问题,像什么 ISXXX 之类的尽量不要用,有的框架会解析错误,表名啥的尽量能做到见词知意。

  • 資深大佬 : guanhui07

    我个人是倾向主键就叫 id, 查询可以别名 as

  • 資深大佬 : greg0220

    我们使用的 id 。但是感觉这个字段除了唯一性没什么其他用处了。

  • 資深大佬 : xpol

    我司基本上有 id 列,但不用。额外添加一列名曰 code 或者表名+code 。字符串类型,值是缩写加数字。手动实现一个后面的数字的自增。

  • 資深大佬 : zhuyichen1017

    听领导说是百度先带出来的

  • 資深大佬 : 0bit

    主键不叫 id 的都是异教徒

  • 資深大佬 : alexmao

    照你们这么说,user_name, artical_name, category_name,都叫 name 得了?反正 sql 的时候都带着表名。

  • 資深大佬 : 7654

    前人栽树后人乘凉,前人挖坑后人遭殃

  • 資深大佬 : ritaswc

    我觉得 id 好用啊,每次在 Orm 里面用到主键的时候,还要想一下是什么。八成设计表的人害怕 join 的时候主键冲突吧,笑

  • 資深大佬 : Still4

    user_info: id, name, company_id, phone_id
    company_info: id, name
    company_structure: company_id, user_id, user_level
    phone_info: id, name
    联表一查,喵喵喵?

  • 資深大佬 : nutting

    @zhaokun 这个好像是阿里规范也是这样的

  • 資深大佬 : lazing

    有契约其实比较好。
    比如 主表 primary.id 外键就叫 other.primary_id
    主表是 table.code,外键 table_code
    id 用 bigint code 用 varchar

  • 資深大佬 : THESDZ

    [https://data.stackexchange.com/stackoverflow/query/new]( https://data.stackexchange.com/stackoverflow/query/new) 右侧 demo 中都是 id

  • 資深大佬 : jasonding

    主表就叫 id,外键用 table_id

  • 資深大佬 : nekoneko

    @Rwing #9 有用到的,用来对表进行分组

  • 資深大佬 : lepig

    我个人倾向就是每个表都有一个 ID 主键,外键用 table_id

  • 資深大佬 : lambdaq

    postgres 里 id 就是一个单独的表。

  • 資深大佬 : liuxu

    香,结贴。

  • 資深大佬 : cs419

    这里的 `table 名+ID` 这个是指 user 表中 用 user_id 当 pk 么
    如果是这种 那应该用的人比较少吧

    大部分人应该都是 用 id 作为唯一标识
    user 表的 pk 是 id
    order 表 pk 是 id fk 是 user_id

    同时用 id 和 code
    id 是 pk 自然是唯一的
    code 作为外部关联标识应当是唯一的
    这样的话 不觉着 id 略显多余么 干脆别用 id 直接 code 作为 pk

    通常表里还会加两个字段 创建时间 修改时间
    查最新数据用 创建时间字段 比 id 字段 更恰当

  • 資深大佬 : Numbcoder

    这么用的基本都是野鸡程序员,凡是正规学过数据库课程的人都知道不存在语义问题

  • 資深大佬 : everhythm

    看情况,直接冗余也是可以的,1 个表 id 和 user_id 都有也正常,user_id 不是字符串的情况也是有的

  • 資深大佬 : bugFactory

    个人习惯吧
    table a (id pk, b_id fk)

  • 資深大佬 : bugFactory

    @bugFactory table b (id pk)

  • 資深大佬 : mirrorpen

    个人倾向字段名统一,id 就 id,name 就 name,title 就 title,外键用 table_字段不就好了,而且不同表对应不同业务为啥会混淆。。

  • 資深大佬 : pastgift

    规范而已,不必大惊小怪。
    一般规范都来源于血泪史,而每个人的血泪史都有所不同,所以有不同的规范很正常。

  • 資深大佬 : adoula

    根本不需要前缀,你们这些笨蛋,大笨蛋

  • 資深大佬 : mirrorpen

    @mirrorpen 有的时候表名太长,字段名前加表前缀是又丑又长..(暗指我司老项目的数据库设计)

  • 資深大佬 : malaohu

    统一规范。
    列表直接叫 d 也可以。

  • 資深大佬 : forty

    “非要” 是指什么? 谁非要?你女朋友的要求,你领导的要求,还是团队的规范?
    每个团队有自己的习惯和配套的工具等,进行统一要求能够带来一些便利。

    叫 xxx_id 而不是 id 的好处就是可以单独用的时候也具备辨识度(包括语义、可读性),多表协同的时候能提供一部分便利。

    你在一个系统里,统一规范就好,别一会东一会西。

    如果你一般都是 select * from xxx order by id desc limit 1 这么简单的事情,那显然没必要纠结。

    就像写个 hello world 没必要引入一大堆框架,搞上一大堆设计模式。

  • 資深大佬 : newmlp

    我的字段怎么定义关你屁事,这也要发帖?

  • 資深大佬 : cheng6563

    只叫 ID 就行了。加短前不就是匈牙利命名法么,缀稍微多几个表就要重名,然后要么要特殊设计记不住的前缀,要么还是要带上表名

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具