4

我的字段、表、查看器存储过程名称有时会出现问题。例子:

   SELECT from, to, rate FROM Table1

问题是from是 SQL-92 中的保留字。您可以将字段名放在双引号中来解决这个问题,但是如果其他一些数据库工具想要读取您的数据库怎么办?这是您的数据库设计,如果其他应用程序对您的数据库有问题,那是您的错。

还有许多其他保留字(~300),我们应该避免所有这些。如果您将 DBMS 从制造商 A 更改为 B,您的应用程序可能会失败,因为一些字段名现在是保留字。一个名为PERCENT的字段可能适用于 oracle 数据库,但在 MS SQL Server 上,它必须被视为保留字。

我有一个工具可以对照这些保留字检查我的数据库设计;你也是?

这是我的规则

  1. 不要使用超过 32 个字符的名称(某些 DBMS 无法处理更长的名称)
  2. 仅使用 az、AZ、0-9 和下划线(:-;,/&!=?+- 是不允许的)
  3. 不要以数字开头的名字
  4. 避免这些保留字
4

6 回答 6

2

简单的方法:只要确保每个字段名称都被引用。

编辑:任何明智的数据库工具都应该做同样的事情,我当然从未遇到过任何问题(至少在我自己的代码之外!)

于 2008-09-22T16:47:25.670 回答
2

您不应该使用保留字作为表中的列名,即使您可以引用它们。

引用它们会使代码变得非常尴尬,因为您必须始终在代码中的 SQL 语句中转义引号字符。在我看来,它还使 SQL 命令行成为真正的 PITA。

最后它看起来很乱。花时间想出一个不与 SQL 关键字冲突的不同单词要好得多。

你的规则在我看来很好。

于 2008-09-22T16:52:11.947 回答
1

确实。为此,我有一个 SQL_RESERVED_WORDS 表。

顺便说一句,Oracle 只能处理 30 个字符的表名。而且它们都是大写的。

只需要一个小时的不必要的调试就可以收回成本。

于 2008-09-22T16:49:00.520 回答
0

只是避免保留字。

请注意,大多数数据库(和数据库链接层)都有一种以编程方式列出所有保留字的方法。您可以将其用作应用程序启动时的健全性检查,以确保您没有误入歧途。

引用确实有效,因此您可以这样做以确保安全。然而,对于 DBA 和针对您的应用程序制作自定义报告的人来说,这让生活变得非常尴尬,因此这应该仅用作创可贴。

于 2008-09-22T16:54:40.240 回答
0

撇开名称和保留字之间明显的混淆不谈,我认为至少有两个非常充分的理由避免使用保留字作为名称:

  1. 您不必使用大大损害可读性的引号(或 MS 世界中的方括号)。

    注意:当您发现自己需要从 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"
    
  2. 无论如何,大多数保留字都不适合命名表、列、变量等。在绝大多数情况下,名词(有时是形容词)比动词、副词和介词更适合命名。:-)

于 2008-11-15T10:51:49.307 回答
0

我同意 Yarik 关于保留字适用性的第二点。在 OP 示例中,他使用“to”、“from”和“rate”。我脑海中最直接的问题,因此也可能是未来开发人员的问题,是“去往和来自什么?” 也许考虑将这些列重命名为“EffectiveFromDate”和“EffectiveUntilDate”,如果这就是它们所代表的。

</2c>

于 2008-11-15T11:39:58.427 回答