2008-12-14 44 views
1

我有一個評論系統在我們的數據庫。就像stackoverflow - >每個帖子都有一個評論列表。 KEWL。我需要在此表上使用特殊的數據庫約束嗎?

匿名的人也可以添加評論或註冊用戶。

在我的表,我想有以下幾點:

  • 用戶ID INT NULLABLE
  • AnonymousNickname VARCHAR(100)NULLABLE
  • AnonymousEmail VARCHAR(200)NULLABLE

現在它只能是一個或另一個。你要麼註冊要麼你沒有註冊。

因此,我應該強制執行一些類型的約束,說其中一個或另一個 ..如果是這樣,如何?

注:數據庫爲Microsoft SQL Server 2008

喝彩!

回答

2

一個簡單的約束是

(Userid is not null and AnonymousNickname is null and AnonymousEmail is null) 
or (Userid is null and AnonymousNickname is not null and AnonymousEmail is not null) 

這將迫使只有一個或要設置的其他。聽起來這是基於你的應用程序的合理性。您決定在數據庫中還是在您的應用程序中執行它取決於您。如果你的應用程序的其他部分依賴於一個硬約束,那麼我可能會在數據庫中強制執行它,並通過代碼中的驗證來檢測它。

+0

我肯定會在應用程序中檢查這個,但我喜歡總是有非常緊密的代碼_and_一個緊的Db,所以我不確定這是否也可以在數據庫中完成。如果是這樣,怎麼樣? – 2008-12-14 05:19:50

+0

tvanfosson的回答是你如何在數據庫中做到這一點 - 在表上創建一個約束,並使用他的代碼... – RedFilter 2008-12-14 05:34:58

0

我不會包含這個約束。您應該重命名匿名姓名字段。當註冊用戶留下評論時,請將他們的用戶名放入姓名字段中。當你列出你的評論時,這可以節省你對用戶表的查詢。另外,如果用戶從用戶表中刪除,他們的評論就會超過他們。

相關問題