如何避免在SQL

时间:2016-09-25 16:25:14

标签: sql naming-conventions naming

这是关于SQL中命名约定的问题。

如果用同一个词或短语描述你的表和你的字段,你应该怎么命名。是否可以为它们两者设置相同的名称。

我的例子:

我正在创建一个问题,每个问题可以有一对多的答案,所以我认为最好的方法是建立一个这样的结构:

CREATE TABLE question
(
    id INT NOT NULL IDENTITY(1,1),
    question VARCHAR(250) NOT NULL
)

CREATE TABLE answer 
(
    id INT NOT NULL IDENTITY(1,1),
    question_id INT NOT NULL,
    answer VARCHAR(50) NOT NULL
)

(这两个表并不小但我为了简单起见删除了一些列)

问题是我认为拥有与表名相同的字段不符合正确的命名约定。

我想将问题和答案列更改为类似文本的内容,但不幸的是,这是一个保留字,这违反了标准命名约定,此外我还需要在引用时使用[]标记它们。

有关如何命名列或表的任何建议吗?

3 个答案:

答案 0 :(得分:1)

在这种情况下,我更喜欢问题作为表名,问题作为列名。 从id = x有意义的问题中选择问题。代替 从问题中选择描述或从问题中选择文本或从问题中选择问题。

答案 1 :(得分:1)

首先:TEXT不是保留的SQL关键字。 (至少不是在SQL 2003草案中,我只是在那里查看)。

虽然它是SQL Server中的一种数据类型,当你在谈论列名的括号时,我想这就是你正在使用的。 (括号也是非标准的。标准SQL对其他不可用的列名称使用双引号。)我不会使用使用括号或引号所必需的列名。我认为TEXT不应该造成麻烦。 SQL Server已经宣布他们将在以后的版本中删除该类型:https://msdn.microsoft.com/fi-fi/library/ms187993(v=sql.105).aspx

  

将来的版本中将删除ntext,text和image数据类型   Microsoft SQL Server。

无论如何,我经常看到的解决命名冗余的一种方法是为表格提供多个名称,因此您的表格answers会有一列answer。另一种选择是answertextanswer_text。但是,你甚至可以坚持你所拥有的。如果表answer包含列answer并且它不会导致问题,那就不错了。

答案 2 :(得分:0)

查看advantureworks数据库,获取关键列的命名约定

您将获得“ID”字段的命名约定为“TableNameID”

点击下一个链接了解详情Database, Table and Column Naming Conventions?

我知道这个答案应该是一个评论而不是答案,但我没有50个评论的声誉。