数组 (UUID[ ]) 会破坏 1NF 吗?

Bam*_*Bam 7 sql database arrays postgresql

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

原表:

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

新表,包括 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")
);
Run Code Online (Sandbox Code Playgroud)


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

Mur*_*nik 6

简而言之 - 是的。

1NF 定义为:

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

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

  • 如果您可以将其任何值视为奇异值,则它会破坏 1NF。如果你不能,那么将它保存在数组中确实是无关紧要的。 (5认同)