SQL外键约束引用information_schema

时间:2015-04-01 17:11:01

标签: mysql sql foreign-keys information-schema

是否可以在一个表中“约束”列,以任何方式“引用”来自information_schema中的视图的列(它不一定是正确的外键约束,因此是恐慌引号)? - 我需要一种最小的侵入式方法来添加关于现有列数据的任意元数据(例如,添加关于例如shop.cheeses.name n 的值shop.cheeses.id =的“注释”),所以我想到如此定义一个额外的表:

CREATE TABLE shop.metadata (
    `table_schema` VARCHAR(64) NOT NULL,
    `table_name` VARCHAR(64) NOT NULL,
    `column_name` VARCHAR(64) NOT NULL,
    `record_id` INT(11) UNSIGNED NOT NULL,
    `comments` TEXT NOT NULL, /* just to show the purpose of the table */
    PRIMARY KEY (`table_schema`, `table_name`, `column_name`, `record_id`),
    FOREIGN KEY (`table_schema`, `table_name`, `column_name`) REFERENCES information_schema.TABLES(`TABLE_SCHEMA`, `TABLE_NAME`, `COLUMN_NAME`)
);

但是,此语句返回ERROR 1215 (HY000): Cannot add foreign key constraint,大概是因为TABLE_SCHEMATABLE_NAMECOLUMN_NAME未定义为UNIQUE编辑:即使列是唯一的,似乎也不可能,因为您无法在外键约束中引用视图。)

但是,没有其他方法来定义

的要求
  • shop.metadata.table_schema必须包含来自information_schema.TABLES.TABLE_SCHEMA
  • 的现有值
  • shop.metadata.table_name必须包含来自information_schema.TABLES.TABLE_NAME
  • 的现有值
  • shop.metadata.column_name必须包含来自information_schema.TABLES.COLUMN_NAME
  • 的现有值
  • (TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, record_id)的任何四倍都是唯一的?

感谢您的帮助。

0 个答案:

没有答案