100165618.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 97 行 · 第 1/2 页
HTM
97 行
<link href="css.css" rel="stylesheet" type="text/css" /><h3 style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 0cm; MARGIN-RIGHT: 0cm; FTEL: 8.15pt"><a ftel="_Toc507815175"><span lang="EN-US">21.9.3 </span></a><span style="FONT-FAMILY: 黑体">命名约定</span></h3>
<p class="MsoNormal"><a ftel="naming"><span style="FONT-FAMILY: 宋体">下面的提示和约定与</span><span lang="EN-US">.NET</span></a><span style="FONT-FAMILY: 宋体">并不直接相关,但应共享和遵循,特别是在给约束命名时是非常有效的,如果您对此主题已经有了自己的命名方式,就可以跳过本节。</span></p>
<h4 style="FTEL: 21.45pt"><span lang="EN-US">1. </span><span style="FONT-FAMILY: 黑体">数据库表的约定</span></h4>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><a ftel="namingtables"><span style="FONT-FAMILY: 宋体">总是使用单数名称<span style="LETTER-SPACING: -1pt">——</span></span><span style="LETTER-SPACING: -1pt"> </span><span lang="EN-US">Product</span></a><span style="FONT-FAMILY: 宋体">而不是</span><span lang="EN-US">Products</span><span style="FONT-FAMILY: 宋体">,这是一个普遍适用的约定,因为我们必须给客户解释某种数据库模式,从语法上看,“</span><span lang="EN-US">product</span><span style="FONT-FAMILY: 宋体">表包含产品”要比“</span><span lang="EN-US">products</span><span style="FONT-FAMILY: 宋体">表包含产品”好得多。但</span><span lang="EN-US">Northwind</span><span style="FONT-FAMILY: 宋体">数据库并没有遵循这一约定。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span style="FONT-FAMILY: 宋体">给表中的字段采用某种形式的命名约定,我们采用的是表的主键码为</span><span lang="EN-US"><Table>_ID(</span><span style="FONT-FAMILY: 宋体">假定主键码是一个列</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">,字段采用</span><span lang="EN-US">Name</span><span style="FONT-FAMILY: 宋体">,这是考虑到记录的用户友好性,记录本身的文本信息采用</span><span lang="EN-US">Description</span><span style="FONT-FAMILY: 宋体">。采用好的命名约定,则只要查看一下数据库中的表,就知道其中的字段主要用于什么目的。</span></p>
<h4 style="FTEL: 21.45pt"><span lang="EN-US">2. </span><span style="FONT-FAMILY: 黑体">数据库列的约定</span></h4>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span style="FONT-FAMILY: 宋体">使用单数名称,而不是复数名称。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><a ftel="namingcolumns"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span style="FONT-FAMILY: 宋体">链接到另一个表中的列名应与该表的主键码名相同,所以,链接到</span><span lang="EN-US">Product</span></a><span style="FONT-FAMILY: 宋体">表的列名为</span><span lang="EN-US">Product_ID</span><span style="FONT-FAMILY: 宋体">。链接到</span><span lang="EN-US">Sample</span><span style="FONT-FAMILY: 宋体">表的列名为</span><span lang="EN-US">Sample_ID</span><span style="FONT-FAMILY: 宋体">,这并不总是可行的,如果一个表有另一个表的多个引用,这个命名约定就无效了。此时应使用其他方式命名。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span style="FONT-FAMILY: 宋体">日期字段应有一个</span><span lang="EN-US">_On</span><span style="FONT-FAMILY: 宋体">后缀,例如</span><span lang="EN-US">Modified_On</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US"> Created_On</span><span style="FONT-FAMILY: 宋体">。按照这种命名约定,如果读取一些</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体">输出,很容易从列的名称中知道该列的含义。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span style="FONT-FAMILY: 宋体">记录用户的字段名应有一个</span><span lang="EN-US">_By</span><span style="FONT-FAMILY: 宋体">后缀,例如</span><span lang="EN-US">Modified_By </span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US"> Created_By</span><span style="FONT-FAMILY: 宋体">,这将有助于阅读。</span></p>
<h4 style="FTEL: 21.45pt"><span lang="EN-US">3. </span><span style="FONT-FAMILY: 黑体">约束的约定</span></h4>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><a ftel="namingconstraints"><span style="FONT-FAMILY: 宋体">如果可能,在约束名中包含表名和列名,例如</span><span lang="EN-US">CK_<Table>_<Field></span></a><span style="FONT-FAMILY: 宋体">。对于</span><span lang="EN-US">person</span><span style="FONT-FAMILY: 宋体">表中的</span><span lang="EN-US">Sex(</span><span style="FONT-FAMILY: 宋体">性别</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">列,其检查约束可以是</span><span lang="EN-US">CK_PERSON_SEX</span><span style="FONT-FAMILY: 宋体">,而</span><span lang="EN-US">product </span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US"> supplier</span><span style="FONT-FAMILY: 宋体">表之间的外键码名可以是</span><span lang="EN-US">FK_Product_Supplier_ID</span><span style="FONT-FAMILY: 宋体">。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span style="FONT-FAMILY: 宋体">约束类型的前面加一个前缀,例如</span><span lang="EN-US">CK</span><span style="FONT-FAMILY: 宋体">表示检查约束,</span><span lang="EN-US">FK</span><span style="FONT-FAMILY: 宋体">保持外键码约束,也可以指定更为特殊的名称,例如</span><span lang="EN-US">Age</span><span style="FONT-FAMILY: 宋体">列上的</span><span lang="EN-US">CK_PERSON_AGE_GT0</span><span style="FONT-FAMILY: 宋体">表示该年龄应大于</span><span lang="EN-US">0</span><span style="FONT-FAMILY: 宋体">。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span style="FONT-FAMILY: 宋体">如果必须限制约束名的长度,可以在其中包含表名,而不包含列名。在发现有违反约束的情况时,通常很容易知道哪个表出现错误,但有时不容易检查出是哪个列出了问题。</span><span lang="EN-US">Oracle</span><span style="FONT-FAMILY: 宋体">允许名称的长度为</span><span lang="EN-US">30</span><span style="FONT-FAMILY: 宋体">个字符,而这种限制很容易被打破。</span></p>
<h4 style="FTEL: 21.45pt"><span lang="EN-US">4. </span><span style="FONT-FAMILY: 黑体">存储过程</span></h4>
<p class="MsoNormal" style="LINE-HEIGHT: 17.6pt"><span style="FONT-FAMILY: 宋体">在过去几年中,把</span><span lang="EN-US">C</span><span style="FONT-FAMILY: 宋体">放在每个声明的类前面令人困惑。如此一样,许多</span><span lang="EN-US">SQL Server</span><span style="FONT-FAMILY: 宋体">开发人员也困惑于在每个存储过程的前面加上</span><span lang="EN-US">sp</span><span lang="EN-US" style="FONT-FAMILY: 'Baskerville BE Regular'">_</span><span style="FONT-FAMILY: 宋体">或类似的东西,这不是一个好方法。</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 17.6pt"><span lang="EN-US">SQL Server</span><span style="FONT-FAMILY: 宋体">在所有的系统存储过程前面使用</span><span lang="EN-US">sp</span><span lang="EN-US" style="FONT-FAMILY: 'Baskerville BE Regular'">_</span><span style="FONT-FAMILY: 宋体">前缀。所以一方面,用户会对</span><span lang="EN-US">sp</span><span lang="EN-US" style="FONT-FAMILY: 'Baskerville BE Regular'">_</span><span lang="EN-US">widget</span><span style="FONT-FAMILY: 宋体">是否为</span><span lang="EN-US">SQL Server</span><span style="FONT-FAMILY: 宋体">标准存储过程产生疑问,另外,当查找存储过程时,</span><span lang="EN-US">SQL Server</span><span style="FONT-FAMILY: 宋体">会把带有</span><span lang="EN-US">sp</span><span lang="EN-US" style="FONT-FAMILY: 'Baskerville BE Regular'">_</span><span style="FONT-FAMILY: 宋体">前缀的过程与没有该前缀的过程区别对待。</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 17.6pt"><span style="FONT-FAMILY: 宋体">如果使用这个前缀,但不是该存储过程的数据库</span><span lang="EN-US">/</span><span style="FONT-FAMILY: 宋体">拥有者,</span><span lang="EN-US">SQL Server</span><span style="FONT-FAMILY: 宋体">就会在当前范围内查找,然后跳到主数据库中查找存储过程。没有</span><span lang="EN-US">sp</span><span lang="EN-US" style="FONT-FAMILY: 'Baskerville BE Regular'">_</span><span style="FONT-FAMILY: 宋体">前缀,用户就会早一些得到错误。更糟糕的是创建的本地存储过程</span><span lang="EN-US" style="FONT-FAMILY: 'Baskerville BE Regular'">(</span><span style="FONT-FAMILY: 宋体">在自己的数据库中创建的</span><span lang="EN-US" style="FONT-FAMILY: 'Baskerville BE Regular'">)</span><span style="FONT-FAMILY: 宋体">与系统的存储过程有相同的名称和参数。应尽可能避免这种情况,如果有疑问,就不要使用前缀。</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 17.6pt"><span style="FONT-FAMILY: 宋体">在调用存储过程时,应在名称的前面加上过程拥有者前缀,如</span><span lang="EN-US" style="FONT-FAMILY: 'Baskerville BE Regular'">db.selectWidgets</span><span style="FONT-FAMILY: 宋体">。这将比不使用该前缀略快一些,因为</span><span lang="EN-US" style="FONT-FAMILY: 'Baskerville BE Regular'">SQL Server</span><span style="FONT-FAMILY: 宋体">查找该存储过程所做的工作较少。这不会对应用程序的执行速度有很大的影响,但可以自由使用。</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 17.6pt"><span style="FONT-FAMILY: 宋体">在数据库或代码中命名实体时,应采用一致的命名约定。</span></p></div>
<!-- page -->
<div class="page" style="text-align: center">
<a href="100165617.htm">上一页</a> <a href="index.html">首页</a> <a href="100165619.htm">下一页</a>
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165618.htm'><font color='red'>21.9.3 命名约定</font></a></h1>
<div id="divRealteNod2" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165615.htm'>21.9 使用ADO.NET</a></div><div style='float:right;width:49%'>·<a href='100165616.htm'>21.9.1 分层开发</a></div><div style='float:left;width:49%'>·<a href='100165617.htm'>21.9.2 SQL Server的键生成</a></div><div style='float:right;width:49%'>·<a href='100165619.htm'>21.10 小结</a></div><div style='float:left;width:49%'>·<a href='100165620.htm'>22.1 DataGrid控件</a></div><div style='float:right;width:49%'>·<a href='100165621.htm'>22.1.1 显示列表数据</a></div></div>
</div>
</div>
</div>
<!-- 评论 -->
<!-- 今日推荐 -->
</div>
<!-- 页脚 -->
<div id="foot">
<img src="../../book/readbook.aspx@node=5618&bookid=16&bookname=21.9.3++_25c3_25fc_25c3_25fb_25d4_25bc_25b6_25a8" alt="" width="0" height="0" />
<style>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?