Если у меня есть три таблицы:SQL внешних ключей с несколькими таблицами
music_genres
-----------
music_type_id
genres
[other unique fields]
minerals
--------
mineral_id
mineral
[other unique fields]
verbs
-----
verb_id
verbs
[other unique fields]
и они заполняются:
rock
jazz
funk
punk
rock
boulder
stone
shale
rock
wobble
shake
vibrate
Теперь давайте говорить, что я показывал веб-страницу для каждого из этих элементов, каждый из которых использует отдельный шаблон и хранит эту информацию в следующей таблице:
pages
-----
page_id
page_url
template_url
foreign_key_id
с данными, такими как:
/page/music-genres/rock/
/music-genres-template.html
1
/page/verbs/rock/
/verb-template.html
1
/page/minerals/rock/
/mineral-template.html
1
/page/minerals/rock/images/
/mineral-images-template.html
1
шаблонов будут знать, что внешний ключ относится к конкретной связанной таблице, поэтому минеральный шаблон с ноу запросить таблицу минералов для других полей этой таблицы. Однако у меня нет никакой ссылочной целостности. Если камень удаляется из таблицы минералов, я не могу использовать каскадные удаления для удаления строк со страниц, поскольку внешние ключи не уникальны. Я могу думать о многочисленных способов обойти это некрасиво:
- Эмуляция каскадных удалит с триггеров
- Сохранение типа элемента в каждой строке music_types, минералы и глаголы таблицы, и использовать это в ап дополнительный внешний ключ
- Сохранение соответствующего имени таблицы на страницах стол
- Поддержание целостности базы данных с помощью PHP и т.д.
Я думаю, что должен быть лучший способ хранить мои данные или поддерживать целостность базы данных. Есть предположения?
У вас есть некоторые, которые не показывают, что генерирует первичный ключ, к которому относятся эти внешние ключи? Итак, тот же ключ для «скалы» используется во всех трех таблицах? –
Точно. В этом случае колонка автоинкремента MySQL.Сценарий, очевидно, гипотетический, но иллюстрирует, что я не могу полагаться на другой столбец, который будет уникальным во всех трех таблицах, которые могут быть использованы для создания сложного ключа. – jetboy