创建组合sql表



我正试图在VS的数据库中创建一个具有room和userid列的sql表,但只有当userid存在于users表中并且room存在于rooms表中时,sql才会接受您的输入

允许:

Users table:
Userid
1
2
3

RoomUsers表:

Room ----- User
1          1
2.         1
1.         2
1.         3
2.         3

不允许:

Users table:
Userid
1
2

RoomUsers表:

Room ----- User
1          4

普通外键不起作用,因为它只允许每个索引中的一个,而不允许多个,我怎么能允许我需要发生的事情发生呢?

(这将是一个混乱的评论(可能我们遇到了XY问题。你描述的事情只需使用外键即可解决。即:

CREATE TABLE users (id INT IDENTITY NOT NULL PRIMARY KEY, ad VARCHAR(100));
CREATE TABLE rooms (id INT IDENTITY NOT NULL PRIMARY KEY, ad VARCHAR(100));
CREATE TABLE room_user
(
RoomId INT NOT NULL
, UserId INT NOT NULL
, CONSTRAINT PK_roomuser
PRIMARY KEY(RoomId, UserId)
, CONSTRAINT fk_room
FOREIGN KEY(RoomId)
REFERENCES dbo.rooms(id)
, CONSTRAINT fk_user
FOREIGN KEY(UserId)
REFERENCES dbo.users(id)
);
INSERT INTO dbo.users(ad)
OUTPUT
Inserted.id, Inserted.ad
VALUES('RayBoy')
, ('John')
, ('Frank');
INSERT INTO dbo.rooms(ad)
OUTPUT
Inserted.id, Inserted.ad
VALUES('Room1')
, ('Room2')
, ('Room3');
INSERT INTO dbo.room_user(RoomId, UserId)VALUES(1, 1), (1, 2), (2, 3);
-- won't allow
INSERT INTO dbo.room_user(RoomId, UserId)VALUES(999, 888);

最新更新