V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Ayanokouji
V2EX  ›  程序员

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

  •  
  •   Ayanokouji · 2023-08-13 19:28:11 +08:00 · 6881 次点击
    这是一个创建于 449 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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
    无关紧要的事情, 有时候用单数, 有时候用复数, 看心情.
    totoro52
        7
    totoro52  
       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  
       2023-08-14 07:19:24 +08:00
    随我喜欢。
    不过,一旦确定,后面也遵循这个规则。
    oneisall8955
        33
    oneisall8955  
       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 的习惯,不管用啥写,表名全是复数的。只要团队遵循规则就行了,随便怎么搞。还接过好多项目二开,里面表直接拼音缩写的🐶
    DOLLOR
        62
    DOLLOR  
       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
    国人喜欢用单数, 外国人喜欢用复数
    我站国人
    实际上我觉得复数这个语法都 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   ·   实用小工具   ·   1123 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:39 · PVG 02:39 · LAX 10:39 · JFK 13:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.