zhulink logo
自动夜间模式 日间模式 夜间模式
侧栏
0

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

意外富翁的头像
|
|
|

在数据库设计这个圈子里,有个老生常谈的问题:给表命名的时候,是该用单数形式,还是复数形式呢?比如,一个存储用户信息的表,我们是叫它 `user` 还是 `users` 呢? ### 为啥有人喜欢用复数? 支持用复数的名字,理由其实挺直接的: 1. **表里装的是不止一个用户嘛。** 2. **写 SQL 查询的时候,读起来顺:** ```sql SELECT id, name FROM users; ``` 这看起来确实挺自然的,对吧? ### 单数派 不过,坚持用单数名字的朋友们,他们的理由就稍微有点“技术含量”了: 1. **从严格意义上说,我们命名的不是“表”,而是“关系”。** 我们是在描述用户ID、姓名、地址等等之间的关系。关于用户数据,其实只有一个“用户关系”。一旦我们定义了这个 `user` 关系,就可以用它来处理很多用户的数据了。 2. **在 SQL 查询的其他地方,单数读起来更舒服:** ```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` 的类,用来存储用户的各种杂项信息(年龄、喜欢的颜色等等)。那这个数据库表该叫什么呢? ### 哪个更好? 我觉得第四个理由是最有说服力的。因为只要出现一个例外,整个数据库的命名一致性就可能被打破。而用单数命名,无论现在还是将来,都不会给你带来麻烦。 所以,下次给数据库表命名的时候,不妨考虑一下用单数形式,让你的设计更简洁、更一致! 你觉得呢?在你的项目里,表名是怎么命名的?有没有遇到过什么有趣的命名故事,欢迎在评论区分享你的看法!

  

🫵 来啊,说点有用的废话!