一个表中的两列是否可以使用另一个表中同一列的外键?

时间:2014-01-02 23:55:06

标签: mysql sql foreign-keys foreign-key-relationship

我在数据库中有两个表,Person和Pet。

CREATE TABLE Person (
    id INT NOT NULL,
    PRIMARY KEY (id)
)

CREATE TABLE Pet (
    id INT NOT NULL,
    original_owner INT NOT NULL,
    current_owner INT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (original_owner)
        REFERENCES Person(id),
    FOREIGN KEY (current_owner)
        REFERENCES Person(id)
)

我正在尝试引用之前的所有者,以及每只宠物的当前所有者。我也试过

CREATE TABLE Pet (
    id INT NOT NULL,
    original_owner INT NOT NULL,
    current_owner INT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (original_owner, current_owner)
        REFERENCES Person(id, id)
)

CREATE TABLE Pet (
    id INT NOT NULL,
    original_owner INT NOT NULL,
    current_owner INT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (original_owner, current_owner)
        REFERENCES Person(id)
)

但是我收到以下错误:

  

错误代码:1215。无法添加外键约束

这甚至可以实现吗?或者我是否必须创建某种桥接表以适应这种情况?

2 个答案:

答案 0 :(得分:1)

请尝试以下方法:

CREATE TABLE IF NOT EXISTS `pet` (  
  `id` int(11) NOT NULL,  
  `original_owner` int(11) NOT NULL,  
  `current_owner` int(11) NOT NULL,  
  PRIMARY KEY (`id`),  
  KEY `origin` (`original_owner`),  
  KEY `current` (`current_owner`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


ALTER TABLE `pet`  
  ADD CONSTRAINT `pet_ibfk_2` FOREIGN KEY (`current_owner`) REFERENCES `person` (`id`),  
  ADD CONSTRAINT `pet_ibfk_1` FOREIGN KEY (`original_owner`) REFERENCES `person` (`id`);

答案 1 :(得分:0)

问题是我在脚本中定义了表的顺序。我有宠物来到人之前。一旦我把人放在宠物上面就可以了。问题中的例子是我脑子里写的,因为当我发布它时,我没有真正的代码。