发布于 2026-01-06 0 阅读
0

如何设计一个干净的数据库

如何设计一个干净的数据库

想阅读更多类似文章,请访问我的博客

保持名称简洁一致的 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.
Enter fullscreen mode Exit fullscreen mode

1. 单词之间应使用下划线分隔。

当属性名称包含多个单词时,请使用逗号分隔snake_case。为了保持一致性,请勿使用camelCase逗号或其他任何大小写形式。

坏的

wordcount or wordCount
Enter fullscreen mode Exit fullscreen mode

好的

word_count
Enter fullscreen mode Exit fullscreen mode

原因

  • 提高可读性
  • 名称可以变得更加独立于平台。

2. 数据类型不应使用名称

列名千万不要使用数据类型。这种情况多见于时间戳参数。请给列起一个有意义的名字。

坏的

timestamp or text
Enter fullscreen mode Exit fullscreen mode

好的

created_at or description
Enter fullscreen mode Exit fullscreen mode

原因

  • 使用数据类型可能会给应用程序的另一端造成混乱。
  • 给参数起一个合适的名字,能让人们对参数的用法有更清晰的理解。

3. 属性名称应使用小写字母

属性名称不要使用大写字母。

坏的

Description
Enter fullscreen mode Exit fullscreen mode

好的

description
Enter fullscreen mode Exit fullscreen mode

原因

  • 这种做法避免了因大写 SQL 关键字而造成的混淆。
  • 它可以提高打字速度

4. 写出完整的单词

不要为了节省空间或其他任何原因而缩短列名。尽量做到清晰明确。

坏的

mid_name
Enter fullscreen mode Exit fullscreen mode

好的

middle_name
Enter fullscreen mode Exit fullscreen mode

原因

  • 这条规则提倡自文档化设计。

5. 但要使用常用缩写

规则 4 的一个例外情况是使用广泛使用的缩写。在这种情况下,选择较短的缩写。

好的

i18n
Enter fullscreen mode Exit fullscreen mode

但如果你感到困惑,那就用全名吧。这是你为未来做的一项投资。

6. 避免在列名中使用数字

信不信由你,我已经见怪不怪了。专栏名称里千万别带数字。

坏的

address1 , address2
Enter fullscreen mode Exit fullscreen mode

好的

primary_address, secondary_address
Enter fullscreen mode Exit fullscreen mode

原因

  • 这表明你那边的数据标准化处理非常糟糕。所以尽量避免这种情况。

7. 使用简短的表名

命名表时务必谨慎,因为过长的表名可能会在将来造成巨大的不良影响。

坏的

site_detail
Enter fullscreen mode Exit fullscreen mode

好的

site
Enter fullscreen mode Exit fullscreen mode

原因

  • 简短的表名有助于创建关系列和链接表。

8. 注意保留字

每个数据库都有一些保留字。请了解这些保留字并避免使用。

坏的

user lock table etc
Enter fullscreen mode Exit fullscreen mode

一些常用数据库的保留字列表

9. 表格的单数名称

尽量使用单数形式的表名。这一点颇具争议,不同的人有不同的看法。但请坚持使用一个单数形式。

坏的

users and orders
Enter fullscreen mode Exit fullscreen mode

好的

user and order
Enter fullscreen mode Exit fullscreen mode

原因

  • 这有助于保持主键和查找表的一致性。
  • 复数形式的使用有时会很棘手。因此,使用单数形式的表名可以简化编程。

10. 链接表应按字母顺序排列

创建连接表时,按字母顺序连接两个表的名称。

坏的

book_author
Enter fullscreen mode Exit fullscreen mode

好的

author_book
Enter fullscreen mode Exit fullscreen mode

11. 单数列名

通常情况下,除非你违反了数据规范化规则,否则这是最佳实践。

坏的

books
Enter fullscreen mode Exit fullscreen mode

好的

book
Enter fullscreen mode Exit fullscreen mode

12. 主键名称

如果是单列,则应将其命名为id

CREATE TABLE order (
  id            bigint PRIMARY KEY,
  order_date    date NOT NULL
);
Enter fullscreen mode Exit fullscreen mode

13. 外键名称

它应该是另一个表的名称和被引用的字段。例如,如果您要引用表person中的一个字段team_member,则可以这样做。

CREATE TABLE team_member (
  person_id     bigint NOT NULL REFERENCES person(id),
);
Enter fullscreen mode Exit fullscreen mode

14. 列名切勿添加类型后缀。

在列名后添加数据类型后缀是没有意义的,请避免这样做。

坏的

name_tx
Enter fullscreen mode Exit fullscreen mode

好的

name
Enter fullscreen mode Exit fullscreen mode

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);
Enter fullscreen mode Exit fullscreen mode

16. 日期类型列名称

在日期类型列名称后添加后缀_on_date

例如,如果您有一个用于存储更新日期的列,那么请执行以下操作:

好的

updated_on or updated_date
Enter fullscreen mode Exit fullscreen mode

17. 日期时间类型列名称

如果你的列名包含时间,则在后面加上后缀_at_time

例如,如果您想存储订单时间,那么

坏的

ordered
Enter fullscreen mode Exit fullscreen mode

好的

ordered_at or order_time
Enter fullscreen mode Exit fullscreen mode

18. 布尔类型列名称

如果列名是布尔类型,则在列名前加上布尔is_或布尔前缀has_

好的

is_admin or has_membership
Enter fullscreen mode Exit fullscreen mode

结语

如果你已经在进行一个项目,那就坚持遵循该项目已经遵循的惯例。因为

比糟糕的漫展更糟糕的,就是举办多场糟糕的漫展。

但是,如果您正在从头开始学习或设计数据库,那么牢记这些规则将对您大有裨益。

您有什么想法?有没有您不同意的规则?我非常乐意在评论区进行一些有益的讨论!

祝你今天过得愉快! :D

请通过我的LinkedIn联系我。

在我的网站上阅读更多文章

参考资料:
https://launchbylunch.com/posts/2014/Feb/16/sql-naming-conventions/
https://justinsomnia.org/2003/04/essential-database-naming-conventions-and-style/

文章来源:https://dev.to/mohammadfaisal/how-to-design-a-clean-database-1e83