如何建立ISA类的模型?
“Persoon”是“Student”或“Docent”,如何在MySQL中建模?
我试着用2个字段创建一个Persoon类,然后您可以将学生/文档的ID放在正确的字段中。另一个是零。

CREATE TABLE IF NOT EXISTS `Docent` (
  `docent_id` int(4) unsigned NOT NULL AUTO_INCREMENT,,
  PRIMARY KEY (`docent_id`),
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

CREATE TABLE IF NOT EXISTS `Persoon` (
  `naam` varchar(50) NOT NULL,
  `email` varchar(50) NOT NULL,
  `wachtwoord` varchar(100) NOT NULL,
  `student_id` int(4) unsigned DEFAULT NULL,
  `docent_id` int(4) unsigned DEFAULT NULL,
  PRIMARY KEY (`email`),
  KEY `email` (`email`),
  KEY `student_id` (`student_id`),
  KEY `docent_id` (`docent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

CREATE TABLE IF NOT EXISTS `Student` (
  `student_id` int(4) unsigned NOT NULL AUTO_INCREMENT,
  `studentnummer` int(20) NOT NULL,
  `niveau` int(2) NOT NULL,
  `notities` varchar(200) NOT NULL,
  PRIMARY KEY (`student_id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

当添加外键时,如下所示,我得到一个#1452错误。我查了一下,但没有找到解决办法。
ALTER TABLE  `Persoon` ADD CONSTRAINT  `Persoons_student_id` FOREIGN KEY (  `student_id` ) REFERENCES  `software`.`Student` (`student_id`) ON DELETE CASCADE ON UPDATE CASCADE ;
ALTER TABLE  `Persoon` ADD CONSTRAINT  `Persoons_docent_id` FOREIGN KEY (  `docent_id` ) REFERENCES  `software`.`Docent` (`docent_id`) ON DELETE CASCADE ON UPDATE CASCADE ;

出现此错误:
#1452 - Cannot add or update a child row: a foreign key constraint fails (`software`.<result 2 when explaining filename '#sql-c0_54eea'>, CONSTRAINT `Persoons_student_id` FOREIGN KEY (`student_id`) REFERENCES `Student` (`student_id`) ON DELETE CASCADE ON UPDATE CASC)

最佳答案

您是在反向操作-来自“specific”表的外键应该引用“general”表。
在您的案例中:Docent应该引用PersonStudent也应该引用Person,类似于:

CREATE TABLE IF NOT EXISTS Person (
  person_id int(4) unsigned AUTO_INCREMENT,
  -- Other fields...
  PRIMARY KEY (person_id)
);

CREATE TABLE IF NOT EXISTS Student (
  student_id int(4) unsigned,
  -- Other fields...
  PRIMARY KEY (student_id),
  FOREIGN KEY (student_id)
    REFERENCES Person (person_id)
    ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE IF NOT EXISTS Docent (
  docent_id int(4) unsigned,
  -- Other fields...
  PRIMARY KEY (docent_id),
  FOREIGN KEY (docent_id)
    REFERENCES Person (person_id)
    ON DELETE CASCADE ON UPDATE CASCADE
);

插入新学员:
首先将一行插入Person并获得生成的person_id(例如viaLAST_INSERT_ID)。
而不是在将行插入student_id时对Student使用相同的值。
同样的,也适用于医生。

10-08 17:33