一位朋友告诉我,我应该将表名包含在同一个表的字段名中,我想知道为什么?它应该是这样吗? 示例:
(Table) Users
(Fields) user_id, username, password, last_login_time
我看到前缀'user_'没有意义,因为我知道它已经是一个用户。但我也想听听你的意见。 注意:我正在编写php,mysql。
答案 0 :(得分:13)
我同意你的看法。我唯一想把表名或缩写形式放在主键和外键上或者“自然”名称是关键字的地方。
Users: id or user_id, username, password, last_login_time
Post: id or post_id, user_id, post_date, content
我通常使用'id'作为主键字段名称,但在这种情况下我认为user_id和post_id也完全正常。请注意,发布日期称为“post_date”,因为“date”是关键字。
至少那是我的惯例。您的里程可能会有所不同。
答案 1 :(得分:10)
我认为没有理由包含表名,这是多余的。在查询中,您可以将字段称为< table name>。< field name>无论如何(例如“user.id”)。
答案 2 :(得分:4)
使用'id'和'name'等通用字段,最好将表名放入。
原因是在跨多个表编写连接时可能会造成混淆。
这是个人偏好,真的,但这背后的原因(我总是这样做)。
无论选择哪种方法,都要确保它在项目中保持一致。
答案 3 :(得分:3)
我个人不会在主表中为字段名添加表名,但是当在另一个表中使用它作为外来字段时,我会在其前面加上源表的名称。例如users表上的id字段将被称为id,但在评论表中,评论链接到发布它们的用户,它将是user_id。
这是我从CakePHP的命名方案中获得的,我觉得它非常整洁。
答案 4 :(得分:2)
使用表名前缀列名是一种保证唯一列名的方法,这使得连接更容易。
但这是一种令人厌倦的做法,特别是当我们有长桌名时。在适当的时候使用别名通常更容易。此外,当我们自我加入时,它没有帮助。
作为一名数据建模师,我发现很难始终保持一致。使用ID列我理论上更喜欢只有ID
,但我通常会发现我的表格中包含USER_ID
,ORDER_ID
等列。
在某些情况下,在多个表中使用公共列名称会非常有益。例如,当逻辑超类型/子类型关系被渲染为子表时,在所有子类型表(例如ITEM_STATUS
)上保留超类型列而不是重命名是有用的。它适用于每个子类型(ORDER_ITEM_STATUS
,INVOICE_ITEM_STATUS
等)。当它们是具有一组共同值的枚举时尤其如此。
答案 5 :(得分:1)
例如,您的数据库具有存储有关销售和人力资源部门的信息的表,您可以命名与销售部门相关的所有表,如下所示:
SL_NewLeads SL_Territories SL_TerritoriesManagers
您可以命名与人力资源部门相关的所有表格,如下所示:
HR_Candidates HR_PremierInstitutes HR_InterviewSchedules
这种命名约定确保,当您按字母顺序列出所有表时,所有相关表都会组合在一起。但是,如果数据库只处理一个逻辑表组,则无需使用此命名约定。
请注意,有时您最终会将表垂直分区为两个或更多表,尽管这些分区实际上代表了同一个实体。在这种情况下,将最能标识分区的单词附加到实体名称
答案 6 :(得分:1)
实际上,这种命名是有原因的,特别是涉及领域时,你可能会加入。至少在MySQL中,您可以使用USING
关键字而不是ON
,然后users u JOIN posts p ON p.user_id = u.id
变为users u JOIN posts p USING(user_id)
,这是更清洁的IMO。
关于其他类型的字段,您可能会在选择*
时受益,因为您不必指定所需字段的列表,并确保哪个字段来自哪个表。但一般来说,在性能和维护性方面不鼓励使用SELECT *
,所以我认为在这些字段前加上表名是一种不好的做法,尽管它可能因应用程序而异。
答案 7 :(得分:0)
听起来像结论是: 如果字段名在表之间是唯一的 - 带有表名的前缀。如果字段名称可能在其他表中重复,请将其命名为唯一。
我找到了诸如“img,address,phone,year”之类的字段名称,因为不同的表可能包含不同的图像,地址,电话号码和年份。
答案 8 :(得分:0)
我们应该使用tablename的前缀定义主键。
我们应该使用use_id代替id和post_id,而不仅仅是id。
好处: -
1)易于阅读
2)轻松区分联接查询。我们可以在查询中最小化别名的使用。
用户表:user_id(PK)
帖子表:post_id(PK)user_id(FK)这里用户表PK和帖子表FK相同
3)这样我们就可以获得天然加入的好处并使用加入
与USING的自然连接和连接,包括外连接变体,是 根据SQL:2003标准处理。目标是调整 关于NATURAL JOIN和MySQL的MySQL的语法和语义 加入...根据SQL:2003使用。但是,这些变化加入了 处理可能会导致某些连接的输出列不同。 此外,一些查询似乎在旧版本中正常工作 (在5.0.12之前)必须重写以符合标准。
这些变化有五个主要方面:
1)MySQL确定NATURAL或USING连接操作的结果列的方式(以及整个FROM子句的结果)。
2)将SELECT *和SELECT tbl_name。*扩展为所选列的列表。
3)在NATURAL或USING连接中解析列名。
4)将NATURAL或USING连接转换为JOIN ... ON。
5)在JOIN ... ON的ON状态下解析列名。
示例: -
SELECT * FROM user NATURAL LEFT JOIN post;
SELECT * FROM user NATURAL JOIN post;
SELECT * FROM user JOIN post USING (user_id);