mysql - 在这个 mysql 示例中是否需要一个只有一列的主表?

标签 mysql database-design

我有一个 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`));

最佳答案

在此示例中,您当然可以消除 version_master 表并使用 version_idversion_master_id 字段的组合作为索引。我认为你可以放弃它,因为似乎没有任何东西用外键引用它。

但是,如果您有与每个版本系列相关的其他信息,那么拥有 version_master 将是一个好主意。

此外,您正尝试从未定义的列 offer_type_id 中创建主键。目前尚不清楚您是否可以在逻辑上将 needs_versionsversion_master 合并。这个名字本身并不是很具有描述性。我建议不要在表名称中使用动词。

关于mysql - 在这个 mysql 示例中是否需要一个只有一列的主表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3953267/

相关文章:

mysql - 如何在POST body的基础上创建动态插入语句

SQL数据库设计

mysql - 创建餐厅菜单时我应该使用 has_many through 还是 habtm 关联?

sql - UPDATE ON CONFLICT 查询时发生 NOT NULL 约束冲突

php - 我想改进非常具体的 MySQL 查询

java - 数据库中的随机值

Java、MySQL 连接被输入数据终止

mysql - sql 更新表 mysql 从 oracle 调用,尽管 dg4odbc 不工作

database - 游标与重复代码/逻辑

php - 在每次页面加载时从数据库序列化数据读/写不好吗?