我有两张桌子cinema
和theater
,我希望剧院在cinema
的基础上是唯一的。所以我写了这个:
create table cinema
(
mID int identity primary key
)
create table theater
(
tID int identity,
mID int foreign key references cinema(cID),
primary key (tID,cID)
)
虽然这在影院桌上可以正常使用,但这只会根据tID创建一个新的tID,而不是基于主键。有没有办法可以根据我添加到该影院的其他影院增加tID?
答案 0 :(得分:-2)
对于您在SQL Server中尝试执行的操作,没有任何内置支持。但是你可以使用代码获得相同的效果。这只是你想要把它放在哪里的问题。
选项1:创建一个计算tID新值的触发器。 (这可以是ORM友好的。)
选项2:创建存储过程,不授予您的应用程序插入记录或修改该列的权限。
选项3:使用事务处理客户端的所有内容。 (我不建议这样做,因为它是最慢和最具侵入性的方式,但它很常见。)
选项4:不要这样做,而是在视图中使用RowNumer计算单独的TheaterNumber。这里的缺点是它不稳定,如果剧院被删除就可以改变。
答案 1 :(得分:-2)
通过它的声音,可以在多个影院播放1部电影,1部影院可以播放多部电影。如果这是正确的,那么你有一个多对多的关系,这将需要一个交集表。
CREATE TABLE Movie
(
MovieKey INT IDENTITY(1,1) PRIMARY KEY CLUSTERED
)
CREATE TABLE Theater
(
TheaterKey INT IDENTITY(1,1) PRIMARY KEY CLUSTERED
)
CREATE TABLE MovieTheaterMap
(
MovieKey FOREIGN KEY REFERENCES Movie(MovieKey)
TheaterKey FOREIGN KEY REFERENCES Theater(TheaterKey)
PRIMARY KEY CLUSTERED (MovieKey ASC, TheaterKey ASC)
)
此外,一旦您创建了上面的三个表,您就可以创建一个视图,使其位于三个表的顶部,以便您可以看到所有相关信息。