2011-08-21 72 views
-2

我想做一个像这样的表。 我有两个表的一个外键(id)和第二个表,其中我保存的数据coreponds第一个表。 我的问题是,对于每个条目,我可能有一个或两个甚至更多的组也属于。 是否可以这样做: table1 - id(外键)table2 - entry1 - table1.id1,table1.id2 如果它是可行的,你能解释我应该怎么做?mysql外键一个条目的多个键

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 
+0

你能否通过引用实际的表名来说明你的问题,而不是table1,table2?由于每个表格使用两个名称,因此您在哪个表格中表达了疑惑。 – Flimzy

+0

table1(dbo.networkNodes),table2(dbo.networkIps) – Bogdan

回答

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) 
); 

如果你宁愿添加多个一到多关系中,具体关系'原因'应该包含在外键的名称中。

+0

+1好答案! – Bohemian