使用列名作为外键关系的一部分
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 将由用户在运行时定义。
作为我正在构建的应用程序的一部分,我想将所有下拉菜单的值存储在一个 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 将由用户在运行时定义。