表名应该用单数,还是复数? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Ayanokouji
V2EX    程序员

表名应该用单数,还是复数?

  •  
  •   Ayanokouji 2023-08-13 19:28:11 +08:00 8212 次点击
    这是一个创建于 790 天前的主题,其中的信息可能已经有所发展或是发生改变。
    71 条回复    2023-08-14 23:37:18 +08:00
    BaseException
        1
    BaseException  
       2023-08-13 19:28:38 +08:00 via iPhone
    单数
    jlmzzz
        2
    jlmzzz  
       2023-08-13 19:29:33 +08:00
    没见过用复数的
    lanlanye
        3
    lanlanye  
       2023-08-13 19:31:12 +08:00 via iPhone
    我用复数,实际上随你喜欢……
    msg7086
        4
    msg7086  
       2023-08-13 19:32:04 +08:00
    Rails 里都用的复数。一张数据表里存了多条数据也就是多个对象,用复数很正常。
    fox0001
        5
    fox0001  
       2023-08-13 19:33:05 +08:00 via Android
    单数
    thinkershare
        6
    thinkershare  
       2023-08-13 19:35:37 +08:00   3
    无关紧要的事情, 有时候用单数, 有时候用复数, 看心情.
    MIUIOS
        7
    MIUIOS  
       2023-08-13 19:38:29 +08:00
    老外喜欢用复数, 单用单用复都没啥区别。。
    msg7086
        8
    msg7086  
       2023-08-13 19:39:47 +08:00   1
    一般的规则是不要混用单复数,要么全用单数,要么全用复数。确定下来用哪种以后,就一直用这种,不要换。
    jaynsw
        9
    jaynsw  
       2023-08-13 19:50:12 +08:00 via Android   4
    ,因表的是型。例如“用”
    kongkx
        10
    kongkx  
       2023-08-13 19:54:33 +08:00 via iPhone
    项目内统一规范就好,php laravel 是 the "snake case", plural name 。js prisma 默认直接用 model name
    kkwa56188
        11
    kkwa56188  
       2023-08-13 20:15:21 +08:00   5
    在 RESTful API 里, 资源用复数 例如 items/item_id. 这样一看到 名词复数 就知道是一个资源的集合

    在关系数据库里, 表名 没有那么强烈的要求用复数, 因为不会出现 像上例 一长串 url 里 容易 混淆的情况.

    反而关系数据库里 讲求的 一眼看出 是 实体表还是关系表, 所以可以做以下 最佳实践:
    1. 实体表 用单数, 甚至可以加上 _tbl 表示是实体表, 例如 : ITEM 或者 ITEM_TBL
    2. 关系表 用上两(多)个实体名称, 甚至 可以加上 _rel 表示是关系, 例如: Order_Item, 或者 Order_Item_Rel
    Leon406
        12
    Leon406  
       2023-08-13 20:17:59 +08:00   2
    阿里规约是强制 单数, 个人认为也是单数
    lhbc
        13
    lhbc  
       2023-08-13 21:13:06 +08:00 via Android
    单数
    因为指的是种类不是数量

    User 指的是用户
    Users 指特定的多个用户
    cpstar
        14
    cpstar  
       2023-08-13 21:20:30 +08:00
    都有道理:
    User ,这个表存储的东西是用户
    Users ,这个表里存储了很多用户
    lingo
        15
    lingo  
       2023-08-13 21:23:17 +08:00   2
    我用单数是因为不是每个词我都知道正经的复数怎么拼
    反正公司项目随项目本身,自己的项目无所谓。
    veike
        16
    veike  
       2023-08-13 21:24:12 +08:00
    规范用什么就用什么!
    PHP Laravel 里的默认是复数。
    veike
        17
    veike  
       2023-08-13 21:25:02 +08:00
    @cpstar 数据表里存储的是多个用户的信息,所以使用复数。
    isbase
        18
    isbase  
       2023-08-13 21:28:58 +08:00
    单数,表名表示的是存储的内容是什么,不是有多少个
    Xusually
        19
    Xusually  
       2023-08-13 22:01:18 +08:00 via iPhone
    看约定规范吧,系统里都统一就行了。
    zjp
        20
    zjp  
       2023-08-13 22:03:43 +08:00
    不可能因为表名是单数就认为表里只有一条数据,所以复数没有提供什么多余的信息
    zm2020
        21
    zm2020  
       2023-08-13 22:06:55 +08:00
    根据之前用 Laravel 框架开发来看,里面默认的表名都是复数
    picone
        22
    picone  
       2023-08-13 22:55:49 +08:00   1
    这个只要有统一规范就好。切勿一个人用单数,一个人用复数,写起代码来还得查一下是单数还是复数
    akira
        23
    akira  
       2023-08-13 23:17:36 +08:00
    在一个项目里面 统一就行,具体看你喜欢
    IvanLi127
        24
    IvanLi127  
       2023-08-13 23:41:17 +08:00 via Android
    我用了几个语言的 ORM ,一般是复数。
    IvanLi127
        25
    IvanLi127  
       2023-08-13 23:44:53 +08:00 via Android
    表不是类,是记录行的集合。这样想就得是复数了。再怎么想表是 Array<Apple> 这样的存在吧。。。
    leonshaw
        26
    leonshaw  
       2023-08-14 00:21:56 +08:00
    单数,不然当要做一些代码生成时就只能一个一个表列出来,或者写一堆单复数转换的规则和例外。
    lingo
        27
    lingo  
       2023-08-14 00:37:31 +08:00
    @kkwa56188 还是你这个实在,区分实体表和关系表才是有用的。。单数复数讲真没提供一丝有用的信息(除非应用层有约定)。。统一就行了。
    FightPig
        28
    FightPig  
       2023-08-14 00:40:26 +08:00
    @jlmzzz rails 里全是复数啊
    msg7086
        29
    msg7086  
       2023-08-14 04:59:47 +08:00
    @leonshaw
    框架里早就有成熟的单复数转换了。
    Rails 从初版 1.0 起就有单复数转换,所以一直可以无压力使用复数表名。
    如果你用的框架没有单复数转换,那的确用单数表名会比较方便。

    @kkwa56188
    使用成熟的 ORM 以后一般不需要直接对接数据库,直接用 ORM 内置规则生成数据表就行了。
    比如你建一个 items 表,建一个 orders 表,然后只要 create_join_table :orders, :items 就能根据内置规则自动生成多对多关系表。关系表的名称会是 items_orders (每个关系表按照字母顺序排列,免得搞不清是 orders_items 还是 items_orders ),但这个表对程序员是不可见的,平时还是通过操作对象来获取关联数据。

    (当然,每个人/组/公司都有自己的最佳实践,自己用起来舒服就行,不需要跟着别人乱改。)
    kkwa56188
        30
    kkwa56188  
       2023-08-14 06:09:43 +08:00
    盲猜一下, 口口声声 ORM 的, 是不是 leetcode 的 SQL 题都刷不过中级? 开玩笑的. 狗头
    jlmzzz
        31
    jlmzzz  
       2023-08-14 06:28:41 +08:00
    @FightPig 看来单复数都可以并且都有不少再用,我最近 Django 用的多,教程什么的也单数居多。可能这个问题需要指定语言或框架才比较意义,否则就随开发者喜好单复数都可以。
    mytsing520
        32
    mytsing520  
    PRO
       2023-08-14 07:19:24 +08:00
    随我喜欢。
    不过,一旦确定,后面也遵循这个规则。
    itechify
        33
    itechify  
    PRO
       2023-08-14 07:30:38 +08:00 via Android
    能跑就行,单数复数都行,统一一种风格
    loading
        34
    loading  
       2023-08-14 08:23:52 +08:00
    你可以用全拼名,没有单复数,哈。
    uxstone
        35
    uxstone  
       2023-08-14 08:32:51 +08:00
    在实际业务中有些表名是直接用的汉语拼音,所以统一用单数。
    chenyu8674
        36
    chenyu8674  
       2023-08-14 08:38:44 +08:00
    单数
    有些复数的英文不是简单加 s 的,有时容易第一眼看不出来
    netnr
        37
    netnr  
       2023-08-14 08:49:34 +08:00 via Android
    我目前在用的一种规则
    sys_users
    sys_user_role
    docx
        38
    docx  
       2023-08-14 08:58:30 +08:00 via iPhone
    用原型,表示内容是什么
    ccppgo
        39
    ccppgo  
       2023-08-14 09:05:13 +08:00
    非母语就不跟风了, 跟楼上一样, 要是看不懂复数还得查一下啥意思, 老老实实单数代表类型
    varzy
        40
    varzy  
       2023-08-14 09:15:39 +08:00 via iPhone
    我习惯按照 laravel 规范,很优雅~
    tomatocici2333
        41
    tomatocici2333  
       2023-08-14 09:17:09 +08:00
    @Leon406 这思维导图可以分享一下吗 老哥
    wupher
        42
    wupher  
       2023-08-14 09:18:33 +08:00
    看团队使用的规范,如果是你自己的独立项目,可随意。

    Rails 系一般使用复数
    dddd1919
        43
    dddd1919  
       2023-08-14 09:19:12 +08:00
    如果使用的技术栈支持复数那当然是复数,遵照 restful 风格,比如 rails ,框架本身有单复数转换规则,不容易拼错
    如果不支持,单数还是更方便一点
    henryhu
        44
    henryhu  
       2023-08-14 09:29:54 +08:00
    复数
    Govda
        45
    Govda  
       2023-08-14 09:40:08 +08:00
    当然是复数,user = users::find(1); 用户(多个)里面找 ID 是 1 的
    英文有复数 那默认 user 是 object ,users 是 iterable
    这是中英文的区别,如果用中文就没有单复数区别了,用户就是用户,总不能表明叫“用户们”吧
    nothingistrue
        46
    nothingistrue  
       2023-08-14 09:47:43 +08:00
    先有表( Table ),后又记录( Rows ),那表名就是专有名词,须单数。
    如果没有表,直接就是数据集合(典型的就是 Excel 数据),那表名就只是一个标记,应视数据集合本身的单复数性质来决定其单复数,通常是复数。
    Felldeadbird
        47
    Felldeadbird  
       2023-08-14 09:47:51 +08:00
    我建议是单数,你作为新人入职公司,业务是读取用户表。这时候你写代码首先想到的是 users 还是 user ?

    总的来说还是要看公司规定。
    qiumaoyuan
        48
    qiumaoyuan  
       2023-08-14 09:48:28 +08:00
    哈哈哈哈哈
    echoZero
        49
    echoZero  
       2023-08-14 09:49:44 +08:00
    go ent 默认的是复数,单数要指定
    xz410236056
        50
    xz410236056  
       2023-08-14 10:09:32 +08:00
    都 2023 年了,还在纠结回字的写法
    Huelse
        51
    Huelse  
       2023-08-14 10:23:30 +08:00
    不可数的用单数,可数的用复数。
    表里有多少数据你是不知道的,但你取出来的时候是 limit 的。
    puras
        52
    puras  
       2023-08-14 10:29:54 +08:00
    用单数,还加了前缀。。。
    kneo
        53
    kneo  
       2023-08-14 12:18:03 +08:00 via Android
    随便,统一就行。一般来说使用单数会简单点。
    Daniel17
        54
    Daniel17  
       2023-08-14 12:25:44 +08:00
    看你们规范,又不影响性能
    largezhou
        55
    largezhou  
       2023-08-14 12:45:14 +08:00
    之前用 laravel ,按约定是用复数,后面觉得英文复数又不能简单的加 s ,还不如单数清晰
    hjq632233317
        56
    hjq632233317  
       2023-08-14 13:41:23 +08:00
    单数 那用复数岂不是每个表就叫 xxxs ,很烦复数的 s 结尾,包括字段,有时候打代码都忘了自己设置的是负数还是单数了 还得再看一遍表 或者就是忘了自己设置的是复数 然后报错 很烦
    coolair
        57
    coolair  
       2023-08-14 13:49:36 +08:00
    国外的项目都是复数,国内的项目乱七八糟,怎么用的都有,自己看着办。
    manasheep
        58
    manasheep  
       2023-08-14 13:53:59 +08:00   1
    我觉得复数本来就是英语的糟粕,就跟汉语无意义的量词一样,做开发没必要还照搬这个。
    8355
        59
    8355  
       2023-08-14 13:58:11 +08:00
    个人理解表名应该是名词 不是复数
    只有查多条数据的时候变量才用复数
    manasheep
        60
    manasheep  
       2023-08-14 14:13:23 +08:00
    日程表/日程安排表 - Schedule/Planner
    任务清单 - To-do List
    会议议程表 - Meeting Agenda
    会议记录表 - Meeting Minutes
    项目计划表 - Project Plan
    项目进度表 - Project Timeline/Progress Report
    预算表 - Budget Sheet
    费用报销表 - Expense Report
    销售报表 - Sales Report
    客户信息表 - Customer Information Sheet
    员工信息表 - Employee Information Sheet
    考勤记录表 - Attendance Sheet
    学习计划表 - Study Plan
    笔记表格 - Note-taking Template
    目标设定表 - Goal Setting Worksheet
    问题追踪表 - Issue Tracking Sheet
    数据收集表 - Data Collection Form
    调查问卷 - Survey Questionnaire
    评估表 - Evaluation Form
    学习反馈表 - Feedback Form

    看看这里有多少表格名称用的是复数形式?

    而且编程是实用为先,复数尽可能不用,即使在处理多个实例时,也不一定要用复数表示变量和参数,因为这有可能给搜索造成障碍。
    FightPig
        61
    FightPig  
       2023-08-14 14:33:11 +08:00
    @jlmzzz 这倒是,我主要一直用 rails 了,所以一直按 rails 的习惯,不管用啥写,表名全是复数的。只要团队遵循规则就行了,随便怎么搞。还接过好多项目二开,里面表直接拼音缩写的
    AV1
        62
    AV1  
       2023-08-14 14:42:15 +08:00
    我是避免用复数形式。如果是表示多个项目的集合,用 xxList 、xxArr 这样的后缀。
    因为复数形式还得考虑英语的不规则变化,比如
    activity vs activities
    foot vs feet
    ,不够统一。
    libook
        63
    libook  
       2023-08-14 14:51:04 +08:00
    英语的复数是一种不可靠的变形规则,遇到特殊变形和单复同形的,就会很麻烦。

    可以采用单数形式,或者单数+List/Collection/Array 等后缀,具体采取哪种方案需要团队定个统一标准。
    kernelpanic
        64
    kernelpanic  
       2023-08-14 14:56:53 +08:00
    单数
    model 一般跟表名对应, 如果 t_items, 变成了 Items, 那么 new Items() 是啥玩意? addItems 呢?
    bzj
        65
    bzj  
       2023-08-14 15:04:14 +08:00
    用拼音怎么说
    fengpan567
        66
    fengpan567  
       2023-08-14 15:06:36 +08:00
    随便
    maxssy
        67
    maxssy  
       2023-08-14 17:26:34 +08:00
    /div>
    国人喜欢用单数, 外国人喜欢用复数
    我站国人
    实际上我觉得复数这个语法都 TM 是扯淡
    Leon406
        68
    Leon406  
       2023-08-14 18:41:29 +08:00
    @tomatocici2333 #41 自己看完阿里规约 ,总结才会印象深刻
    个人笔记 并不适合所有人, 周末花个一天就能有自己的思维导图
    superchijinpeng
        69
    superchijinpeng  
       2023-08-14 18:43:32 +08:00
    单数
    superchijinpeng
        70
    superchijinpeng  
       2023-08-14 18:43:53 +08:00
    可以看下 TPC-DS 或者 TPC-DS 里的
    cquan
        71
    cquan  
       2023-08-14 23:37:18 +08:00
    小写加下划线就好
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     837 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 20:46 PVG 04:46 LAX 13:46 JFK 16:46
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86