使用项目名称为列名添加前缀的优点/缺点是什么?

时间:2016-04-21 23:19:58

标签: database-design

我正在开发一个博客模块,用于我未来的项目。

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

昨天我正在寻找IPS Boards的源代码并看到类似的东西。我感兴趣的是,他们也使用了前缀作为列名。

举个例子:

blog_categories
    category_id
    category_name
    category_slug

blog_categories
    id
    name
    slug

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

1 个答案:

答案 0 :(得分:1)

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

添加前缀的原因

使用前缀,您的列名在语义上基本上是唯一的。 category_id始终引用类别表的id。有些人认为这更容易阅读。其他人指出,这允许联接使用USING (),因为这意味着连接列始终具有相同的名称。

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

不添加前缀的原因

但我不想添加前缀。在此模型中,列都在逻辑上绑定到表的主键,因此使用表作为命名空间可以很好地工作。这也允许更简单,更一致地命名表中的重要性。例如,数字代理键可能始终称为id,而其他列可能具有其他名称。

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