Предположим, у меня есть такая схема:
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, то какая альтернатива для встроенного приложения?