使用列名作为外键关系的一部分

Using column name as part of foreign key relationship

作为我正在构建的应用程序的一部分,我想将所有下拉菜单的值存储在一个 table 中,其中代表下拉菜单的所有 table/column 组合都可以引用它。

类似于下面的内容:

CREATE TABLE dropdown_def
(
    id int,
    table_id int,
    field_name TEXT,
    value TEXT,
    PRIMARY KEY (id),
    UNIQUE (table_id, field_name, value)
);

INSERT INTO test1.dropdowns (id, table_id, field_name, value)
VALUES (1, 1, 'status', 'active');

CREATE TABLE clients 
(
    id int,
    table_id int,
    status TEXT,
   FOREIGN KEY (table_id, 'status', status) 
        REFERENCES dropdowns (table_id, field_name, value)
);

我尝试了上面的方法,但毫不奇怪,您似乎不能使用实际的列名作为外键约束的一部分。

是否有任何其他方式在 FK 中使用列标识符?

您可以为 FK 存储常量计算列。

CREATE TABLE clients 
(
    id int,
    table_id int,
    status TEXT,
    refcolname text GENERATED ALWAYS AS ('status') STORED, 
    FOREIGN KEY (table_id, refcolname, status) 
        REFERENCES dropdowns (table_id, field_name, value)
);

真的,我会反对这样的设计。为什么要创建一个统一的 table 查找只是为了在引用其部分时遇到麻烦。仅当 EAV 模式绝对不可 table 时才使用它,例如一组查找 tables 将由用户在运行时定义。