Database design 数据库列类型前缀
我已经为数据库开发了11年多的解决方案,似乎我已经“开发”了一个关于表中列命名的颇有争议的观点:我总是给它们一个3或4个字符的类型前缀,即intGroupID、nvcTitle、dtmCreated、BitplayerWater,等等,我和其他几个开发者一起工作过,他们都非常鄙视老式的前缀约定 (是的,我知道,我没有发明任何东西,我只是拒绝放弃:) 我的主要理由是,当我的开发伙伴试图理解数据结构时,尽可能多地向他们提供信息。知道专栏的类型会让你们(或者至少是我)在脑海中对你们正在处理的事情有一个更好的印象。与C#或VB.NET相比,在编写查询时,IDE通常没有同样的intellisense支持 到目前为止,还没有人能够提出致命的论点,可以改变我对这个特定话题的看法。我还有一些其他同样有争议的命名约定,它们增加了清晰度,但列前缀似乎让更多人恼火 为什么在数据库列前面加前缀被认为是一种很糟糕的做法?它被称为“” 作为一名开发人员(和数据架构师),我发现它毫无价值。它提供的信息不多Database design 数据库列类型前缀,database-design,naming-conventions,prefix,Database Design,Naming Conventions,Prefix,我已经为数据库开发了11年多的解决方案,似乎我已经“开发”了一个关于表中列命名的颇有争议的观点:我总是给它们一个3或4个字符的类型前缀,即intGroupID、nvcTitle、dtmCreated、BitplayerWater,等等,我和其他几个开发者一起工作过,他们都非常鄙视老式的前缀约定 (是的,我知道,我没有发明任何东西,我只是拒绝放弃:) 我的主要理由是,当我的开发伙伴试图理解数据结构时,尽可能多地向他们提供信息。知道专栏的类型会让你们(或者至少是我)在脑海中对你们正在处理的事情有一个
vcName
,strName
还是uniName
[虽然说这几乎毫无用处,但我意识到这可能不是你要寻找的“杀手论据”。如果你能用你认为匈牙利符号有价值的实际原因逐点更新你的问题,这会有所帮助,因此可以逐点加以解决。]我不在列名前键入前缀的最大原因是,当我必须记住(然后键入)列的前缀,而不是只键入逻辑名(例如FirstName而不是strFirstName)时,键入查询的过程往往会变得更长。通常,或者那些处理您的数据的人应该知道您的数据的基础。因为查询不是真正的强类型强制的,所以可以参数化任何查询。您第一次测试该查询要么有效,要么失败。修好它,然后继续前进 至于在可视化IDE中工作,我见过许多商店不强制使用通用约定命名对象(文本框、组合框等)。因为我以前做过的很多事情都是动态生成、链接和绑定的,所以我在控件上使用了这样的前缀,比如txtFirstName、btnOk、cboStateList等等。然后,在控件上,我去掉前3个字符,并将字段的名称(如果适用)在运行时自动绑定到数据对象。然而,如前所述,表中列名的前缀可能会导致更多的问题,而不是帮助
就我的美元价值(通货膨胀从2美分开始)问题在于所谓的应用程序匈牙利符号和系统匈牙利符号之间。前者添加有关您拥有的数据类型的信息(例如
dx
可能表示“左边框的像素数”),而后者添加有关您拥有的数据类型的信息(例如bit
表示bit
)
使用当前的编程环境和方法,您永远不必查找正在使用的变量的类型。IDE和编译器会告诉您是否错了。因此,这本质上是冗余数据,当您开始(自动)从这些名称生成源时,这些数据开始进入您的方式:
// just looks wrong:
public void SetSomething(bool bitPlayerHater)
阅读乔尔的文章。特别是“我是匈牙利人”一节。另外,如果您需要更改数据类型(发生的次数比您想象的要多——我们刚转到unicode),您必须在代码中更改所有列名称。(这是一件坏事!):-)我已经更改了几次列类型。例如,
code
从number
到string
。在大多数情况下,如果没有前缀,我不需要重新编码就可以完成这项工作,而且所有应用程序都将运行(至少在oracle中)。使用您的方法,我需要将intCode
更改为strCode
,并且我100%确定我需要使用此字段重做我的所有代码
将整数更改为浮点也是如此
有些人还会在列名前面加上表格缩写(例如,department.dep_code
)。我发现这真的很难编码,因为我往往会忘记缩写。一个有50个表的系统往往会得到非常相似的前缀。使用它的一个原因是,当员工加入部门时,部门代码字段是唯一的字段(emp\u code
和dep\u code
)。我不认为它会增加价值,因为使用表别名可以更容易地做到这一点,因为表别名不会强制您使用前缀
我在客户机代码中为GUI组件使用了很多前缀。例如,sle
用于单行编辑,也用于c和powerbuilder。当我搬到java时,我停了下来