外键列是否可以在同一参考表的一行中具有多值?

我正在尝试在MySQL Workbench上创建数据库。如果外键列在一行中具有多值是否合法?我想这样做是因为基于事件类别,将允许用户查看事件与否。同样,一个事件可能有多个事件类别。我知道我可以为事件表创建组合键。但是我想知道是否可以在一行中将多值作为外键?

这是我的事件表:

CREATE TABLE IF NOT EXISTS `mydb`.`EVENT` (
  `eventID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `eventCategory` INT UNSIGNED NOT NULL,
  `name` VARCHAR(45) NOT NULL,
  `eventDescription` VARCHAR(280) NULL,
  `date` DATETIME(1) NOT NULL,
  `locationDescription` VARCHAR(45) NOT NULL,
  `regionID` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`eventID`),
  INDEX `fk_EVENT_category_1_idx` (`eventCategory` ASC) VISIBLE,
  INDEX `fk_EVENT_region_1_idx` (`regionID` ASC) VISIBLE,
  CONSTRAINT `fk_EVENT_region_1`
    FOREIGN KEY (`regionID`)
    REFERENCES `mydb`.`REGION` (`regionID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_EVENT_category_1`
    FOREIGN KEY (`eventCategory`)
    REFERENCES `mydb`.`CATEGORY` (`categoryID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB

我想在一个ro中存储多个类别。我想要这样做是因为基于这些类别,不允许某些用户在应用程序中查看事件。

这是我的类别表:

CREATE TABLE IF NOT EXISTS `mydb`.`CATEGORY` (
  `categoryID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `disorderID` INT UNSIGNED NOT NULL,
  `categoryDescription` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`categoryID`, `disorderID`),
  INDEX `fk_CATEGORY_disorder_1_idx` (`disorderID` ASC) VISIBLE,
  CONSTRAINT `fk_CATEGORY_disorder_1`
    FOREIGN KEY (`disorderID`)
    REFERENCES `mydb`.`DISORDERS` (`disorderID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
评论
  • emagni
    emagni 回复
    我想在一个ro中存储多个类别。我想要这样做是因为基于这些类别,不允许某些用户在应用程序中查看事件。

    不,不要那样。这将使您的模式不规范,并在以后使简单的事情变得完全复杂。

    您在事件和类别之间具有多对多关系。表示这种情况的正确方法是创建第三个表,其中每个事件/类别表都存储在单独的行中。

    就像是:

    create table event_categories (
        event_id int not null,
        category_id int not null,
        primary key (event_id, category_id),
        foreign key(event_id) references event(event_id),
        foreign key(category_id) references category(category_id),
    );