我有一个mysql数据库,其中包含一个表,其中包含多个其他表的版本信息。为了链接到同一版本的系列,我有一个version_master表,它包含链接引用的版本系列的主键。我想知道是否有一个更优雅的解决方案,而不需要version_master表。
CREATE TABLE IF NOT EXISTS `version` (
`version_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`version_master_id` int(10) unsigned NOT NULL,
`major` int(10) unsigned NOT NULL DEFAULT '0',
`minor` int(10) unsigned NOT NULL DEFAULT '0',
`patch` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`version_id`));
CREATE TABLE IF NOT EXISTS `version_master` (
`version_master_id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE IF NOT EXISTS `needs_versions` (
`needs_versions_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`name` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
`description` text COLLATE utf8_unicode_ci NOT NULL,
`version_master_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`needs_versions_id`));
答案 0 :(得分:2)
在此示例中,您当然可以删除version_master
表,并使用version_id
和version_master_id
字段的组合作为索引。我想你可以放弃它,因为似乎没有任何东西用外键引用它。
但是,如果您有与每个版本系列相关的其他信息,那么version_master
将是一个好主意。
此外,您正尝试从未定义的列offer_type_id
中创建主键。目前尚不清楚您是否可以将needs_versions
与version_master
逻辑合并。名称本身不是很具描述性。我建议不要在表名中使用动词。
答案 1 :(得分:1)
另一种常见的方法是使用SEQUENCE。
但MySQL似乎不支持它们,至少MySQL manual包含一个关于如何使用一行一列表模拟序列的部分:
创建一个表来保存序列 反击并初始化它:
CREATE TABLE sequence (id INT NOT NULL); INSERT INTO sequence VALUES (0);
使用该表生成序列 像这样的数字:
UPDATE sequence SET id=LAST_INSERT_ID(id+1); SELECT LAST_INSERT_ID();