У меня есть соотношение:Могу ли я вставить значение в Ограничение внешнего ключа дочерней таблицы, которое еще не создано в родительской таблице в качестве первичного ключа?
- Контакт Таблица - с использованием contactNumber в таблице PK
- сообщений - с помощью MESSAGEID, как PK
- Contact_Message - содержит внешние ключи для многих многих картографирования - используется для заполнения InBox
ie One Contact может иметь много сообщений, отправленных/полученных , а одно сообщение может быть отправлено на многие контакты, но получено только от одного контакта
BUT есть возможность отправки/получения сообщения в/из неизвестного номера, которого нет в таблице контактов базы данных.
Поскольку это отношение много-много, неизвестное число необходимо добавить в таблицу Contact_Message, чтобы я мог запросить его.
то, что я ищу, чтобы просто добавить contactNumber (показать в почтовом ящике как есть) в Contact_Message таблице но двигатель SQLite DB генерирует ошибку ограничение внешнего ключа не удалось так, что contactNumber не найдено Контакты Таблица.
....
Более того: объяснить мое беспокойство, я хочу:
- contactNumber является ВСТАВКА в contact_m2m_message таблице независимо от contactNumber ли это существует в Контакт Стол или нет
- если контакт DELETEd, соответствующие строки/с в contact_m2m_message не следует удалять; отношение contactNumber и MessageId строки должна сохраняться
- , если сообщение было удалено, соответствующие строки/с должно быть удалены в contact_m2m_message
.
есть ли решение этой проблемы? .
Вот код:
CREATE TABLE contact ( contactNumber Numeric PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, contactName TEXT NOT NULL ); CREATE TABLE message ( msgID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, messageContent TEXT NOT NULL ); CREATE TABLE contact_m2m_message ( contactNumber NUMERIC NOT NULL REFERENCES contact (contactNumber) ON DELETE NO ACTION ON UPDATE CASCADE, messageID INTEGER NOT NULL REFERENCES message (msgID) ON DELETE CASCADE ON UPDATE CASCADE );