【发布时间】:2012-07-15 04:59:32
【问题描述】:
我想设置以下数据库场景:
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中是否有针对此类问题的推荐解决方案?
顺便说一句:
me_created_by 和 me_last_modified_by 的字段应引用存储一些用户数据的表。
【问题讨论】:
-
您的表 Points 和 Lines 是否可以改为引用元数据,即在这两个表中都放置一个外键 'metadata_id'?
标签: mysql database-design foreign-keys