table 违反了哪条规范化规则?
Which normalization rule does this table violate?
我有一个 table executors
列:
id(pk) | order_id | executor_id(ek) | execution_price | created_at | selected
1 1 200 1893883332 NULL
因此,这个 table 包含所有可用的执行者及其价格。
设置执行器后,字段 selected
更改为 TRUE
。
另外我想知道这个模式违反了哪个规范化规则。
我应该创建一个单独的 table 来存储选定的执行程序吗?另外如何在 selected
上设置约束以避免选择某些执行程序?
executor_id
是指外部tableusers.id
。版本是:10.4.22-MariaDB
在 selected
上放置一个检查约束,强制它只有一个值 v。然后对 (order_id, selected)
进行唯一约束。具有相同非 NULL
order_id
但 selected
中的 NULL
值的不同行不会违反唯一性。但是 v 的不同行会。由于检查约束,不可能有另一个值。
CREATE TABLE executors
( -- other columns
order_id integer
NOT NULL,
selected boolean,
-- other constraints
CHECK (selected = 1),
UNIQUE (order_id,
selected));
我有一个 table executors
列:
id(pk) | order_id | executor_id(ek) | execution_price | created_at | selected
1 1 200 1893883332 NULL
因此,这个 table 包含所有可用的执行者及其价格。
设置执行器后,字段 selected
更改为 TRUE
。
另外我想知道这个模式违反了哪个规范化规则。
我应该创建一个单独的 table 来存储选定的执行程序吗?另外如何在 selected
上设置约束以避免选择某些执行程序?
executor_id
是指外部tableusers.id
。版本是:10.4.22-MariaDB
在 selected
上放置一个检查约束,强制它只有一个值 v。然后对 (order_id, selected)
进行唯一约束。具有相同非 NULL
order_id
但 selected
中的 NULL
值的不同行不会违反唯一性。但是 v 的不同行会。由于检查约束,不可能有另一个值。
CREATE TABLE executors
( -- other columns
order_id integer
NOT NULL,
selected boolean,
-- other constraints
CHECK (selected = 1),
UNIQUE (order_id,
selected));