如何确定哪个表应该有外键?

时间:2014-10-09 11:35:34

标签: mysql sql

在我的场景中,我们有3个具有1:M关系的表。表格是

Device
Event
Function

每个设备可以有1个或多个功能,以及1个或多个事件。因此,我已经创建了这样的表:

CREATE TABLE IF NOT EXISTS `mydb`.`Function` (
  `functionId` INT(11) NOT NULL,
  `functionType` TEXT NULL,
  PRIMARY KEY (`functionId`))

CREATE TABLE IF NOT EXISTS `mydb`.`Event` (
  `eventId` INT(11) NOT NULL,
  `eventType` TEXT NULL,
  PRIMARY KEY (`eventId`))

CREATE TABLE IF NOT EXISTS `mydb`.`Device` (
  `id` INT(11) NOT NULL,
  `function_Id` INT(11) NOT NULL,
  `event_Id` INT(11) NOT NULL,
   PRIMARY KEY (`id`),
  INDEX `fk_Device_Function_idx` (`function_Id` ASC),
  INDEX `fk_Device_Event1_idx` (`event_Id` ASC),
  CONSTRAINT `fk_Device_Function`
    FOREIGN KEY (`function_Id`)
    REFERENCES `mydb`.`Function` (`functionId`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Device_Event1`
    FOREIGN KEY (`event_Id`)
    REFERENCES `mydb`.`Event` (`eventId`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION))

例如,如果我们有3个设备,那么我们将所有3个设备插入到Devices表中,但是,如果还没有事件,那么我们将什么用于event_Id字段?默认值?

我想到的一个考虑因素是切换事件表,使其包含设备的外键 - 但这不是具有1个或更多设备的事件吗?

在此数据库中完成的多数查询将是给定时间段内所有设备的所有事件(事件表中将省略日期列)。因此,如果设备包含事件的密钥,您将如何获得所有设备的所有事件?

感谢。

0 个答案:

没有答案