Следует ли сделать самоссылающийся столбец таблицы внешним ключом?
-
05-07-2019 - |
Вопрос
Например, для создания иерархии категорий вы используете столбец «parent_id», который указывает на другую категорию в той же таблице.
Должен ли это быть внешний ключ?Каковы будут недостатки/преимущества?
Решение
Да.Гарантирует, что у вас нет потерянной записи (запись без родительского элемента), и в зависимости от использования, если вы определяете каскадное удаление, при удалении родительского элемента все его дочерние элементы также будут удалены.
Недостаток будет небольшим снижением производительности, как и любой другой внешний ключ.
Другие советы
Да, ты должен.Если у вас есть атрибут в отношении базы данных, который служит первичным ключом другого отношения в той же базе данных, вам следует сделать его FK.
Вы будете наслаждаться преимущества, связанные с внешними ключами:
- При правильном построении отношений ограничения внешнего ключа усложняют программисту внесение несогласованности в базу данных.
- Централизация проверки этих ограничений сервером базы данных делает ненужным выполнение этих проверок на стороне приложения.Это исключает возможность того, что разные приложения могут проверять ограничения по-разному.
- Использование каскадных обновлений и удалений может упростить код приложения.
- Правильно разработанные правила внешнего ключа помогают документировать отношения между таблицами.
Недостатки:
- Если вы определяете внешние ключи, иногда сложнее выполнять массовые операции.
- Возможно, это подразумевает большее использование диска и небольшое снижение производительности.
Да, ты должен.
Преимущества (как для любого внешнего ключа):
- Гарантирует, что родительский_id ссылается на реальную строку в таблице.
- Предотвращает случайное удаление родителя, у которого есть дочерние элементы, или гарантирует, что удаление будет каскадным и приведет к удалению и дочерних элементов.
- Предоставляет информацию, которую оптимизатор может использовать.
Я не могу вспомнить каких-либо реальных недостатков.
Да, вы должны сделать его внешним ключом.
Преимуществом будет лучшая модель данных с меньшей избыточностью.