mysql外键用于输入的多个键

时间:2011-08-21 21:05:40

标签: mysql foreign-keys

我想为这样的桌子做点什么。 我有两个表,一个带有外键(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

1 个答案:

答案 0 :(得分: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)
);

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