Как создать соединительную таблицу и добавить индекс? - PullRequest
0 голосов
/ 04 ноября 2018

Ниже приведен мой код для создания моих двух таблиц, и, поскольку плейлист и песня являются отношениями «многие ко многим», я продолжаю создавать соединительную таблицу ...

CREATE TABLE Playlist (
   Id VARCHAR(20),
   [Name] VARCHAR(50),
   Create_Date DATE,
   Username VARCHAR(20),
   PRIMARY KEY (Id),
   FOREIGN KEY (username) REFERENCES Users (username)
);  

CREATE TABLE Song (
   Id VARCHAR(20),
   Title VARCHAR(50),
   Genre VARCHAR(20),
   [Length] TIME,
   [Language] VARCHAR(20),
   Album_Id VARCHAR(20),
   Company_Id VARCHAR(20),
   PRIMARY KEY (Id),
   FOREIGN KEY (Company_Id) REFERENCES Company (Id),
   FOREIGN KEY (Album_Id) REFERENCES Album (Id)
);

CREATE TABLE Song_Playlist (
   Song_Id VARCHAR(20) NOT NULL,
   Playlist_Id VARCHAR(20) NOT NULL,
   PRIMARY KEY (Song_Id, Playlist_Id), 
   FOREIGN KEY (Song_id) REFERENCES Song (Id) ON DELETE RESTRICT ON UPDATE CASCADE,
   FOREIGN KEY (Playlist_Id) REFERENCES Playlist (Id) ON DELETE RESTRICT ON UPDATE CASCADE  
);

Тем не менее, когда я пытался создать таблицу соединений, я получаю сообщение об ошибке:

Сообщение 156, уровень 15, состояние 1, строка 5 Неверный синтаксис рядом с ключевым словом "ОГРАНИЧЕНИЕ".

Мне интересно, как мне решить эту проблему, а также, если я хочу создать индекс для жанра в таблице песен, как мне это сделать?

1 Ответ

0 голосов
/ 04 ноября 2018

Похоже, вы используете SQL Server (в соответствии с кодом и сообщением об ошибке), но из документов в Интернете

Синтаксис:

| FOREIGN KEY   
    ( column [ ,...n ] )  
    REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]   
    [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
    [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
    [ NOT FOR REPLICATION ] 

НА УДАЛЕНИИ {НЕТ ДЕЙСТВИЙ | КАСКАД | SET NULL | УСТАНОВИТЬ ПО УМОЛЧАНИЮ } Определяет, какое действие происходит со строками в таблице, которые изменяются, если эти строки имеют ссылочную связь и указанная строка удаляется из родительской таблицы. По умолчанию установлено значение NO ACTION.

вот почему вы получаете ошибку Incorrect syntax near the keyword 'RESTRICT', потому что SQL Server не имеет ON DELETE RESTRICT

...