Предположим, у меня есть 2 стола: foo и бар.Неудачные внешние ключи - хорошая или плохая практика?
В третьей таблице я хочу хранить различные виды данных, однако каждая строка будет иметь ссылку на любой Foo ИЛИ бар.
Правомерно ли я создать 2 NULL
способные внешние ключи - foo_id и bar_id - в третьей таблице, или это againts принципы проектирования баз данных?
В принципе, я думал, что все внешние ключи должны ВСЕГДА иметь «родительский», поэтому, если я попытаюсь, например, INSERT
строка без согласования первичного ключа (или в этом случае с внешним ключом, установленным на NULL
), я получу ошибку. Nullable FK-s новы для меня, и они чувствуют себя немного отключенными.
Кроме того, какие альтернативы? Лучше ли создавать отдельные таблицы, хранящие одну ссылку? Разве это не создает избыточность?
Ссылки на таблицы?
Помощь.
Я получаю то, о чем вы просите, но для будущей диаграммы UML сказано более 1000 слов. – Yoda
Я стараюсь * избегать * nullable FK's - насколько это практически возможно. Хороший механизм базы данных (выбирайте, подходит ли MySQL в этой категории) не имеет проблем с «лишними» таблицами соединений для представления этого правила множественности. Использование другой таблицы, безусловно, * не * неявно нарушает нормализацию или «правила базы данных», но для этого требуется другой подход к запросам и структуре, хотя я рекомендую преследовать. (Что касается избыточности: для этого должны быть избыточные данные и/или функциональные зависимости, добавление «таблицы ссылок» не означает также.) – user2864740
@ user2864740 Спасибо за это, очень полезно. – lesssugar