2016-04-21 80 views
1

我正在研究一个博客模块,以用于将来的项目。为项目名称添加列名前缀的优点/缺点是什么?

我决定在blog_前加上所有表名,因为它是一个模块,不同的模块可以有一些同名的表。

昨天我在看IPS主板的源代码,看到这样的东西。对我感兴趣的一点是他们也使用了他们列名的前缀。

举个例子:

blog_categories 
    category_id 
    category_name 
    category_slug 

blog_categories 
    id 
    name 
    slug 

哪一个你认为它会更好,如果我这样做呢?

回答

1

在某种程度上这是一个火焰战争的领土,所以这篇文章将讨论为什么我认为人们选择一个或另一个。就我个人而言,我属于后一类。请注意一些优点和缺点取决于您的数据库系统。

原因添加前缀

随着前缀,列名在很大程度上是语义上是独一无二的。 category_id始终引用类别表的ID。有些人认为这比较容易阅读。其他人指出,这允许连接使用USING(),因为这意味着连接列始终具有相同的名称。

不幸的是,后一种情况并不完美。 USING()限制了规划师可以对连接执行的操作,因为重新排序连接可以更改连接条件。不过好的策划者可能会解决这个问题。查看数据库文档以获取详细信息

理由不加前缀

我宁愿然而,并非添加前缀。在这个模型中,所有的列都被逻辑地绑定到表的主键上,所以使用这个表作为名称空间效果很好。这也允许更简单,更一致的关于表内重要性的命名。例如,数字代理键可能总是被称为id,而其他列可能具有其他名称。

但是我偏好的一部分可能与我选择的数据库有关。 PostgreSQL在主键和非零唯一约束方面并没有做出真正的区分(InnoDB的方式)。因此,我发现一致地命名代理键是很好的,特别是当我尝试总是指定自然主键时。但是,这种方法在所有数据库系统上都不能很好地工作。

+0

感谢您的好评,根据您的研究和我的编码方式,O将坚持第二种选择。我使用Eloquent作为数据库帮助程序,所以我没有真正搞砸SQL查询。我也认为这种方式更具可读性。 –