我们是否根据保留单词列表检查字段名和表名?

时间:2020-03-06 14:33:02  来源:igfitidea点击:

有时我的字段,表,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>