SQL Server:如何根据主键增加int?

时间:2018-03-30 17:32:23

标签: sql sql-server sequence primary-key identity

我有两张桌子cinematheater,我希望剧院在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?

2 个答案:

答案 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)
)

此外,一旦您创建了上面的三个表,您就可以创建一个视图,使其位于三个表的顶部,以便您可以看到所有相关信息。