【问题标题】:mysql foreign keys multiple keys for an entrymysql外键一个条目的多个键
【发布时间】:2011-08-21 21:05:39
【问题描述】:

我想为这样的桌子做一些事情。 我有两个表,一个带有外键(id),第二个表在其中保存与第一个表对应的数据。 我的问题是,对于每个条目,我可能也有一个或两个更多的组。 是否可以做这样的事情: table1 - id(外键) table2 - entry1 - table1.id1,table1.id2 如果可以的话,你能解释一下我应该怎么做吗?

CREATE  TABLE IF NOT EXISTS `network`.`dbo.networkNodes` (
  `nodeId` INT(11) NOT NULL AUTO_INCREMENT ,
  `nodeName` VARCHAR(45) NULL ,
  PRIMARY KEY (`nodeId`) )
ENGINE = InnoDB


CREATE  TABLE IF NOT EXISTS `network`.`dbo.networkIps` (
  `networkIpId` INT(11) NOT NULL AUTO_INCREMENT ,
  `nodeId` INT(11) NULL ,
  `networkIp` INT(20) NULL ,
  PRIMARY KEY (`networkIpId`) )
ENGINE = InnoDB

【问题讨论】:

  • 您能否通过引用实际表名而不是 table1、table2 来澄清您的问题?由于您为每个表使用了两个名称,因此您的意思是哪个表令人困惑。
  • table1(dbo.networkNodes),table2(dbo.networkIps)

标签: mysql foreign-keys


【解决方案1】:

我认为您要求的是多对多关系或多个已定义的一对多关系,因此取决于用途。

多对多关系实际上需要一个中间表,其中包含一个指向两个表中的每一个的“id”字段:

CREATE TABLE networkNodes (
    nodeId int(11) NOT NULL AUTO_INCREMENT,
    nodeName varchar(45) NULL,
    PRIMARY KEY (nodeId)
);

CREATE TABLE networkIps (
    networkIpId int(11) NOT NULL AUTO_INCREMENT,
    networkIp int(20) NULL,
    PRIMARY KEY (networkIpId)
);

CREATE TABLE netowkNodesIps (
    nodeId int(11) NOT NULL,
    networkIpId int(11) NOT NULL,
    PRIMARY KEY (nodeId, networkIpId)
);

如果您希望添加多个一对多关系,则特定关系“原因”应包含在外键名称中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2012-07-15
    • 2014-02-16
    • 1970-01-01
    • 2020-03-28
    相关资源
    最近更新 更多