如何创建记录并分配给3个子类型中的1个,每个子类型具有不同的属性

时间:2011-09-23 19:15:56

标签: mysql database database-design database-schema

我正在构建MySQL数据库的模式。我有一个名为'entry'的表(超类型)。条目可以是“照片”,“论文”或“视频”(子类型)。每个子类型都有不同的属性/列。

我当前的设计需要一个条目表,以及三个子类型中的每一个的单独表格。

Schema

子类型通过外键访问条目表的id attribut中的'entries'中的记录。我的问题是,如何修改此设计以限制条目仅与一种类型的子类型相关联。目前,多个子类型可以与相同的条目记录相关联。

2 个答案:

答案 0 :(得分:1)

我不完全确定这是最好的方法,但这里有一个选项:

CREATE TABLE `entries` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `type` enum('photo','essay','video') NOT NULL DEFAULT 'photo',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

我的想法是你在每个名字的条目表中只强制执行一个条目,因此UNIQUE KEY和类型enum实质上会告诉你要加入哪个表。

这可能完全不合适,具体取决于您想要如何使用/从表中选择数据,请注意。

答案 1 :(得分:1)

您无法在SQL中以声明方式轻松执行此操作。你想要做的是在一个主密钥上放置一个CONSTRAINT,这个主密钥在密钥必须存在于entries的所有四个表中共享(没关系,它是一个主密钥)并且它不能存在于其他两个表的 中。第二部分在SQL中没有相应的约束类型。

你基本上被TRIGGER困住了。 (您可以在某些其他引擎中使用包含子查询的CHECK CONSTRAINT执行此操作,但我认为MySQL根本不支持CHECK CONSTRAINTs,并且某些引擎在查看当前行之外不会看到评估CHECK CONSTRAINT)。