Моя таблица называется Screens. Имеет две таблицы с внешним ключом
зависимостей. Они называются Topic и ScreenTypes. Обе таблицы
очень маленький, и у них есть только 2 столбца (идентификатор и имя).
Таблица Screens содержит столбцы TopicId и ScreenTypeId, а также
пара других столбцов. Все три таблицы имеют первичные индексы.
За последние несколько недель все работало нормально.
Исходя из вышеизложенного и ваших комментариев, это выглядит так, чтобы создать таблицу Screens, таблицу Topics и таблицу ScreenTypes и дополнительно заполнить таблицы некоторыми данными: -
DROP TABLE IF EXISTS Screens;
CREATE TABLE IF NOT EXISTS Screens (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
Video TEXT NOT NULL,
TopicId INTEGER NOT NULL,
Instructions TEXT,
ScreenTypeId INTEGER,
SortOrder INTEGER DEFAULT (10),
Image TEXT,
NewColumn INTEGER,
FOREIGN KEY (TopicId) REFERENCES Topics (id),
FOREIGN KEY (ScreenTypeId) REFERENCES ScreenTypes (id)
)
;
DROP TABLE IF EXISTS Topics;
CREATE TABLE IF NOT EXISTS Topics (ID INTEGER PRIMARY KEY, name TEXT);
DROP TABLE IF EXISTS ScreenTypes;
CREATE TABLE IF NOT EXISTS ScreenTypes (ID INTEGER PRIMARY KEY, name TEXT);
INSERT INTO Topics (name) VALUES ('Topic1'),('Topic2'),('Topic3'),('Topic4');
INSERT INTO ScreenTypes (name) VALUES ('SreenType1'),('ScreenType2'),('ScreenType3'),('ScreenType4');
INSERT INTO Screens (Video,TopicId,Instructions,ScreenTypeId,Image,NewColumn) VALUES
('Video1',2,'do this 001',3,'Image1','blah'),
('Video2',2,'do this 002',3,'Image2','blah'),
('Video3',1,'do this 002',1,'Image3','blah'),
('Video4',3,'do this 004',4,'Image4','blah'),
('Video5',4,'do this 005',1,'Image5','blah')
;
Затем я попытался добавить в таблицу Screens новый столбец с именем
ScreenNumber. Новый столбец числовой и не имеет ограничений
бы то ни было. Но когда я попытался зафиксировать изменение в схеме, я
получена ошибка ограничения внешнего ключа.
Следующие работы: -
ALTER TABLE Screens ADD COLUMN ScreenNumber INTEGER DEFAULT 100;
согласно: -
ALTER TABLE Screens ADD COLUMN ScreenNumber INTEGER DEFAULT 100
OK
Time: 0.083s
, а затем с помощью следующего
SELECT * FROM Screens;
Результат: -

- Как видно, конфликтов ограничений FK не было, столбец добавлен и применено значение по умолчанию 100.
Я подозреваю, что ваши проблемы с FK Constraints заключаются в том, что вы постепенно пытаетесь исправить проблемы.
Сначала (предположительно) вы пытаетесь изменить (переименовать) таблицу Screens, но не можете, поскольку ограничение Fk конфликтует с таблицей Fields. Затем вы пытаетесь изменить таблицу полей, но при этом у вас возникают конфликты FK из-за: -
Если команда «ALTER TABLE ... RENAME TO» используется для переименования таблицы, которая является родительской таблицей одного или нескольких ограничений внешнего ключа, определения ограничений внешнего ключа изменяются для ссылки на родительскую таблицу с помощью его новое имя. Текст дочернего оператора CREATE TABLE или операторов, хранящихся в таблице sqlite_master, изменен, чтобы отразить новое имя родительской таблицы.
Поддержка внешнего ключа SQLite - 5. Команды CREATE, ALTER и DROP TABLE
Конечно, если согласно вашему описанию вы хотите добавить только столбец, тогда ALTER TABLE Screens ADD COLUMN ScreenNumber INTEGER
(со значением по умолчанию, если требуется) работает без необходимости переименовывать таблицы.