问题
SQL表名,应该用表对应资源对象的复数形式还是单数形式。例如一个用户表,表名是用user还是users更合适呢?
 

精华回答
 
用单数形式更佳,理由如下:
 
1、概念直观。
你有一个袋子,里面有好多个苹果,你会说这是个苹果袋。但无论里面有0,1,百万个苹果,它依然是个袋子。表也是如此,表明需要描述清楚,表里面包含的对象,而非有多少个数据。
 
2、便利性
单数形式更简单。有一些单词,它的复数形式可能是非常规的,或者就没有复数形式,但是单数不一样,单数形式则没那么多讲究。有些单词的复数,可能会想到你头大,可能得好好google才出来
 
3、优雅
特别是一些master-detail形式的资源名称,统一用单数,读起来更方便,对齐更整齐,从顺序上更有逻辑性。
对比下
单数:
  • Order
  • OrderDetail
复数:
  • OrderDetails
  • Orders
 
4、简单朴素
设想下,不管是表名,主键,关系,实例Classes,你都可以统一用单数,所有看上去那么统一,也不用费心地各种复数单数中转换你的思维
  • Customer
  • Customer.CustomerID
  • CustomerAddress
  • public Class Customer {...}
  • SELECT FROM Customer WHERE CustomerID = 100
一旦你确定,要处理的这个对象,名字定为Customer,那么所有和数据库相关的交互、编程就都将使用这个单词
 
5、全球化
假设你身处一个全球化的团队,成员中有些人,母语不是英文,对他们来说,辨认、书写一个单词的复数形式,要更困难,会给他们带来麻烦,也给团队合作带来麻烦。
 
6、为什么不
这可以节省你的拼写时间,硬盘空间,甚至让你的键盘更“长寿”
  • SELECT Customer.CustomerName FROM Customer WHERE Customer.CustomerID = 100
  • SELECT Customers.CustomerName FROM Customers WHERE Customers.CustomerID = 100
看这两条语句,你可以省下3个字母,3个字节,3次键盘敲击
 
最后,我还认为,你应该给一些容易冲突的名字加个前缀,例如User,要把对应的前缀加上,也就是
User > LoginUser, AppUser, SystemUser, CMSUser,...
 
stackoverflow链接:
http://stackoverflow.com/questions/338156/table-naming-dilemma-singular-vs-plural-names
 
 
专栏介绍:

非常喜欢stackoverflow,总能在上面找到疑难杂症的解决办法。偶然发现该网站有一个热度榜单。于是精选了热度较高的一些问题,然后按照自己的理解,把大家的讨论梳理出来。因此,这些文章不是真正的翻译,而是按照自己的理解做了一些增删、润色,希望能把上面的讨论,更精简有效地分享给大家。
如需转载,请注明原文地址
 

SQL表名,应该用表对应资源对象的复数形式还是单数形式的更多相关文章

  1. 【Golang】基于beego/orm实现相同表结构不同表名的分表方法实现

    一.背景 在业务场景开发的过程中, 随着数据量的增加,相同表结构不同表名的分表策略是常用的方案选择之一.如下以golang做为后端业务开发,尝试修改beego的orm库做一个相同表结构不同表名的分表实 ...

  2. Oracle 查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名、

    查询所有表名:select t.table_name from user_tables t;查询所有字段名:select t.column_name from user_col_comments t; ...

  3. sqlite查看所有表名、判断表是否存在,字段名及字段信息

    sqlite查看所有表名.判断表是否存在,字段名及字段信息   sqlite查看所有表名及字段名查询table,type 段是'table',name段是table的名字, select name f ...

  4. mysql--创建表,插入数据,修改表名,删除表,简单查询/内连接、左/右连接

    创建表mm:  其中id为主键且自增长 ) primary key not null unique auto_increment, name ) not null, age ), class ) no ...

  5. Oracle,Mysql 获取用户下所有表名,获取表所有的列名及数据类型

    Mysql 下面是mysql获取数据库所有表的语句 select table_name from information_schema.TABLES where TABLE_SCHEMA='Usern ...

  6. SQl查询数据库库名,表名、表的列名

    查询数据库 select * From master.dbo.sysdatabases where name='数据库名' and status<>512   --读取库中的所有表名 (当 ...

  7. Sql Server根据表名生成查询的存储过程(查询条件可选)

    static void Main(string[] args) { string 表名 = "water_emstime"; string sql = "exec Get ...

  8. SQL SERVER查询数据库所有的表名/字段

    SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='subject' --表名 1.利用sysobjects系统表 在这个表中,在数据 ...

  9. Oracle:SQL语句--对表的操作——修改表名

    – 修改表名(未验证在有数据,并且互有主外键时,是否可用) 语法: rename 现表名 to 新表名; 例: rename T_Student2 to T_Stu;

随机推荐

  1. Redis 要学的

    https://www.cnblogs.com/kismetv/p/8654978.html#t21 各个类型底层原理 慢查询 pipeline BitMaps 发布订阅 主从复制 psync psy ...

  2. javascript 循环读取数组中的值

    //数组 var a = ["#F85C6F", "#78B0F0", "#DB83ED", "#8EC656", &q ...

  3. flume--exec源

    创建a2.conf文件并且编写 Sources 类型是exec 配置文件如下 启动集群 启动flume 产生临时文件 ...tmp 关闭临时文件 再次写入文本,会再次产生一个临时文件.截图左边是一个内 ...

  4. jdk8-》日期时间及其格式处理类特性

    一.JDK8之时间⽇期处理类 核⼼类: LocalDate:不包含具体时间的⽇期. LocalTime:不含⽇期的时间. LocalDateTime:包含了⽇期及时间. LocalDate 常⽤API ...

  5. Python(三):环境及其配置

    一,PYTHONPATH 默认的Python模块搜索路径,可以将路径指向anaconda3,需要开发者自己设置 二,PYTHONHASHSEED 如果该环境变量被设定为 random ,相当于 -R ...

  6. AcWing 802. 区间和 离散化

    https://www.acwing.com/problem/content/804/ #include <iostream> #include <vector> #inclu ...

  7. 小议WebRTC拥塞控制算法:GCC介绍

    网络拥塞是基于IP协议的数据报交换网络中常见的一种网络传输问题,它对网络传输的质量有严重的影响,网络拥塞是导致网络吞吐降低,网络丢包等的主要原因之一,这些问题使得上层应用无法有效的利用网络带宽获得高质 ...

  8. Hive文件与记录格式

    1. Hive文件与记录格式 Create table 有多种用法,例如STORED AS SEQUENCEFILE, ROW FORMAT DELIMITED, SERDE, INPUTFORMAT ...

  9. 每天进步一点点------Allegro 怎样把铺铜显示关掉,但是走线要显示?

    [背景] 铺铜是PCB布线的末尾环节,在PCB设计后期审查中,我们会检查走线的规则,但是铺铜后,不容易看见走线的效果,这时我们需要关闭铺铜显示,但是走线任然要显示. [解决方法] 执行Setup-&g ...

  10. php抛出异常Exception和\Exception使用区别

    没有定义命名空间的情况下 , Exception和\Exception 均可正常执行抛出异常;定义命名空间的情况 , Exception 会在定义的命名空间下找对应的异常类 , 如果没有定义异常类 , ...