数据库表名,到底该用单数还是复数?

https://www.teamten.com/lawrence/programming/use-singular-nouns-for-database-table-names.html
意外富翁 · 5个月前 · News · 42 · 0

在数据库设计这个圈子里,有个老生常谈的问题:给表命名的时候,是该用单数形式,还是复数形式呢?比如,一个存储用户信息的表,我们是叫它 user 还是 users 呢?

为啥有人喜欢用复数?

支持用复数的名字,理由其实挺直接的:

  1. 表里装的是不止一个用户嘛。

  2. 写 SQL 查询的时候,读起来顺:

    SELECT id, name
    FROM users;
    

    这看起来确实挺自然的,对吧?

单数派

不过,坚持用单数名字的朋友们,他们的理由就稍微有点“技术含量”了:

  1. 从严格意义上说,我们命名的不是“表”,而是“关系”。 我们是在描述用户ID、姓名、地址等等之间的关系。关于用户数据,其实只有一个“用户关系”。一旦我们定义了这个 user 关系,就可以用它来处理很多用户的数据了。

  2. 在 SQL 查询的其他地方,单数读起来更舒服:

    SELECT id, name
    FROM user
    JOIN country ON user.country_id = country.id
    WHERE country.name = 'Canada';
    

    如果这里写成 users.country_id,是不是感觉有点怪怪的?

  3. 你程序里存储数据的类名,通常是单数(比如 User)。 如果表名是复数,就会产生不匹配。在很多 ORM(比如 Rails)里,它们会自动帮你把表名变成复数,结果就是你可能会看到像 addresss 这种有点奇怪的表名。

  4. 有些关系本身就是复数。 比如,你有一个叫 UserFacts 的类,用来存储用户的各种杂项信息(年龄、喜欢的颜色等等)。那这个数据库表该叫什么呢?

哪个更好?

我觉得第四个理由是最有说服力的。因为只要出现一个例外,整个数据库的命名一致性就可能被打破。而用单数命名,无论现在还是将来,都不会给你带来麻烦。

所以,下次给数据库表命名的时候,不妨考虑一下用单数形式,让你的设计更简洁、更一致!

你觉得呢?在你的项目里,表名是怎么命名的?有没有遇到过什么有趣的命名故事,欢迎在评论区分享你的看法!

已复制到剪贴板

评论 0 条

暂无评论,来种下第一颗种子。