Как создать обязательное отношение «многие ко многим» в SQLite? - PullRequest
2 голосов
/ 13 марта 2020

Предположим, у меня есть такая схема:

CREATE TABLE Artist (
  ArtistID INTEGER NOT NULL,
  ArtistName TEXT NOT NULL,
  PRIMARY KEY (ArtistID)
);

CREATE TABLE Song (
  SongID INTEGER NOT NULL,
  SongTitle TEXT NOT NULL,
  PRIMARY KEY (SongID)
);

CREATE TABLE SongArtist (
  SongID INTEGER NOT NULL,
  ArtistID INTEGER NOT NULL,
  PRIMARY KEY (SongID, ArtistID),
  FOREIGN KEY (SongID) REFERENCES Song(SongID),
  FOREIGN KEY (ArtistID) REFERENCES Artist(ArtistID)
);

Определяя столбец как NOT NULL Я могу семантически сказать, что наличие значения в нем обязательно. Как бы я сделать обязательным отношение «многие ко многим», но только в одном направлении?

В этой ситуации я имею в виду следующее: Как я могу сказать, что строка Song должна иметь хотя бы одна строка Artist, связанная с ней через таблицу соединений SongArtist? Если бы я представлял песню как объект JSON ниже, это было бы равносильно тому, чтобы сказать, что массив songArtistIds должен иметь длину 1 или больше.

{
  songId: 745194,
  songTitle: "Title",
  songArtistIds: [523214]
}

Однако строка Artist не обязательно должна быть связана с какой-либо строкой Song. У исполнителя может быть 0 или более песен, но у песни должно быть 1 или более исполнителей. Как применить это в SQLite? Кроме того, если ответ заключается в том, что я не могу сделать это в SQLite, то какая альтернатива для встроенного приложения?

...