如何避免重复 table 名称和 SQL 中的字段

How to avoid duplicating a table name and a field in SQL

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

当您的 table 和您的字段都由相同的词或短语描述时,您应该如何命名它们。两人同名可以吗

我的例子:

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

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
)

(两个table不是那么小,但为了简单起见,我删除了一些列)

问题是我不认为与 table 同名的字段不遵循正确的命名约定。

我考虑过将问题和答案列更改为文本之类的内容,但不幸的是,这是一个保留字,并且违反了标准命名约定,除此之外我还必须使用 [] 标签指的是他们。

关于如何命名列或 table 有什么建议吗?

在这种情况下,我更喜欢将问题作为 table 名称,将问题作为列名称。 select 来自 id=x 有意义的问题。代替 select 问题描述或 select 问题文本或 select 问题问题。

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

您会得到 "ID" 字段的命名约定是 "TableNameID"

关注下一个link了解更多详情Database, Table and Column Naming Conventions?

我知道这个答案应该输入为评论而不是答案,但我没有 50 的评论评论。

首先:TEXT不是保留关键字SQL。 (至少在 SQL 2003 年的草案中没有,我刚刚在那里查了一下)。

它虽然是 SQL 服务器中的一种数据类型,而且正如您所说的列名称的括号,我想这就是您正在使用的。 (括号也是非标准的。标准 SQL 使用双引号表示不可用的列名。)我不会使用需要使用括号或引号的列名。不过,我认为 TEXT 不应该造成麻烦。 SQL 服务器已经宣布他们将在未来的版本中删除该类型:https://msdn.microsoft.com/fi-fi/library/ms187993(v=sql.105).aspx

ntext, text, and image data types will be removed in a future version of Microsoft SQL Server.

无论如何,我经常看到的解决命名冗余的一种方法是给 tables 复数名称,所以你的 table answers 会有一列 answer.另一种选择是 answertextanswer_text。然而,你甚至可以坚持你所拥有的。有一个 table answer 包含一个列 answer 是不错的,它不会引起问题。