我想建立如下的数据库场景:MySQL的 - 引用一个外键的多种可能的主键
CREATE TABLE IF NOT EXISTS `points` (
`po_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`po_north` INT,
`po_east` INT,
PRIMARY KEY (`po_id`),
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `lines`(
`li_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`li_from` INT NOT NULL,
`li_to` INT NOT NULL,
PRIMARY KEY (`li_id`),
FOREIGN KEY (`li_from`) REFERENCES points(`po_id`),
FOREIGN KEY (`li_to`) REFERENCES points(`po_id`),
) ENGINE=InnoDB;
现在我想建立第三个表,那疮喜欢谁创造了一些元数据或改变的一个点或线:
CREATE TABLE IF NOT EXISTS `metadata` (
`me_type` ENUM('point','line') NOT NULL,
`me_type_id` INT UNSIGNED NOT NULL,
`me_permissions` VARCHAR(255) NOT NULL,
`me_created_by` INT UNSIGNED NOT NULL,
`me_created_on` DATETIME NOT NULL,
`me_last_modified_by` INT UNSIGNED NOT NULL,
`me_last_modified_by` DATETIME NOT NULL,
) ENGINE=InnoDB;
我的第一种方法是设置一个ENUM
与两种类型(点线)。但问题仍然是,我无法正确地将外键引用到其中一个表。 MySQL中有没有推荐的解决方案?
BTW: me_created_by
和me_last_modified_by
的字段应引用存储一些用户数据的表。
您的表中的点和线可以引用元数据吗,即将外键'metadata_id'放在这两个表中? – 2012-07-16 11:06:10