Sql命名最佳实践

Kdg*_*Dev 8 sql

我不完全确定行业中是否有标准或其他标准,所以我在这里问.

我正在命名一个Users表,我不完全确定如何命名成员.

user_id 是一个显而易见的,但我想知道我是否应该用"user_"前缀所有其他字段.

user_name user_age

或者只是姓名和年龄等......

doc*_*ryZ 9

这样的前缀毫无意义,除非你有一些更随意的东西; 像两个地址.然后你可以使用address_1,address_2,address_home等

与电话号码相同.

但对于像年龄,性别,用户名等一样静态的东西; 我会这样离开他们.

只是为了向您展示如果您要为所有这些字段添加前缀,那么您的查询可能如下所示

SELECT users.user_id FROM users WHERE users.user_name = "Jim"
Run Code Online (Sandbox Code Playgroud)

什么时候可以很容易

SELECT id FROM users WHERE username = "Jim"
Run Code Online (Sandbox Code Playgroud)

  • +1:对于大多数情况,扭曲.对于ID(如user_id),我们总是拼出全名,对于其他所有我们不添加表名的内容.使连接更容易阅读. (2认同)

Dan*_*llo 6

我同意其他建议不要在表名前加上属性.

但是,我支持为外键和它们引用的主键1使用匹配名称的想法,为此,您通常必须id在依赖表中为属性添加前缀.

一些不太为人所知的是SQL支持使用USING关键字的简洁连接语法:

CREATE TABLE users (user_id int, first_name varchar(50), last_name varchar(50));
CREATE TABLE sales (sale_id int, purchase_date datetime, user_id int);
Run Code Online (Sandbox Code Playgroud)

然后是以下查询:

SELECT s.*, u.last_name FROM sales s JOIN users u USING (user_id);
Run Code Online (Sandbox Code Playgroud)

相当于更详细和流行的连接语法:

SELECT s.*, u.last_name FROM sales s JOIN users u ON (u.user_id = s.user_id);
Run Code Online (Sandbox Code Playgroud)

1这并不总是可行的.一个典型的例子是user_id在一个字段users表, reported_byassigned_to在所述参考表中的字段均引用users表.user_id在这种情况下使用字段是模糊的,并且对于其中一个字段是不可能的.


zen*_*dar 5

正如其他答案所暗示的那样,这是个人偏好 - 选择特定的命名模式并坚持下去。
大约 10 年前,我使用 Oracle Designer,它使用了我从那时起就喜欢并使用的命名模式:

  • 表名是复数 - USERS
  • 代理主键被命名为表名加“_id”的单数形式 - 表 USERS 的主键将为“USER_ID”。这样,当您在其他表中使用“USER_ID”字段作为外键时,您可以拥有一致的命名
  • 列名没有表名作为前缀。

可选:

  • 在具有大量表的数据库中(根据您认为合适的方式解释“大”),使用 2-3 个字符的表前缀,以便您可以在逻辑上将表划分为区域。例如:所有包含销售数据(发票、发票项目、物品)的表都具有前缀“INV_”,所有包含人力资源数据的表都具有前缀“HR_”。这样,可以更轻松地查找和排序包含相关数据的表(这也可以通过将表放置在不同的方案中并设置适当的访问权限来完成,但是当您需要在一台服务器上创建多个数据库时,它会变得复杂)

再次强调,选择您喜欢的命名模式并保持一致。