SQL引用外键

时间:2015-09-01 03:54:47

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

我无法使GenreID表上的Album外键生效。谁知道为什么?

CREATE TABLE ArtistBand 
(
     ArtistID INT AUTO_INCREMENT PRIMARY KEY,
     BandName VARCHAR(255) NOT NULL,
     NameOfMembers VARCHAR(255),
     NumberOfMembers INT
);

CREATE TABLE Genre
(
     GenreID INT AUTO_INCREMENT PRIMARY KEY,
     GenreType VARCHAR(255) NOT NULL,
     AlbumID INT,
     FOREIGN KEY(AlbumID) REFERENCES Album(AlbumID)
);

CREATE TABLE Album 
(
    AlbumID INT AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR (255) NOT NULL,
    ReleaseDate DATE NOT NULL,
    Producers VARCHAR (255),
    ArtistID INT,
    GenreID INT,

    FOREIGN KEY(ArtistID) REFERENCES ArtistBand(ArtistID),
    FOREIGN KEY (GenreID) REFERENCES Genre (GenreID)
);

2 个答案:

答案 0 :(得分:1)

删除GenreAlbum之间的循环外键引用。从逻辑上讲,从GenreAlbum的引用无论如何都没有任何意义:)。

CREATE TABLE ArtistBand (
ArtistID INT AUTO_INCREMENT PRIMARY KEY,
BandName VARCHAR(255) NOT NULL,
NameOfMembers VARCHAR(255),
NumberOfMembers INT
);

CREATE TABLE Genre(
GenreID INT AUTO_INCREMENT PRIMARY KEY,
GenreType VARCHAR(255) NOT NULL
);

CREATE TABLE Album (
AlbumID INT AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR (255) NOT NULL,
ReleaseDate DATE NOT NULL,
Producers VARCHAR (255),
ArtistID INT,
GenreID INT,
FOREIGN KEY(ArtistID) REFERENCES ArtistBand(ArtistID),
FOREIGN KEY (GenreID) REFERENCES Genre (GenreID)
);

答案 1 :(得分:0)

如果使用sql server:auto_increment被修改为标识

CREATE TABLE ArtistBand (
ArtistID INT identity(1,1) PRIMARY KEY,
BandName VARCHAR(255) NOT NULL,
NameOfMembers VARCHAR(255),
NumberOfMembers INT
);

CREATE TABLE Genre(
GenreID INT identity(1,1) PRIMARY KEY,
GenreType VARCHAR(255) NOT NULL
);

CREATE TABLE Album (
AlbumID INT identity(1,1) PRIMARY KEY,
Name VARCHAR (255) NOT NULL,
ReleaseDate DATE NOT NULL,
Producers VARCHAR (255),
ArtistID INT,
GenreID INT,
FOREIGN KEY(ArtistID) REFERENCES ArtistBand(ArtistID),
FOREIGN KEY (GenreID) REFERENCES Genre (GenreID)
);