0

例如,可以将默认值 0 的约束命名为DF__tablename.columnname

尽管我对这种不好的做法的搜索没有产生结果,但在我在 SO 和许多其他网站上看到的众多限制示例中,我从未发现过一段时间。

4

2 回答 2

2

在对象名称中使用句点是不好的做法。

不要在标识符中使用点字符。是的,它可以做到,但缺点超过任何好处。


tl;博士

常规标识符中不允许使用特殊字符,例如点。如果标识符不遵循常规标识符的规则,则对标识符的引用必须用方括号(或 ANSI 双引号)括起来。

https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-identifiers?view=sql-server-2017

就句点(点字符)而言,在一个标识符中使用它是不允许在一个常规标识符中使用的;但它可以在方括号内使用。

点字符在 SQL 中更像是一个特殊字符。它用于将标识符与前面的限定符分开。

  SELECT mytable.mycolumn FROM mytable

我们也可以写成

  SELECT [mytable].[mycolumn] FROM mytable

我们也可以写

  SELECT [mytable.mycolumn] FROM mytable

但这意味着一些非常不同的东西。这样,我们没有引用名为 的列mycolumn,我们现在引用的是一个包含点字符的标识符。

SQL Server 可以很好地处理这个问题。

但是,如果我们这样做,并开始在标识符中使用点字符,我们将给未来的读者带来困惑和挫败感。我们在标识符中使用点字符所获得的任何好处都将远远超过其他人的缺点。

同样,为什么我们不创建名为 的表WHERE (1=1) OR,或创建名为的列以SUBSTR(foo.bar,1,10)避免像

  SELECT [SUBSTR(foo.bar,1,10)] FROM [WHERE (1=1)] OR]

这可能是有效的 SQL,但它会导致未来的读者变得非常不安,并导致他们诅咒我们,我们的后代和亲人。不要让他们那样做。为了这个世界上所有美好和美好的事物的爱,不要在标识符中使用点字符。

于 2019-03-05T15:46:50.463 回答
0

在对象名称中有句点是完全有效的。但是,这要求您在引用对象名称时在其周围使用方括号。如果您忘记了这些方括号,您将收到一些错误消息,这些错误消息对于没有经验的开发人员来说可能不太直观。出于这个原因,我建议不要在对象名称中使用句点。我也猜想这是您在 Internet 上不经常在对象名称中看到句点示例的主要原因。

在您的示例中,您可以使用另一个下划线而不是句点,如下所示:DF__tablename_columnname

于 2019-03-05T15:03:53.510 回答