Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 数据库列类型前缀_Database Design_Naming Conventions_Prefix - Fatal编程技术网

Database design 数据库列类型前缀

Database design 数据库列类型前缀,database-design,naming-conventions,prefix,Database Design,Naming Conventions,Prefix,我已经为数据库开发了11年多的解决方案,似乎我已经“开发”了一个关于表中列命名的颇有争议的观点:我总是给它们一个3或4个字符的类型前缀,即intGroupID、nvcTitle、dtmCreated、BitplayerWater,等等,我和其他几个开发者一起工作过,他们都非常鄙视老式的前缀约定 (是的,我知道,我没有发明任何东西,我只是拒绝放弃:) 我的主要理由是,当我的开发伙伴试图理解数据结构时,尽可能多地向他们提供信息。知道专栏的类型会让你们(或者至少是我)在脑海中对你们正在处理的事情有一个

我已经为数据库开发了11年多的解决方案,似乎我已经“开发”了一个关于表中列命名的颇有争议的观点:我总是给它们一个3或4个字符的类型前缀,即intGroupID、nvcTitle、dtmCreated、BitplayerWater,等等,我和其他几个开发者一起工作过,他们都非常鄙视老式的前缀约定

(是的,我知道,我没有发明任何东西,我只是拒绝放弃:)

我的主要理由是,当我的开发伙伴试图理解数据结构时,尽可能多地向他们提供信息。知道专栏的类型会让你们(或者至少是我)在脑海中对你们正在处理的事情有一个更好的印象。与C#或VB.NET相比,在编写查询时,IDE通常没有同样的intellisense支持

到目前为止,还没有人能够提出致命的论点,可以改变我对这个特定话题的看法。我还有一些其他同样有争议的命名约定,它们增加了清晰度,但列前缀似乎让更多人恼火

为什么在数据库列前面加前缀被认为是一种很糟糕的做法?

它被称为“”

作为一名开发人员(和数据架构师),我发现它毫无价值。它提供的信息不多

  • 它仅在部分类型信息上提供快速、不准确的光泽。例如,它省略了长度

    在更复杂的数据库环境中,对象是BLOB的,它完全不提供关于BLOB中对象类型的信息

  • 它使更改数据类型变得痛苦

  • 有必要记住一个模糊的前缀。它是
    vcName
    strName
    还是
    uniName

  • SQL自动处理类型转换,使得繁琐的特定于类型的命名在很大程度上无关紧要

  • 最重要的是:它没有提供有关数据的含义的有用文档。我的经验是,人们几乎总是破坏意义。他们很少(如果有的话)混淆它是int还是string;当他们想知道的时候,他们只是简单地用TOAD或其他工具描述表格,给出实际的类型,而不是预期类型的部分摘要


  • [虽然说这几乎毫无用处,但我意识到这可能不是你要寻找的“杀手论据”。如果你能用你认为匈牙利符号有价值的实际原因逐点更新你的问题,这会有所帮助,因此可以逐点加以解决。]

    我不在列名前键入前缀的最大原因是,当我必须记住(然后键入)列的前缀,而不是只键入逻辑名(例如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时,我停了下来