Итак, сейчас я пытаюсь провести отношения между 3 разными таблицами, используя sqlite Я относительно новичок в sqlite, но увидел, что вы можете рисовать отношения, используя внешние ключи, тем самым оптимизируя производительность. Так что сейчас здесь мой SQL заявление создать мои таблицы:Отношение к одному внешнему ключу Sqlite
'CREATE TABLE IF NOT EXISTS shifts (
shifts_id primary integer,
shift_base_id integer,
shift_site_id integer)';
'CREATE TABLE IF NOT EXISTS sites (
site_id primary integer,
site_info text,
FOREIGN KEY(site_id) REFERENCES shifts(shift_site_id))';
'CREATE TABLE IF NOT EXISTS bases (
base_id primary integer,
base_info text,
FOREIGN KEY(base_id) REFERENCES shifts(shift_base_id))';
Так что я пытаюсь сделать, это сделать отношения между дочерними таблицами (сайтами и базом) с родительской таблицей (сдвиги) по идентификатору. Проблема, с которой я сталкиваюсь, - это ошибка «несоответствия внешнего ключа». Я где-то читал, что в sqlite вы можете использовать только REFERENCE первичный или уникальный ключ в родительской таблице. Проблема заключается в том, что множественные смены могут совместно использовать одни и те же сайты и базы. Например, base_id может равняться 1234, а несколько сдвигов будут иметь shifts_base_id = 1234.
Также будут случаи, когда base_id в таблице оснований не будет иметь сопоставимую shift_base_id в таблице сдвигов.
Итак, мой вопрос заключается в том, как сослаться на это на многие отношения между несколькими таблицами? И как сделать это отношение опционным.
Спасибо за помощь @Barmar, это имеет смысл и решило большую часть моей проблемы. Другой - делает возможной связь, если это вообще возможно. Поэтому, если shift_base_id не существует в таблице баз данных, это не сработает. –
@JoeKomputer Просто удалите внешние ключи. Весь смысл FK заключается в обеспечении соблюдения отношений; что делает их «необязательными», будет эквивалентно тому, чтобы их не было вообще. –
@ColonelThirtyTwo Я могу просто удалить внешний ключ, но причина, по которой я создаю эти отношения FK, - ускорить запрос SELECT, когда я иду на запрос базы данных WHERE site_id = shift_site_id. Итак, если бы был способ сделать FK факультативным, это было бы полезно в этом смысле? Или, если есть другой способ повысить производительность между таблицами, которые не связаны с FK, я был бы открыт для предложений. –