这是关于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
)
(这两个表并不小但我为了简单起见删除了一些列)
问题是我认为拥有与表名相同的字段不符合正确的命名约定。
我想将问题和答案列更改为类似文本的内容,但不幸的是,这是一个保留字,这违反了标准命名约定,此外我还需要在引用时使用[]
标记它们。
有关如何命名列或表的任何建议吗?
答案 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
。另一种选择是answertext
或answer_text
。但是,你甚至可以坚持你所拥有的。如果表answer
包含列answer
并且它不会导致问题,那就不错了。
答案 2 :(得分:0)
查看advantureworks数据库,获取关键列的命名约定
您将获得“ID”字段的命名约定为“TableNameID”
点击下一个链接了解详情Database, Table and Column Naming Conventions?
我知道这个答案应该是一个评论而不是答案,但我没有50个评论的声誉。