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_idselected 中的 NULL 值的不同行不会违反唯一性。但是 v 的不同行会。由于检查约束,不可能有另一个值。

CREATE TABLE executors
             ( -- other columns
              order_id integer
                       NOT NULL,
              selected boolean,
               -- other constraints
              CHECK (selected = 1),
              UNIQUE (order_id,
                      selected));

db<>fiddle