【问题标题】:How to avoid duplicating a table name and a field in SQL如何避免在 SQL 中重复表名和字段
【发布时间】:2016-09-25 16:25:14
【问题描述】:

这是一个关于 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
)

(这两个表并没有那么小,但为了简单起见,我删除了一些列)

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

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

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

【问题讨论】:

  • “名称”和“描述”往往是相当流行的替代方案。如果你在 sql server 中编写,通常可以很聪明地将关键字理解为表名而不需要方括号,但是单词仍然会突出显示
  • 也许 question.content & answer.content ?最好避免需要括号的字段名称。 (-> 没有空格或标准 sql 关键字)

标签: sql naming-conventions naming


【解决方案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】:

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

    【讨论】:

      【解决方案3】:

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

      你会得到“ID”字段的命名约定是“TableNameID”

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

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

      【讨论】:

        猜你喜欢
        • 2015-01-28
        • 2018-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-06
        • 1970-01-01
        • 2021-12-25
        • 1970-01-01
        相关资源
        最近更新 更多