【问题标题】:MySQL Multiple ID reference [duplicate]MySQL多ID参考[重复]
【发布时间】:2017-07-21 05:33:05
【问题描述】:

我有两张表,第一张是品种表

CREATE TABLE `breeds` (
 `breedID` int(11) NOT NULL AUTO_INCREMENT,
 `Name` varchar(50) NOT NULL,
 PRIMARY KEY (`breedID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

第二个表是所有者表

CREATE TABLE `owners` (
 `ownerID` int(11) NOT NULL AUTO_INCREMENT,
 `First` varchar(36) NOT NULL,
 `Last` varchar(36) NOT NULL,
 `breeds` int(11) DEFAULT NULL,
 PRIMARY KEY (`ownerID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

我希望所有者表通过在品种列中显示品种 ID 来反映它拥有的品种,但我希望所有者能够拥有多个品种。我该怎么做?

【问题讨论】:

  • 您需要一个连接表,一个将许多所有者与许多品种联系起来的中间表。
  • 你需要有一个associative table

标签: mysql


【解决方案1】:

对于多对多关系,您需要三个而不是两个表。您需要添加下表:

CREATE TABLE `ownerBreeds` (
 `ownerBreedID` int(11) NOT NULL AUTO_INCREMENT,
 `breedID` int(11) NOT NULL,
 `ownerID` int(11) NOT NULL,
 PRIMARY KEY (`ownerBreedID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

并从owners 表中删除breeds 列。这将允许一个所有者拥有多个品种以及一个品种由多个所有者拥有。

【讨论】:

  • 明智的做法是在breedIDownerID 上添加外键约束。
  • @BenM 会的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 2011-07-16
  • 2012-11-22
  • 1970-01-01
  • 2020-11-02
相关资源
最近更新 更多