Следует ли сделать столбец со ссылкой на внешний стол внешним ключом?
Например, для создания иерархии категорий вы используете столбец "parent_id", который указывает на другую категорию в той же таблице.
Если это внешний ключ? Какими будут преимущества/преимущества?
Ответы
Ответ 1
Да. Убедитесь, что у вас нет сироты (запись без родителя), и в зависимости от использования, если вы определяете каскадное удаление, когда родитель удален, все его дети также будут удалены.
Недостатком может быть небольшое поражение производительности, как и любой другой внешний ключ.
Ответ 2
Да, вам нужно. Если у вас есть атрибут в отношении базы данных, который служит в качестве первичного ключа другого отношения в той же базе данных, вы должны сделать его FK.
Вам понравятся преимущества, связанные с внешними ключами:
- Предполагая правильный дизайн отношений, ограничения внешнего ключа затрудняют программисту введение несогласованности в базу данных.
- Централизация проверки этих ограничений сервером базы данных делает ненужным выполнение этих проверок на стороне приложения. Это исключает возможность того, что разные приложения могут не проверять ограничения таким же образом.
- Использование каскадных обновлений и удалений может упростить код приложения.
- Правильно разработанные правила внешних ключей помогают документировать отношения между таблицами.
Недостатки:
- Если вы определяете внешние ключи, иногда выполнять групповые операции сложнее.
- Возможно, это подразумевает больший объем использования диска и небольшое повышение производительности.
Ответ 3
Да, вы должны.
Преимущества (как для любого внешнего ключа):
- Обеспечивает, чтобы parent_id ссылался на реальную строку в таблице
- Предотвращает случайное удаление родителя с дочерними элементами или гарантирует, что удаление каскадов также удалит дочерние элементы
- Предоставляет информацию, которую оптимизатор может использовать
Я не могу представить никаких реальных недостатков.
Ответ 4
Да, вы должны сделать его внешним ключом.
Преимущества будут лучшей моделью данных с меньшей избыточностью.