Учитывая следующие определения таблиц данных в SQLite версии 3.7.5:SQLite: Howto Вставка значения внешнего ключа в таблице Cross Reference
CREATE TABLE [Books] (
[Title] VARCHAR(125) NOT NULL,
[YearPublished] INT,
CONSTRAINT [CK_YearPublished] CHECK(YearPublished >= 1400));
CREATE TABLE [People] (
[FirstName] VARCHAR(25) NOT NULL,
[LastName] VARCHAR(45) NOT NULL,
[MiddleName] VARCHAR(25),
CONSTRAINT [UQ_PersonName] UNIQUE([FirstName], [LastName], [MiddleName]));
CREATE TABLE [BooksAuthorsXRef] (
[BookID] INT NOT NULL CONSTRAINT [FK_BookID] REFERENCES [Books]([rowid]),
[PersonID] INT NOT NULL CONSTRAINT [FK_PersonID] REFERENCES [People]([rowid]));
Какую команду SQL можно использовать для заполнения значений полей BookID и PersonId в таблицу данных BooksAuthorsXRef, чтобы использовать значения для rowid для определенного заголовка в таблице Books, которые должны быть связаны с rowid в таблице Person для заданного значения LastName, FirstName и MiddleName?
Я уже заполнял таблицу Books одной записью;
INSERT INTO
Books
VALUES
('Stingray Shuffle', 2003);
И таблица Лица была заселена со следующей записью:
INSERT INTO
People
(LastName, FirstName)
VALUES
('Dorsey', 'Tim')
Какую команду SQL бы использовать в SQLite, чтобы определить, что Тим Дорси (Лица ROWID = 1) является автором книга под названием «Stingray Shuffle» в таблице Books (Books rowid = 1)?
Также, на основе определений таблиц данных, есть ли какие-либо изменения, необходимые для того, чтобы добавлять и изменять Книги и Лица, перекрестные справочные записи в таблице данных BooksAuthorsXRef, более управляемыми и более легкими, сохраняя при этом некоторую степень ссылочной целостности?
Заранее благодарим за ваше время, помощь и терпение.
Спасибо, Уилл. Правильно ли я правильно слежу за тем, чтобы в базе данных с именем XRefTemp была записана третья таблица данных, содержащая все столбцы как из существующих таблиц данных Books, так и для того, чтобы вставлять новые записи в BooksAuthorsXRef? И когда я добавляю новую книгу и, если необходимо, запись Person в каждую соответствующую таблицу, мне также нужно будет вставить перекрестную запись в таблицу XRefTemp, прежде чем я смогу обновить BooksAuthorsXRef? – ClockEndGooner
Есть ли способ вставить запись в BooksAuthorsXRef без использования отдельной временной или физической таблицы базы данных, предположив, что я знаю название книги и имя LastName и FirstName автора (Person)? – ClockEndGooner
@ClockEndGooner - да, для массовой загрузки в идеале у вас будет таблица, как вы описали, поскольку что-то еще не позволит вам выполнять поиск в таблице Books/People. Если вы знаете название существующей книги «Книги» и «Первая + Средняя + Последние имена», вам просто нужно использовать второй запрос, который я включил выше. –