2009-10-20 164 views
2

我正在ASP.NET MVC中創建一個討論論壇(各種),並且我有一個要求允許未註冊的訪問者發佈帖子。訪客只需要指定要發佈的別名,並可以選擇提供電子郵件地址和網站網址。數據庫中的未註冊用戶

處理數據庫中未註冊用戶的帖子的最佳做法是什麼?

我有點在數據庫設計一個新手,但這些方案浮現在腦海中:

  1. 插入新的用戶表中的每個崗位未登記的訪客記錄。 (當Posts和Users表中的記錄將具有1對1關係時,會使查詢更容易,但會擴大Users表)
  2. 爲未註冊的用戶創建新表,併爲新的別名 - 電子郵件 - 網址組合創建新條目,重複使用現有的。 (在這種情況下,我將在Posts表中爲RegisteredUserId和UnregisteredUserId有兩個外鍵嗎?)
  3. 直接將UnregisteredAlias,UnregisteredEmail和UnregisteredUrl字段添加到Posts表中。 (非常非規範化,但是這又對我來說似乎是一個乾淨的解決方案。然後,我會使Posts表的UserId字段爲空,並將它設置爲null(對於這些帖子))。
  4. 我還沒有想到的顯而易見的解決方案?

這些解決方案是否會導致映射LINQ To SQL時出現問題?

編輯:

爲了澄清,我需要存儲一個別名(名稱),以及可選的電子郵件地址和網址由未註冊訪問者執行每個崗位。此信息與帖子一起顯示,因此在這種情況下訪客!=匿名。

回答

2

我會用開箱的Membershiphipsystem的ASP.NET。您可以選擇允許匿名用戶在那裏。一旦他們創建了登錄,他們的賬戶屬性就會被遷移。

未註冊的用戶需要一個屬性「UserName」。這隻會用於顯示用戶名。他們將通過匿名用戶ID進行標識。

0

別名的問題在於,如果沒有用戶註冊的形式,另一個用戶將能夠使用相同的別名發佈,從而「接管」他的身份。

我想我可以在用戶表或用戶和帖子之間的1-1映射中設置UserId,並添加第二個表來保存未註冊用戶的Email/Url /(別名)。

1

就我個人而言,我會選擇1,「由未註冊的訪問者在每個帖子的用戶表中插入新記錄。」

爲什麼?那麼,用戶是一個用戶,對吧?他們在您的網站上有註冊的事實成爲該用戶的財產(即您的用戶表中的一個字段)。

這樣做大大簡化了您的數據庫設計,使您可以保持一個標準化的正常數量,並避免您必須在設計中引入非標準化的重複(即A有一個「未註冊的用戶」表和一個「註冊用戶「表我認爲是重複和過度複雜的數據庫實體的設計和關係)。

此外,選項1使您的代碼更簡單,因爲未註冊的用戶希望成爲註冊用戶時。這僅僅是用戶記錄中幾個字段的設置。假設你的數據庫關係在用戶表(或某些此類設計)上與用戶ID主鍵相關的「Posts」表上有一個UserID字段(作爲外鍵)nothing當一個未註冊用戶成爲註冊時用戶,而使用其他選項時,您需要從潛在衆多以前的帖子(選項3)中刪除(空白)字段,或刪除並重新創建多個表中的記錄(選項2)。

(假設,當然,前提是你不希望保留的事實,用戶是未註冊的時候一些以前的帖子寫了!)

+0

他們還沒有註冊,但.... 「有一個要求允許未註冊的訪問者發佈帖子。」 – BIDeveloper 2009-10-20 11:42:51

+0

註冊或未註冊 - 他們是用戶,他們的自然之家是用戶表。 – 2009-10-20 12:07:25

+0

@Jim - 是的,但即使未註冊的用戶也有一些關於它們的信息(Alias,EMail,URL)。除非您想在同一個未註冊用戶的每篇文章中複製此內容,否則最好的辦法是將其存儲在Users表中,並且有一個「標誌」,用於指示Users表中的給定記錄是已註冊用戶還是未註冊用戶。 – CraigTP 2009-10-20 12:10:52

0

有一個用戶名爲「未註冊」(或類似的東西)在你的用戶表中,並有該帳戶擁有匿名職位。

在回答下面CraigRP的評論:

我要麼要求在一個文本框的名稱和其連接到後像一個簽名的底部。或者根本不在乎區分。畢竟,匿名是匿名的。

+0

這是一個解決方案,但卻很難區分多個未註冊/匿名用戶。 – CraigTP 2009-10-20 12:12:05

0

我認爲這是與您的選項3:

的職位表將包括

用戶名(可以爲null) UnregisteredUserID(可爲空)

,然後你的領域的其餘部分。

將填充UserID或Unregistered ID之一。

除非你有一個「註冊新用戶」頁面,否則根本沒有必要將用戶添加到users表中。