Хотя я предпочитаю синтаксис, показанный Гордоном, если вам нужен одинарный лайнер, вы можете сжать его как:
CREATE TABLE follows (
userid1 int NOT NULL REFERENCES users ON DELETE CASCADE,
userid2 int NOT NULL REFERENCES users ON DELETE CASCADE,
PRIMARY KEY (userid1, userid2)
);
Обратной стороной этой сокращенной записи является то, что у FK нет имен . Управлять ими в будущем может быть сложно, если вам понадобится удалить или изменить их. Опыт показал мне, что лучше называть их именами, и для этого вам нужно использовать полный синтаксис, например:
CREATE TABLE follows (
userid1 int NOT NULL,
userid2 int NOT NULL,
PRIMARY KEY (userid1, userid2),
CONSTRAINT fk1 FOREIGN KEY (userid1)
REFERENCES users (userid) ON DELETE CASCADE,
CONSTRAINT fk2 FOREIGN KEY (userid2)
REFERENCES users (userid) ON DELETE CASCADE
);
... только для получения идентификаторов fk1
и fk2
.