mysql - 在 MySQL 中使用 InnoDB 时,显式定义*每个*外键是否很常见?

标签 mysql foreign-keys innodb

我一直在使用 MyISAM,并且没有定义显式的外键关系,直到最近我决定开始担心引用完整性等问题。

我正在开发一个数据库,用于存储战斗事件、战士的统计信息,因此我认为这符合使用 InnoDB 和显式定义外键的标准。

我有一个战士表,其中有多列是外键。我想知道是否建议始终显式定义外键关系,无论表中引用了多少个外键?

特别是,对于这张表,我有:

CREATE TABLE `fights` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `event_id` int(10) unsigned DEFAULT NULL,
  `winner_id` int(10) unsigned DEFAULT NULL,
  `referee_id` int(10) unsigned DEFAULT NULL,
  `championship_match` enum('1','0') DEFAULT NULL,
  `weight_class` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

我计划将 referee_idwinner_idevent_id 设为各自表 id 列的外键。这是要走的路吗?或者,出于性能原因,我应该以关系完整性为代价限制显式定义的外键数量?

最佳答案

永远、永远不要放弃正确的数据,永远。请保持引用完整性。

关于mysql - 在 MySQL 中使用 InnoDB 时,显式定义*每个*外键是否很常见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5468308/

相关文章:

php - ORDER BY RAND() 的性能受到影响吗?

mysql - 如何使用外键禁用 InnoDB 的 MySQL 注释?

mysql - 服务中启动MySQL时出现错误1067

MySQL InnoDB 表在存储过程中锁定

mysql - Amazon RDS 到自定义 MySQL 服务器 InnoDB key 大小

Cron 作业中的 MySQL 事务

mysql - 更新交集表,替代删除->插入

oracle - 为什么 Oracle 在 Oracle Apps/E-Business Suite 中没有外键?

MySQL 错误 1215 : Can not add foreign key constraint

mysql - 在 DBMS 中运行的一系列 SQL/DML/DDL 命令和语法