如何设计一个干净的数据库
想阅读更多类似文章,请访问我的博客
保持名称简洁一致的 18 个最佳实践
无论你是哪种类型的开发者,我们偶尔都会遇到这样的 API:它返回的数据方式让我们无需花费太多时间去理解。
但要获得这种干净且一致的结果,需要时间、精力和经验。今天,我们将迈出设计干净数据库的第一步。
我们言简意赅,直奔主题。开始吧。
一些术语
Table: this is a collection of data
Primary Key: This is the unique identifier of a table
Attribute: means property of your data. For example, `name` is an attribute of a `user` .
Data Type: Data types represent the various types of your data. For example -string, int, timestamp, etc.
1. 单词之间应使用下划线分隔。
当属性名称包含多个单词时,请使用逗号分隔snake_case。为了保持一致性,请勿使用camelCase逗号或其他任何大小写形式。
坏的
wordcount or wordCount
好的
word_count
原因
- 提高可读性
- 名称可以变得更加独立于平台。
2. 数据类型不应使用名称
列名千万不要使用数据类型。这种情况多见于时间戳参数。请给列起一个有意义的名字。
坏的
timestamp or text
好的
created_at or description
原因
- 使用数据类型可能会给应用程序的另一端造成混乱。
- 给参数起一个合适的名字,能让人们对参数的用法有更清晰的理解。
3. 属性名称应使用小写字母
属性名称不要使用大写字母。
坏的
Description
好的
description
原因
- 这种做法避免了因大写 SQL 关键字而造成的混淆。
- 它可以提高打字速度
4. 写出完整的单词
不要为了节省空间或其他任何原因而缩短列名。尽量做到清晰明确。
坏的
mid_name
好的
middle_name
原因
- 这条规则提倡自文档化设计。
5. 但要使用常用缩写
规则 4 的一个例外情况是使用广泛使用的缩写。在这种情况下,选择较短的缩写。
好的
i18n
但如果你感到困惑,那就用全名吧。这是你为未来做的一项投资。
6. 避免在列名中使用数字
信不信由你,我已经见怪不怪了。专栏名称里千万别带数字。
坏的
address1 , address2
好的
primary_address, secondary_address
原因
- 这表明你那边的数据标准化处理非常糟糕。所以尽量避免这种情况。
7. 使用简短的表名
命名表时务必谨慎,因为过长的表名可能会在将来造成巨大的不良影响。
坏的
site_detail
好的
site
原因
- 简短的表名有助于创建关系列和链接表。
8. 注意保留字
每个数据库都有一些保留字。请了解这些保留字并避免使用。
坏的
user lock table etc
一些常用数据库的保留字列表
- Postgres https://www.postgresql.org/docs/9.3/sql-keywords-appendix.html
- MySQL https://dev.mysql.com/doc/refman/5.7/en/reserved-words.html
- Oracle https://docs.oracle.com/database/121/SQLRF/ap_keywd.htm#SQLRF022
9. 表格的单数名称
尽量使用单数形式的表名。这一点颇具争议,不同的人有不同的看法。但请坚持使用一个单数形式。
坏的
users and orders
好的
user and order
原因
- 这有助于保持主键和查找表的一致性。
- 复数形式的使用有时会很棘手。因此,使用单数形式的表名可以简化编程。
10. 链接表应按字母顺序排列
创建连接表时,按字母顺序连接两个表的名称。
坏的
book_author
好的
author_book
11. 单数列名
通常情况下,除非你违反了数据规范化规则,否则这是最佳实践。
坏的
books
好的
book
12. 主键名称
如果是单列,则应将其命名为id
CREATE TABLE order (
id bigint PRIMARY KEY,
order_date date NOT NULL
);
13. 外键名称
它应该是另一个表的名称和被引用的字段。例如,如果您要引用表person中的一个字段team_member,则可以这样做。
CREATE TABLE team_member (
person_id bigint NOT NULL REFERENCES person(id),
);
14. 列名切勿添加类型后缀。
在列名后添加数据类型后缀是没有意义的,请避免这样做。
坏的
name_tx
好的
name
15. 索引应同时包含表名和列名。
如果要创建索引,则应写上表名,后跟要引用的列名。
CREATE TABLE person (
id bigserial PRIMARY KEY,
first_name text NOT NULL,
last_name text NOT NULL,
);
CREATE INDEX person_ix_first_name_last_name ON person (first_name, last_name);
16. 日期类型列名称
在日期类型列名称后添加后缀_on或_date。
例如,如果您有一个用于存储更新日期的列,那么请执行以下操作:
好的
updated_on or updated_date
17. 日期时间类型列名称
如果你的列名包含时间,则在后面加上后缀_at或_time。
例如,如果您想存储订单时间,那么
坏的
ordered
好的
ordered_at or order_time
18. 布尔类型列名称
如果列名是布尔类型,则在列名前加上布尔is_或布尔前缀has_。
好的
is_admin or has_membership
结语
如果你已经在进行一个项目,那就坚持遵循该项目已经遵循的惯例。因为
比糟糕的漫展更糟糕的,就是举办多场糟糕的漫展。
但是,如果您正在从头开始学习或设计数据库,那么牢记这些规则将对您大有裨益。
您有什么想法?有没有您不同意的规则?我非常乐意在评论区进行一些有益的讨论!
祝你今天过得愉快! :D
请通过我的LinkedIn联系我。
在我的网站上阅读更多文章
参考资料:
https://launchbylunch.com/posts/2014/Feb/16/sql-naming-conventions/
https://justinsomnia.org/2003/04/essential-database-naming-conventions-and-style/