【问题标题】:Having a main column and two sub-columns in SQL Server tablesSQL Server 表中有一个主列和两个子列
【发布时间】:2011-09-07 23:39:14
【问题描述】:

我有一个关于在 SQL Server 中创建表的小查询。

表格中有 6 列。每列都有一个名称。

在每一列中,我想进一步将其分为两列,分别命名为 Positive 和 Negative。

因此

  • 第 1 列(正 | 负)
  • 第 2 列(正 | 负)...

将是表架构。

我知道创建列然后将名称与它们关联起来很容易,但是如何在创建表时将列分成两部分并将它们命名为子列。

【问题讨论】:

  • 这违反了数据库的第一范式:任何属性(即列)都是原子的,并且只包含一个值(或根本没有值)。一列是一列,它有一个数据类型,它可能有一个值——但你不能“细分”一列......

标签: sql sql-server-2008


【解决方案1】:

如果Column1_PositiveColumn1_Negative 是两个不同的属性,那么您需要两个单独的列来存储这些属性。没有将单个列细分为两个元素。

【讨论】:

  • +1 :简而言之;制作 12 列,而不是 6 列,每列分为 2 列。
【解决方案2】:

根据 Joe Stefanelli 的回答,您不能细分列。

感觉好像您正在尝试将每一列视为它自己的结构或类。您最好将 TABLE 视为一个结构,而将每个 FIELD 视为一个基元。

最接近您要求的是创建 12 列,并适当地命名它们(C1_Pos、C1_Neg、C2_Pos、C2_Neg 等)或创建两个表。

一个表会有它的主键列,然后是两个值列; positivenegative。然后主表中的每个条目都将引用该表。

例如...

CREATE TABLE value_pair (
  id                 INT,
  positive           INT,
  negative           INT,
  PRIMARY KEY (id)
);

CREATE TABLE master (
  id                 INT,
  value_pair_id_1    INT,
  value_pair_id_2    INT,
  value_pair_id_3    INT,
  value_pair_id_4    INT,
  value_pair_id_5    INT,
  value_pair_id_6    INT,
  PRIMARY KEY (id),
  FOREIGN KEY (value_pair_id_1) REFERENCES value_pair (id),
  FOREIGN KEY (value_pair_id_2) REFERENCES value_pair (id),
  FOREIGN KEY (value_pair_id_3) REFERENCES value_pair (id),
  FOREIGN KEY (value_pair_id_4) REFERENCES value_pair (id),
  FOREIGN KEY (value_pair_id_5) REFERENCES value_pair (id),
  FOREIGN KEY (value_pair_id_6) REFERENCES value_pair (id)
);

然而,每当你想获取其中一个值时,你就不得不加入这两个表。如果你想要所有的值,你必须加入 6 次......

SELECT
  *
FROM
  master
INNER JOIN
  value_pair    AS [VP1]
    ON master.value_pair_id_1 = [VP1].id
INNER JOIN
  value_pair    AS [VP2]
    ON master.value_pair_id_2 = [VP1].id
INNER JOIN
  value_pair    AS [VP3]
    ON master.value_pair_id_3 = [VP1].id
INNER JOIN
  value_pair    AS [VP4]
    ON master.value_pair_id_4 = [VP1].id
INNER JOIN
  value_pair    AS [VP5]
    ON master.value_pair_id_5 = [VP1].id
INNER JOIN
  value_pair    AS [VP6]
    ON master.value_pair_id_6 = [VP1].id


就我个人而言,我只会使用 12 列...

【讨论】:

    猜你喜欢
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多