我最近开始将表格的名称附加到表格中的所有列中。所以说我有这些表:
Companies:
Id | Name | Logo | Info
Companies Employees:
Company Id | Employees Id
Employees:
Id | Name
我会将列名更改为:
Companies:
Company Id | Company Name | Company Logo | Company Info
Companies Employees:
Company Id | Employee Id
Employees:
Employee Id | Employee Name
这允许我使用SELECT * FROM `Companies` NATURAL JOIN `Companies Employees` NATURAL JOIN `Employees`
之类的查询,而无需担心重命名Id
和Name
列,因为我保证不会有同名的列是my { {1}}和Companies
表。但我想知道这是不是好的架构设计实践?如果有充分的理由反对它,我不想养成它的习惯,但除了大量冗余重新输入表名之外,我还没有想到其他任何东西。
答案 0 :(得分:1)
一个帖子中有两个不良做法。
1。不要这样做,它既不会增加功能,也不会增加可读性。您需要使用表名前缀的唯一位置是关系表。
2。不要使用NATURAL JOIN
的
答案 1 :(得分:0)
为什么写Companies.Name
或Employee.Id
这么难?我认为浪费你的时间。
答案 2 :(得分:0)
在几个不同的情况下,将表的名称添加到每列可能会有所帮助 -
当您加入2个表,否则这些表将共享多个列名称时,它将使您不必分配别名来区分列
我倾向于在整个Web应用程序中使用数据库列名来保持一致性;我将列名称保存在表单字段,变量等中,它们处理相同的数据项。在包含100多个表的大型数据库中,它可以帮助我保持井井有条,并在变量上加上表名前缀。更不用说,它可以帮助那些对项目不熟悉的人,如果他们能看到变量来自哪个表。
当您在表中指定外键时,如果您有一个命名约定来指定该键所属的表,则会有很大帮助。没有什么比看到外键并且不知道它应该属于哪个表更糟糕了。
使用表名为列添加前缀的唯一缺点是它可能会有点冗长。
答案 3 :(得分:0)
在没有明确命名键列的情况下连接表对于简单查询非常有用,但是当您需要连接三个或更多表时,往往会搞乱。每次我尝试用ON
替换USING()
子句时,我都发现了这个问题。
例如:假设您想要按城市获取销售报告。您可以考虑办公室城市或客户城市。表customer
和office
都有一个city_id
外键指向city
表,但是当您查询客户时,NATURAL JOIN无法知道您要加入哪一个和办公室在同一个查询中。
无论如何,单独使用唯一列是一个很好的技巧。它为您节省了大量SELECT foo.id AS foo_id...
。