如果有两个外键,我如何创建一个MySQL表?

时间:2010-03-03 21:22:30

标签: mysql database

使用两个外键创建表的代码是什么?

我有一个USER表和一个PICTURE表。由于USER可以在许多PICTURE中,而且许多PICTURE可以来自USER,因此我需要一个带有两个主键的第三个表。

谢谢你,像往常一样,你对学习新手非常有价值。 :)

2 个答案:

答案 0 :(得分:2)

我不能专门针对mySQL发言,但在我使用过的大多数数据库中,您可以在桌面上放置所需数量的外键。但是你只能有一个主键。带有两个键的第三个表是正确的选择。为其他两个表中的每个表创建一个外键,并为表中的两个ID组成一个主键。

答案 1 :(得分:1)

如果我理解正确,您可能需要执行以下操作:

CREATE TABLE users (
    user_id  INT NOT NULL PRIMARY KEY,
    name     VARCHAR(50) NOT NULL
) ENGINE=INNODB;

CREATE TABLE pictures (
    picture_id  INT NOT NULL PRIMARY KEY,
    filename    VARCHAR(255) NOT NULL,
    posted_by   INT NOT NULL,
    FOREIGN KEY (posted_by) REFERENCES users(user_id)    
) ENGINE=INNODB;

CREATE TABLE users_in_pictures (
    user_id     INT NOT NULL,
    picture_id  INT NOT NULL,
    PRIMARY KEY (user_id, picture_id),
    FOREIGN KEY (user_id) REFERENCES users(user_id),    
    FOREIGN KEY (picture_id) REFERENCES pictures(picture_id)    
) ENGINE=INNODB;

请注意,每张图片都可以由用户发布。事实上,posted_by字段受引用users表的外键约束。

另外,我假设您要标记图片ala-facebook。在这种情况下,您可以使用第三个表,该表使用复合主键(user_id,picture_id),并且这两个字段也被约束到相应的表。