【问题标题】:Could a foreign key column has multivalue in one row from the same reference table?外键列是否可以在同一引用表的一行中具有多值?
【发布时间】:2020-04-24 14:43:58
【问题描述】:

我正在尝试在 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

【问题讨论】:

  • 不,这是 N:M 关系。你需要另一个表来持久化它。

标签: mysql sql database database-design innodb


【解决方案1】:

我想在一个 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),
);

【讨论】:

    猜你喜欢
    • 2021-08-17
    • 2023-03-30
    • 1970-01-01
    • 2021-10-24
    • 2016-04-17
    • 2014-11-05
    • 2012-07-12
    • 2021-07-02
    • 2020-12-14
    相关资源
    最近更新 更多