对象名称中的句点是不好的做法吗?
Are periods in object names bad practice?
例如,默认值 0 的约束可以命名为 DF__tablename.columnname
。
虽然我对这种不良做法的搜索没有产生结果,但在我在 SO 和许多其他网站上看到的众多约束示例中,我从未发现句号。
在对象名称中使用句点是完全有效的。但是,这要求您在引用对象名称时用方括号括起来。如果您忘记了这些方括号,您将收到一些错误消息,对于没有经验的开发人员来说,这些消息可能不太直观。出于这个原因,我建议不要在对象名称中使用句点。我猜这也是您在 Internet 上不经常看到对象名称中的句点示例的主要原因。
在您的示例中,您可以使用另一个下划线代替句点,如下所示:DF__tablename_columnname
在对象名称中使用句点是不好的做法。
不要在标识符中使用点字符。是的,它可以做到,但弊大于利。
tl;dr
常规标识符中不允许使用点等特殊字符。如果标识符不遵循常规标识符的规则,则对标识符的引用必须括在方括号(或 ANSI 双引号)中。
就句点(点字符)而言,在常规标识符中不允许在标识符中使用它;但它可以在方括号内使用。
点字符在 SQL 中更像是一个特殊的字符;它用于将标识符与前面的限定符分开。
SELECT mytable.mycolumn FROM mytable
我们也可以写成
SELECT [mytable].[mycolumn] FROM mytable
我们也可以写成
SELECT [mytable.mycolumn] FROM mytable
但这意味着非常不同的东西。这样,我们就不会引用名为 mycolumn
的列,我们现在引用的是包含点字符的标识符。
SQL 服务器会很好地处理这个问题。
但如果我们这样做,并开始在我们的标识符中使用点字符,我们将会给未来的读者带来困惑和挫败感。我们通过在标识符中使用点字符获得的任何好处将远远超过其他人的缺点。
同样,为什么我们不创建名为 WHERE (1=1) OR
的表,或创建名为 SUBSTR(foo.bar,1,10)
的列,以避免像
这样的怪物
SELECT [SUBSTR(foo.bar,1,10)] FROM [WHERE (1=1)] OR]
这可能是正确的SQL,但它会让未来的读者变得非常沮丧,并导致他们诅咒我们,我们的后代和亲人。不要让他们那样做。看在世间一切美好美好的份上,请勿在标识符中使用点字符。
例如,默认值 0 的约束可以命名为 DF__tablename.columnname
。
虽然我对这种不良做法的搜索没有产生结果,但在我在 SO 和许多其他网站上看到的众多约束示例中,我从未发现句号。
在对象名称中使用句点是完全有效的。但是,这要求您在引用对象名称时用方括号括起来。如果您忘记了这些方括号,您将收到一些错误消息,对于没有经验的开发人员来说,这些消息可能不太直观。出于这个原因,我建议不要在对象名称中使用句点。我猜这也是您在 Internet 上不经常看到对象名称中的句点示例的主要原因。
在您的示例中,您可以使用另一个下划线代替句点,如下所示:DF__tablename_columnname
在对象名称中使用句点是不好的做法。
不要在标识符中使用点字符。是的,它可以做到,但弊大于利。
tl;dr
常规标识符中不允许使用点等特殊字符。如果标识符不遵循常规标识符的规则,则对标识符的引用必须括在方括号(或 ANSI 双引号)中。
就句点(点字符)而言,在常规标识符中不允许在标识符中使用它;但它可以在方括号内使用。
点字符在 SQL 中更像是一个特殊的字符;它用于将标识符与前面的限定符分开。
SELECT mytable.mycolumn FROM mytable
我们也可以写成
SELECT [mytable].[mycolumn] FROM mytable
我们也可以写成
SELECT [mytable.mycolumn] FROM mytable
但这意味着非常不同的东西。这样,我们就不会引用名为 mycolumn
的列,我们现在引用的是包含点字符的标识符。
SQL 服务器会很好地处理这个问题。
但如果我们这样做,并开始在我们的标识符中使用点字符,我们将会给未来的读者带来困惑和挫败感。我们通过在标识符中使用点字符获得的任何好处将远远超过其他人的缺点。
同样,为什么我们不创建名为 WHERE (1=1) OR
的表,或创建名为 SUBSTR(foo.bar,1,10)
的列,以避免像
SELECT [SUBSTR(foo.bar,1,10)] FROM [WHERE (1=1)] OR]
这可能是正确的SQL,但它会让未来的读者变得非常沮丧,并导致他们诅咒我们,我们的后代和亲人。不要让他们那样做。看在世间一切美好美好的份上,请勿在标识符中使用点字符。