你是否根据保留字列表检查字段和表名?

时间:2008-09-22 16:46:38

标签: database-design reserved-words

我的字段,表格,视图存储过程名称有时会出现问题。 例如:

   SELECT from, to, rate FROM Table1

问题是来自 的 是SQL-92中的保留字。 您可以将字段名放在双引号中以解决此问题,但是如果其他一些数据库工具想要读取您的数据库呢? 这是您的数据库设计,如果其他应用程序出现数据库问题,则是您的错误。

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

我有一个工具来检查我的数据库设计与这些保留字;你呢?

这是我的规则

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

6 个答案:

答案 0 :(得分:2)

简单方法:只需确保引用每个字段名称。

编辑:任何合理的DB工具都应该做同样的事情,我当然从来没有遇到任何问题(至少在我自己的代码之外!)

答案 1 :(得分:2)

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

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

最后它看起来很乱。最好花时间思考一个不与SQL关键字冲突的不同词。

你的规则对我来说很好。

答案 2 :(得分:1)

当然。为此,我有一个SQL_RESERVED_WORDS表。

Oracle只能处理30个字符表名BTW。他们都是大写的。

在表自行支付之前,只需要一个小时的不必要的调试。

答案 3 :(得分:0)

避免使用保留字。

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

报价确实有效,所以你可以为了安全起见。但是,对于DBA和针对您的应用程序制作自定义报告的人来说,这会让生活变得非常尴尬,所以这应该仅用作创可贴。

答案 4 :(得分:0)

除了名称和保留字之间明显的混淆外,我认为至少有两个非常强大的理由可以避免使用保留字作为名称:

  1. 您不必使用严重影响可读性的引号(或MS世界中的方括号)。

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

答案 5 :(得分:0)

我同意Yarik关于保留字的适用性的第二点。在OPs示例中,他使用“to”,“from”和“rate”。我心中的直接问题,也就是未来开发者的问题,是“来往于什么?”也许可以考虑将这些列重命名为“EffectiveFromDate”和“EffectiveUntilDate”,如果这是他们所代表的。

< / 2C>