我想在我的數據庫中做一個評論表,並將子註釋存儲在同一個表中。我會在名爲「ParentId」的列上放置一個外鍵約束,該列將被鏈接到作爲同一個表的主鍵的CommentId列。如果它是一個Parent註釋,那麼我會爲ParentId給它null。這是不好的做法嗎?如果是的話,有什麼更好的方法來解決這個問題。在同一個表的主鍵上創建外鍵約束的錯誤做法?
4
A
回答
4
這很好。有一件事你需要考慮的是如果刪除對孩子的評論,該怎麼辦。 FK約束將防止刪除,並且級聯刪除的常見解決方案在此似乎不合適,也不會將父引用填入空值。因此,您可能必須保留已刪除的評論,並清除內容或將其標記爲已刪除。
2
這是不錯的做法,但正如評論者指出的那樣,稍後可能會遇到問題。
由於意見上,評論達的邏輯樹,它可能是值得檢查Celko的工作:
http://www.ibase.ru/devinfo/DBMSTrees/sqltrees.html
非常方便!
1
http://msdn.microsoft.com/en-us/library/ms124432(v=sql.100).aspx
對於SQL Server是不是一個不好的做法,見上面鏈接EMPLOYEE表definaion並參考經理ID列,微軟已經使用此方案中提供了SQL服務器的示例數據庫。
主要需要注意的是父記錄不能物理刪除,您可能需要使用軟標記來刪除。
相關問題
- 1. 外鍵約束的錯誤上創建
- 2. MySQL的 - 無法創建表(錯誤:150) - 外鍵約束
- 3. 2個外鍵創建表時MySQL的語法錯誤主鍵
- 4. 表創建錯誤無法添加外鍵約束
- 5. mysql錯誤1215:無法添加外鍵約束//創建此表
- 6. 錯誤::一個外鍵約束失敗
- 7. Sequelize外鍵約束/創建
- 8. 爲什麼創建引用主鍵字段中同一表的主鍵的外鍵約束
- 9. MySQL的 - 不能外鍵約束創建表錯誤
- 10. 無法在MySQL中創建外鍵約束。錯誤號碼150
- 11. MySQL的 - 外鍵在同一個表的主鍵,錯誤#1452
- 12. 獲得在SQL執行錯誤與外鍵約束創建表
- 13. SQL錯誤外鍵約束
- 14. 外鍵約束錯誤
- 15. 外鍵約束錯誤1005
- 16. MySQL - 外鍵約束錯誤
- 17. 錯誤1215外鍵約束
- 18. 用外鍵創建約束鍵sequelize
- 19. 無法創建外鍵約束
- 20. 無法創建外鍵約束
- 21. 定義在表的同一列上的主鍵約束和唯一約束
- 22. MYSQL創建表,約束,外鍵
- 23. 我不能做一個外鍵約束錯誤
- 24. SQL:創建多個外鍵和約束
- 25. 錯誤「無法添加外鍵約束」
- 26. MySQL的錯誤:創建表時出錯:無法添加外鍵約束
- 27. 一般錯誤:1215不能在表上添加外鍵約束
- 28. Linq to Sql插入衝突「外鍵同一表約束」錯誤
- 29. 創建外鍵約束的SQL Server錯誤
- 30. 如何創建多個引用同一個表的複合外鍵約束?
這不是一個壞習慣。請記住,許多數據庫不能執行遞歸查詢,並且/或者使用一個'create table'創建這樣一個表結構。你可能需要創建它,然後改變它以後添加FK。 –
如果你可以給一個父ID爲null,那麼一個外鍵約束是沒有意義的。外鍵約束是爲了確保你沒有'孤兒'。 –
@SteveWellens在你想確保沒有孤兒的情況下,如果不爲空? – Matthew