我一直在尝试用乳房创建一个外键,但我总是得到错误1005。 有人帮帮我!?
create table theater (
name varchar(30) primary key,
nbrseats int not null
) ENGINE=INNODB;
create table reservation (
nbr integer auto_increment,
users_username varchar(30),
cinemashow_showdate date,
movies varchar(30),
nbrseats int not null,
primary key (nbr),
foreign key (nbrseats) references theater(nbrseats),
foreign key (users_username) REFERENCES users(username)
on delete cascade,
foreign key (cinemashow_showdate, movies) references cinemashow(showdate, movie_title)
on delete cascade
) ENGINE=INNODB;
答案 0 :(得分:1)
要成为另一个表中的FOREIGN KEY
,您必须在theater.nbrseats
上创建索引。并且为了能够可靠地引用特定行,因此它应该是UNIQUE
索引。否则,如果您有重复值,则引用表将无法识别它引用的行。即使InnoDB允许您在非唯一索引上创建关系,也可能不是您正在寻找的行为。
有关该位的更多信息,请参阅this question。
create table theater (
name varchar(30) primary key,
nbrseats int not null,
UNIQUE INDEX `idx_nbrseats` (nbrseats)
) ENGINE=INNODB;
对于表FOREIGN KEY
中的其他reservation
定义也是如此,尽管我们没有在此处看到它们的引用表。规则是:
然而,这种问题会对您的设计产生疑问。如果您将多个座位附加到预订中,预订座位数完全是否与剧院中可用的座位数相匹配?这也意味着您不能拥有2个座位数相同的影院。
您可能需要在此处重新考虑您的设计,并可能创建引用FOREIGN KEY
而不是theater.name
的{{1}}。