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

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

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

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

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

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

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

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

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

    总的来说还是要看公司规定。
    qiumaoyuan
        48
    qiumaoyuan  
       257 天前
    哈哈哈哈哈
    echoZero
        49
    echoZero  
       257 天前
    go ent 默认的是复数,单数要指定
    xz410236056
        50
    xz410236056  
       257 天前
    都 2023 年了,还在纠结回字的写法
    Huelse
        51
    Huelse  
       257 天前
    不可数的用单数,可数的用复数。
    表里有多少数据你是不知道的,但你取出来的时候是 limit 的。
    puras
        52
    puras  
       257 天前
    用单数,还加了前缀。。。
    kneo
        53
    kneo  
       257 天前 via Android
    随便,统一就行。一般来说使用单数会简单点。
    Daniel17
        54
    Daniel17  
       257 天前
    看你们规范,又不影响性能
    largezhou
        55
    largezhou  
       257 天前
    之前用 laravel ,按约定是用复数,后面觉得英文复数又不能简单的加 s ,还不如单数清晰
    hjq632233317
        56
    hjq632233317  
       257 天前
    单数 那用复数岂不是每个表就叫 xxxs ,很烦复数的 s 结尾,包括字段,有时候打代码都忘了自己设置的是负数还是单数了 还得再看一遍表 或者就是忘了自己设置的是复数 然后报错 很烦
    coolair
        57
    coolair  
       257 天前
    国外的项目都是复数,国内的项目乱七八糟,怎么用的都有,自己看着办。
    manasheep
        58
    manasheep  
       257 天前   ❤️ 1
    我觉得复数本来就是英语的糟粕,就跟汉语无意义的量词一样,做开发没必要还照搬这个。
    8355
        59
    8355  
       257 天前
    个人理解表名应该是名词 不是复数
    只有查多条数据的时候变量才用复数
    manasheep
        60
    manasheep  
       257 天前
    日程表/日程安排表 - 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  
       257 天前
    @jlmzzz 这倒是,我主要一直用 rails 了,所以一直按 rails 的习惯,不管用啥写,表名全是复数的。只要团队遵循规则就行了,随便怎么搞。还接过好多项目二开,里面表直接拼音缩写的🐶
    DOLLOR
        62
    DOLLOR  
       257 天前
    我是避免用复数形式。如果是表示多个项目的集合,用 xxList 、xxArr 这样的后缀。
    因为复数形式还得考虑英语的不规则变化,比如
    activity vs activities
    foot vs feet
    ,不够统一。
    libook
        63
    libook  
       257 天前
    英语的复数是一种不可靠的变形规则,遇到特殊变形和单复同形的,就会很麻烦。

    可以采用单数形式,或者单数+List/Collection/Array 等后缀,具体采取哪种方案需要团队定个统一标准。
    kernelpanic
        64
    kernelpanic  
       257 天前
    单数
    model 一般跟表名对应, 如果 t_items, 变成了 Items, 那么 new Items() 是啥玩意? addItems 呢?
    bzj
        65
    bzj  
       257 天前
    用拼音怎么说
    fengpan567
        66
    fengpan567  
       257 天前
    随便
    maxssy
        67
    maxssy  
       257 天前
    国人喜欢用单数, 外国人喜欢用复数
    我站国人
    实际上我觉得复数这个语法都 TM 是扯淡
    Leon406
        68
    Leon406  
       257 天前
    @tomatocici2333 #41 自己看完阿里规约 ,总结才会印象深刻
    个人笔记 并不适合所有人, 周末花个一天就能有自己的思维导图
    superchijinpeng
        69
    superchijinpeng  
       257 天前
    单数
    superchijinpeng
        70
    superchijinpeng  
       257 天前
    可以看下 TPC-DS 或者 TPC-DS 里的
    cquan
        71
    cquan  
       257 天前
    小写加下划线就好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2521 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 16:00 · PVG 00:00 · LAX 09:00 · JFK 12:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.