【问题标题】:Does an Array (UUID[ ]) break 1NF?数组 (UUID[ ]) 是否会破坏 1NF?
【发布时间】:2013-12-21 15:27:59
【问题描述】:

我的问题是包含一个包含 UUID 数组的字段是否会破坏 Normal Form,在包含该数组之前在 NF 中的表中?

原表:

CREATE TABLE Floor
(
    "Floor-ID" uuid NOT NULL,
    "Floor-Floor" smallint NOT NULL,
    "Floor-Desc" varchar(300),
    CONSTRAINT "Floor-PK" PRIMARY KEY ("Floor-ID")
);

新建表,包括 UUID 数组:

CREATE TABLE Floor
(
    "Floor-ID" uuid NOT NULL,
    "Floor-Floor" smallint NOT NULL,
    "Floor-Desc" varchar(300),
    "Floor-Room-IDs" uuid[] NOT NULL,
    CONSTRAINT "Floor-PK" PRIMARY KEY ("Floor-ID")
);


包含 uuid[] 是否会破坏范式?
(理论上,相同的 UUID 可以存在于多行的多个 UUID 数组中。)

【问题讨论】:

    标签: sql arrays database postgresql


    【解决方案1】:

    简而言之 - 是的。

    1NF 定义为:

    如果每个属性的域仅包含原子值,并且每个属性的值仅包含来自该域的单个值,则关系处于第一范式。

    换句话说,任何字段都不应该包含本身就是集合(或数组,就此而言)的元素。

    【讨论】:

    • 如果一个 UUID 数组被认为是域中的“单个值”,那完全没问题。这取决于上下文。
    • 如果您可以将其任何值视为奇异值,则它会破坏 1NF。如果你不能,那么把它放在一个数组中确实是无关紧要的。
    猜你喜欢
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    相关资源
    最近更新 更多