我正在开发一个博客模块,用于我未来的项目。
我决定用blog_
作为所有表名的前缀,因为它是一个模块,不同的模块可以有一些同名的表。
昨天我正在寻找IPS Boards的源代码并看到类似的东西。我感兴趣的是,他们也使用了前缀作为列名。
举个例子:
blog_categories
category_id
category_name
category_slug
或
blog_categories
id
name
slug
如果我这样做,你认为哪一个更好?
答案 0 :(得分:1)
在某种程度上,这是一个火焰领域,所以这篇文章将讨论为什么我认为人们选择其中一个。就个人而言,我属于后一类。请注意,一些优点和缺点取决于您的数据库系统。
添加前缀的原因
使用前缀,您的列名在语义上基本上是唯一的。 category_id始终引用类别表的id。有些人认为这更容易阅读。其他人指出,这允许联接使用USING ()
,因为这意味着连接列始终具有相同的名称。
不幸的是后一种情况并不完美。 USING ()
限制了规划器可以对连接执行的操作,因为重新排序连接可以更改连接条件。然而,优秀的策划者可能能够解决这个问题。有关详细信息,请查看数据库文档。
不添加前缀的原因
但我不想添加前缀。在此模型中,列都在逻辑上绑定到表的主键,因此使用表作为命名空间可以很好地工作。这也允许更简单,更一致地命名表中的重要性。例如,数字代理键可能始终称为id
,而其他列可能具有其他名称。
然而,我的部分偏好可能与我选择的数据库有关。对于主键与非空唯一约束,PostgreSQL没有做出真正的区分(InnoDB的做法)。因此,我发现命名代理键始终很好,特别是当我尝试始终指定自然主键时。但是,这种方法在所有数据库系统上都不能很好地工作。