MySQL внешние ключи несколько ключей для записи - PullRequest
0 голосов
/ 22 августа 2011

Я хочу сделать для стола что-то вроде этого.У меня есть две таблицы: одна с внешним ключом (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 Ответ

1 голос
/ 22 августа 2011

Я думаю, что вы запрашиваете либо отношение «многие ко многим», либо множественные, определенные отношения «один ко многим», поэтому это зависит от использования.

Отношение «многие ко многим» фактически требует промежуточной таблицы, содержащей поле «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)
);

Если вы предпочитаете добавить несколько отношений один-ко-многим, конкретное отношение «причина» должно содержаться в имени внешнего ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...