我们正在工作中的开发团队决定表、列、过程等的命名约定。表的单复数命名已经确定,我们使用单数。我们正在讨论是否为每个表名使用前缀。我想阅读有关是否使用前缀的建议,以及为什么。
它是否提供了任何安全性(对于可能的入侵者来说至少又多了一个障碍)?我认为用前缀命名它们通常更舒服,以防我们在代码中使用表的名称,所以不要将它们与变量、属性等混淆。但我想阅读更有经验的开发人员的意见。
我们正在工作中的开发团队决定表、列、过程等的命名约定。表的单复数命名已经确定,我们使用单数。我们正在讨论是否为每个表名使用前缀。我想阅读有关是否使用前缀的建议,以及为什么。
它是否提供了任何安全性(对于可能的入侵者来说至少又多了一个障碍)?我认为用前缀命名它们通常更舒服,以防我们在代码中使用表的名称,所以不要将它们与变量、属性等混淆。但我想阅读更有经验的开发人员的意见。
我发现匈牙利 DB 对象前缀来指示它们的类型相当烦人。
我曾在每个表名都必须以“tbl”开头的地方工作过。在每种情况下,当有人需要进行其他微小的更改时,命名约定最终都会造成很大的痛苦。
例如,如果您的约定是表格以“tbl”开头,视图以“v”开头,那么当您决定在后端用其他东西替换表格并提供视图以实现兼容性或甚至作为首选接口?我们最终得到了以“tbl”开头的视图。
我更喜欢使用应用程序或解决方案的短名称为表和其他数据库对象添加前缀。
这有助于我想到两种可能的情况:
如果您选择使用任何需要应用程序数据库中的表的第三方框架组件(例如,asp 网络成员资格提供程序),您就不太可能发生命名冲突。
如果您正在为客户开发解决方案,他们可能仅限于单个数据库(特别是如果他们为外部托管付费),需要他们将多个应用程序的数据库对象存储在单个数据库中。
我看不出任何命名约定如何提高安全性......
如果入侵者有权访问数据库(具有有害权限),他们肯定有权列出表名并选择查看它们的用途。
但我认为真正令人困惑的表名可能会间接恶化安全性。这将使进一步的开发变得困难,从而减少安全问题得到修复的机会,甚至可能隐藏潜在问题:
如果一个名为(例如)'sro235onsg43oij5' 的表充满了带有随机字符串和数字的随机命名的列,新开发人员可能只会认为它是随机测试数据(除非他触及与之交互的代码),但如果它被命名'userpasswords' 或类似的任何查看表格的开发人员可能会对密码以明文形式存储感到震惊。
为什么不根据您制定的编码指南命名表格?将表名视为“类”,将列视为“属性”或“字段”。这有助于使用可以从类/成员命名自动推断表/列命名的 ORM。
例如,如下声明的Castle ActiveRecord假定名称与它们所在的成员相同。
[ActiveRecord]
public class Person
{
[PrimaryKey]
public Int32 Id { get; set; }
[Property]
public String Name { get; set; }
}
如果您使用 SqlServer,最好的开始是查看提供的示例数据库以获得一些指导。
过去,我一直反对在表名和列名中使用前缀。然而,当面临重新设计系统的任务时,具有前缀对于进行搜索和替换是非常宝贵的。例如,对“tbl_product”的 grepping 可能会比对“product”的 grepping 提供更多相关的结果。
如果您担心混淆表名,请在代码中使用匈牙利符号样式系统。也许“s”代表字符串+“tn”代表表名:
stnUsers = 'users';
stnPosts = 'posts';
当然,前缀取决于您,这取决于您喜欢代码的详细程度......strtblUsers, strtblnmeUsers, thisisthenameofatableyouguysUsers...
将前缀附加到表名确实有一些好处,特别是如果您不将该前缀硬编码到系统中,并允许它在每次安装时更改。第一,正如 Ian 所说,您与其他组件发生冲突的风险较小,第二,如果您愿意,您可以让程序的两个或多个实例在同一个数据库上运行。