我不确定是否有行业标准,所以在这里询问。
我正在命名一个用户表格,我不确定该如何命名成员。
user_id
是显而易见的,但我想知道是否应该给所有其他字段加上"user_"前缀。
user_name user_age
还是只用名称和年龄等...
我不确定是否有行业标准,所以在这里询问。
我正在命名一个用户表格,我不确定该如何命名成员。
user_id
是显而易见的,但我想知道是否应该给所有其他字段加上"user_"前缀。
user_name user_age
还是只用名称和年龄等...
这样的前缀是毫无意义的,除非你有更加随意的需求;比如两个地址。那么你可能会使用address_1、address_2、address_home等。
电话号码也是同样的道理。
但对于像年龄、性别、用户名等这类静态内容,我建议保留原样。
只是为了给你展示一下,如果你确实需要为所有字段都添加前缀,你的查询可能会变成这样:
SELECT users.user_id FROM users WHERE users.user_name = "Jim"
当它很容易时
SELECT id FROM users WHERE username = "Jim"
我同意其他答案中建议不要在属性前缀表名的做法。
然而,我支持使用匹配的名称来表示外键和它们所引用的主键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);
接下来是以下查询语句:
SELECT s.*, u.last_name FROM sales s JOIN users u USING (user_id);
等价于更冗长且常用的连接语法:
SELECT s.*, u.last_name FROM sales s JOIN users u ON (u.user_id = s.user_id);
1这并非总是可行的。一个典型的例子是在users
表中的user_id
字段,以及在引用表中引用users
表的reported_by
和assigned_to
字段。在这种情况下使用user_id
字段既不明确,也无法应用于其中一个字段。
可选:
再次强调,选择您喜欢的命名方案并保持一致。
仅需要姓名和年龄,当您想知道正在使用的名称类型时,表格应提供必要的上下文。
对于表名,我通常使用复数名词(或名词短语),和你一样。 |
对于列名,我不会使用表名作为前缀。表本身就说明了列的上下文。 |
首先,我建议使用单数名词,即用户而不是用户们,尽管这更多是个人偏好。
其次,有些人喜欢始终将主键列命名为id,而不是user_id(即表名+id),例如将姓名命名为employee_name。我认为这是一个不好的想法,原因如下:
-- when every table has an "id" (or "name") column, you get duplicate column names in the output:
select e.id, e.name, d.id, d.name
from employee e, department d
where e.department_id = d.id
-- to avoid this, you need to specify column aliases every time you query:
select e.id employee_id, e.name employee_name, d.id department_id, d.name department_name
from employee e, department d
where e.department_id = d.id
-- if the column name includes the table, there are no conflicts, and the join condition is very clear
select e.employee_id, e.employee_name, d.department_id, d.department_name
from employee e, department d
where e.department_id = d.department_id
我并不是说你应该在表中的每一列都包含表名,但是对于关键字(id)列和其他“通用”列,例如名称、描述、备注等,在查询中可能会被包含,建议加上表名。
这是个人偏好。我们能给你的最佳建议是保持一致性、易读性,并确保关系名称正确。
使用有意义的名称,如果可能的话不要使用缩写,除非你使用的存储机制无法很好地处理它们。
在关系中,我喜欢在主键上使用Id,在外键上使用[table_name]_Id。例如,Order.Id和OrderItem.Order_Id。
如果使用代理键作为主键,这种方式效果不错。
你的存储机制可能对大小写敏感,所以请考虑这一点。
编辑:另外,有一些理论认为表应该以单个记录在该表中所代表的内容命名。因此,表名应为"User"而不是"Users" - 就个人而言,复数形式更有意义,只需保持一致即可。
用户表(复数):
简单明了。
id
或user_id
是需要讨论的主题。因为如果您有很多连接查询,并且每个表都有ID
列,您很容易会感到困惑。 - abatishchev我认为表名和列名应该是这样的。
表名:
User --> 每个单词首字母大写,不要用复数形式。
列名:
Id --> 如果我看到 "Id",我就知道这是主键列。
GroupId --> 我理解有一个名为 Group 的表,这个列是与 Group 表相关的列。
Name --> 如果在 User 表中有一个名为 "Name" 的列,这意味着用户的姓名。这已经足够清楚了。
特别是如果您正在使用 Entity Framework,我认为这更重要。
注意:对于我的糟糕英语,我很抱歉。如果有人能纠正我的糟糕英语,我会很高兴。