我们应该在数据库表命名约定中使用前缀吗?

时间:2008-11-27 16:26:50

标签: sql database naming-conventions

我们正在决定工作开发团队的表,列,程序等的命名约定。单数复数表命名已经确定,我们使用单数。我们正在讨论是否为每个表名使用前缀。我想阅读有关使用前缀的建议,以及原因。

它是否提供任何安全性(对于可能的入侵者至少还有一个障碍)?我认为用前缀命名它们通常会更方便,以防我们在代码中使用表名,所以不要将它们与变量,属性等混淆。但我想阅读更有经验的开发人员的意见。 / p>

7 个答案:

答案 0 :(得分:25)

我发现匈牙利数据库对象前缀表示他们的类型相当烦人。

我曾在每个表名必须以“tbl”开头的地方工作过。在每种情况下,当某人需要进行其他微小的改变时,命名约定最终会导致很大的痛苦。

例如,如果您的约定是表以“tbl”开头并且视图以“v”开头,那么当您决定在后端用其他东西替换表并提供视图时,正确的做法是什么兼容性甚至是首选界面?我们最终得到了以“tbl”开头的观点。

答案 1 :(得分:9)

我更喜欢使用应用程序或解决方案的简短名称为表和其他数据库对象添加前缀。

这有助于产生两种可能出现的情况:

  1. 如果您选择使用需要应用程序数据库中的表的任何第三方框架组件(例如asp网络成员资格提供程序),则不太可能发生命名冲突。

  2. 如果您正在为客户开发解决方案,它们可能仅限于一个数据库(特别是如果他们为外部托管付费),要求他们将多个应用程序的数据库对象存储在一个数据库中。

答案 2 :(得分:8)

我没有看到任何命名约定如何提高安全性......

如果入侵者有权访问数据库(具有有害权限),他们肯定有权列出表名并选择查看它们的用途。

但我认为真正令人困惑的表名可能会间接地恶化安全性。 这将使进一步的发展变得困难,从而减少安全问题得到解决的机会,或者甚至可以隐藏潜在的问题:

如果名为(例如)'sro235onsg43oij5'的表中充满了随机命名的coloumns,其中包含随机字符串和数字,新开发人员可能会认为它是随机测试数据(除非他触及与之交互的代码),但是如果它被命名为'userpasswords'或类似的任何开发人员,如果密码以明文形式存储,那么查看该表的开发人员可能会感到震惊。

答案 3 :(得分:3)

为什么不按照您编写的指南来命名表格?将表名称视为“类”,将列视为“属性”或“字段”。这有助于使用可以从类/成员命名自动推断表/列命名的ORM。

例如,Castle ActiveRecord,声明如下assumes the names are the same作为他们所在的成员。

[ActiveRecord]
public class Person
{
    [PrimaryKey]
    public Int32 Id { get; set; }

    [Property]
    public String Name { get; set; }
}

答案 4 :(得分:2)

如果您使用SqlServer,那么良好的开端是查看为某些指导提供的示例数据库。

答案 5 :(得分:2)

过去,我一直反对在表名和列名中使用前缀。但是,当面临重新设计系统的任务时,拥有前缀对于进行搜索和替换是非常宝贵的。例如,对“tbl_product”进行grepping可能会比为“product”提供更多相关结果。

答案 6 :(得分:-4)

如果您担心混淆表名,请在代码中使用匈牙利表示法系统。对于表名,字符串+“tn”可能是“s”:

 stnUsers = 'users';
 stnPosts = 'posts';

当然,前缀由您决定,具体取决于您对代码的详细程度...... strtblUsers, strtblnmeUsers, thisisthenameofatableyouguysUsers...

为表名附加前缀确实有一些好处,特别是如果您不将该前缀硬编码到系统中,并允许它根据安装进行更改。例如,Ian表示,与其他组件发生冲突的风险较小,其次,如果您愿意,您可以在同一个数据库中运行两个或多个程序实例。