我们是否根据保留单词列表检查字段名和表名?
有时我的字段,表,viewoder存储过程名称有问题。
例子:
SELECT from, to, rate FROM Table1
问题是from是SQL-92中的保留字。
我们可以将字段名放在双引号中以解决此问题,但是如果其他一些数据库工具想要读取数据库怎么办?
这是数据库设计,如果其他应用程序的数据库有问题,这是错。
还有许多其他保留字(〜300),我们应该避免所有这些保留字。
如果将DBMS从制造商A更改为B,则应用程序可能会失败,因为某些字段名现在是保留字。
名为PERCENT的字段可能适用于oracle数据库,但是在MS SQL Server上,必须将其视为保留字。
我有一个工具可以根据这些保留字来检查我的数据库设计;你也是?
这是我的规则
- 不要使用超过32个字符的名称(某些DBMS无法处理更长的名称)
- 仅使用a-z,A-Z,0-9和下划线(不允许使用::-;,/&!=?+-)
- 不要以数字开头的名字
- 避免使用这些保留字
解决方案
简单方法:只需确保每个字段名称都被引用。
编辑:任何明智的数据库工具值得做的事情,我肯定从未遇到过任何问题(至少在我自己的代码之外!)
确实。我有一个SQL_RESERVED_WORDS表用于该目的。
Oracle只能处理30个字符表名称BTW。而且它们都是大写的。
在表格收回成本之前,只需要花费一个小时的不必要的调试。
即使我们可以引用保留字,也不应将保留字用作表中的列名。
引用它们会使代码真正尴尬,因为我们必须始终在代码内的SQL语句中转义引号字符。在我看来,这也使SQL命令行成为真正的PITA。
最后,它看起来很凌乱。花时间想出一个与SQL关键字不冲突的其他词要好得多。
你的规则对我来说很好。
只是避免保留字。
请注意,大多数数据库(和数据库链接层)都有以编程方式列出所有保留字的方式。我们可以将其用作应用程序启动的健全性检查,以确保我们没有误入歧途。
报价确实有效,因此为了安全起见,我们可以这样做。但是,这对于DBA和针对应用程序进行自定义报告的人们来说真的很尴尬,因此应仅将它们用作临时帮助。
除了名称和保留字之间的明显混淆之外,我认为至少有两个非常强烈的理由要避免使用保留字作为名称:
- 我们不必使用会严重损害可读性的引号(或者MS world中的方括号)。注意:当我们发现自己需要从SQL(所谓的"动态SQL"方法)或者从其他语言生成SQL代码时,可读性可能会受到特别的破坏。我们不希望单引号内有多余的双引号,或者多余的重复双引号,或者转义的引号,或者类似的其他晦涩的东西。例如,我们如何喜欢这些片段:
-- SQL ----------------------- declare @sql as varchar(4000) set @sql = 'select "To", "From" from MyTable' ' VB ------------------------- Dim sql as String sql = "select ""To"", ""From"" from MyTable" // C++ ----------------------- String sql = "select \"To\", \"From\" from MyTable"
- 无论如何,大多数保留字都不适合用于命名表,列,变量等。在绝大多数情况下,名词(有时是形容词)在名称上比动词,副词和介词好得多。 :-)
我同意Yarik关于保留字是否适用的第二点。在OP的示例中,他使用"至","从"和"费率"。在我心中,因此在未来的开发人员心中,眼前的问题是"往返"?如果它们代表的话,也许可以考虑将这些列重命名为" EffectiveFromDate"和" EffectiveUntilDate"。
</ 2c>