6小时前
|
|
|
在数据库设计这个圈子里,有个老生常谈的问题:给表命名的时候,是该用单数形式,还是复数形式呢?比如,一个存储用户信息的表,我们是叫它 `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` 的类,用来存储用户的各种杂项信息(年龄、喜欢的颜色等等)。那这个数据库表该叫什么呢?
### 哪个更好?
我觉得第四个理由是最有说服力的。因为只要出现一个例外,整个数据库的命名一致性就可能被打破。而用单数命名,无论现在还是将来,都不会给你带来麻烦。
所以,下次给数据库表命名的时候,不妨考虑一下用单数形式,让你的设计更简洁、更一致!
你觉得呢?在你的项目里,表名是怎么命名的?有没有遇到过什么有趣的命名故事,欢迎在评论区分享你的看法!
🫵 来啊,说点有用的废话!
▲