Я пытаюсь сделать таблицу комментариев в своей базе данных и хранить комментарии в той же таблице. Я бы поставил ограничение внешнего ключа на столбец с именем «ParentId», который будет связан с столбцом CommentId, который является первичным ключом той же таблицы. Если это комментарий родителя, я бы дал ему null для ParentId. Это плохая практика? Если да, то какие способы лучше подходят для решения этой проблемы.Плохая практика создания ограничения внешнего ключа для первичного ключа той же таблицы?
ответ
Это прекрасно. Вам нужно подумать о том, что делать, если комментарий с детьми удаляется. Ограничение FK предотвратит удаление, и общее решение каскадирования удаления здесь не подходит, а также NULL-вывод родительской ссылки. Поэтому вам, вероятно, придется оставить удаленный комментарий и просто очистить содержимое или иначе пометить его как удаленный.
Это не плохая практика, но, как отмечают комментаторы, вы можете столкнуться с проблемами позже.
Поскольку комментарии-на-комментарии составляет логическое дерево, это может быть стоит проверить работу Celko в:
http://www.ibase.ru/devinfo/DBMSTrees/sqltrees.html
очень удобно!
http://msdn.microsoft.com/en-us/library/ms124432(v=sql.100).aspx
Для SQL Server это не плохая практика, см.выша ссылки для работника таблицы definaion и обратитесь к колонку ManagerID, Microsoft использовала этот сценарий в БД образца, снабженный сервером SQL.
Главное, что нужно заботиться - это родительская запись не может быть удалена физически, вам может потребоваться использовать мягкое удаление с использованием флага.
- 1. Ограничения внешнего ключа для столбцов первичного ключа - проблемы?
- 2. Практика первичного ключа
- 3. Назначение внешнего ключа для моего первичного ключа
- 4. ошибка внешнего ключа и первичного ключа
- 5. Ограничения внешнего ключа mysql
- 6. Ошибка ограничения внешнего ключа
- 7. Поле первичного внешнего ключа Hibernate
- 8. Размер ограничения внешнего ключа
- 9. Правило для первичного ключа и внешнего ключа в SQL Server
- 10. Изменение первичного ключа таблицы с ограничениями внешнего ключа в mysql
- 11. Отношения первичного/внешнего ключа данных
- 12. Нарушение ограничения внешнего ключа
- 13. Обновление первичного ключа путем обновления внешнего ключа
- 14. Получить ограничение первичного ключа и внешнего ключа
- 15. PHP Назначение первичного ключа и внешнего ключа
- 16. Первичного ключ VS внешнего ключа
- 17. Ошибка внешнего ограничения ключа
- 18. Добавление ограничения внешнего ключа
- 19. Добавление ограничения внешнего ключа
- 20. Удаление ограничения внешнего ключа
- 21. Ограничения внешнего ключа Innodb
- 22. Добавление ограничения внешнего ключа в таблице vs Изменение таблицы с добавлением ограничения внешнего ключа
- 23. Присвоение значения столбца первичного ключа для столбца внешнего ключа
- 24. Как mysql выделяет длину ключа первичного ключа или внешнего ключа?
- 25. Нарушения первичного ключа ошибки ограничения
- 26. Удаление данных внешнего ключа должно отображать ошибку для первичного ключа
- 27. код скрипта sql для внешнего ключа и первичного ключа
- 28. SQLite первичного ключа Ошибка создания таблицы
- 29. POJO для составного первичного ключа от внешнего ключа
- 30. Внутренние базы данных: реализация ограничения внешнего ключа
Неплохая практика. Просто помните, что многие базы данных не могут выполнять рекурсивные запросы и/или создавать такую структуру таблицы с помощью одной таблицы создания. вам, возможно, придется создать его, а затем изменить его, чтобы добавить FK впоследствии. –
Если вы можете указать родительский идентификатор null, то ограничение внешнего ключа не имеет смысла. Ограничение внешнего ключа состоит в том, чтобы убедиться, что у вас нет «сирот». –
@SteveWellens В случае, если вы хотите убедиться, что нет сирот, если не null? – Matthew