我的数据库表中是否需要外键?

Rom*_*man 1 foreign-keys

我有以下两个用于基本讨论论坛的 mysql 表。第一个表包含主题,第二个表包含对特定主题的回复。我想了解这个数据库设计中的外键概念。我需要在这里添加外键吗?它将如何有用以及如何添加到下表中。谢谢。

--
-- Table structure for table `topics`
--

CREATE TABLE IF NOT EXISTS `topics` (
  `topic_id` int(11) NOT NULL AUTO_INCREMENT,
  `topic_title` varchar(255) NOT NULL,
  `topic_content` text NOT NULL,
  `topic_author_id` int(11) NOT NULL,
  `topic_date` int(10) NOT NULL,
  PRIMARY KEY (`topic_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Table structure for table `replies`
--

CREATE TABLE IF NOT EXISTS `replies` (
  `reply_id` int(11) NOT NULL AUTO_INCREMENT,
  `reply_topic_id` int(11) NOT NULL,
  `reply_content` text NOT NULL,
  `reply_author_id` int(11) NOT NULL,
  `reply_date` int(10) NOT NULL,
  PRIMARY KEY (`reply_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 5

从技术上讲,外键不是必需的 - 但从数据质量的角度来看,强烈建议使用外键。

外键在两个表之间建立关系 - 它定义并确保:

  • 您没有任何子行(在 中replies)引用topics不存在的父行(在 中)(“僵尸数据”)

  • 它确保只要周围仍有子行,您就不会意外删除父行

一般来说,它可以确保数据的质量和完整性- 这是数据库中强烈推荐的属性!