我想为这样的桌子做点什么。 我有两个表,一个带有外键(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
答案 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”应包含在外键的名称中。