2010-10-15 121 views
1

我正在嘗試爲我們的管理員實施內部聊天系統,但我對數據庫設計並不太確定。到目前爲止,我有這個(下面),但希望驗證和/或改進建議。內部管理員聊天系統的數據庫設計

Employees { 
    EmployeeId (smallint) 
    // ... 
} 

Chat { 
    ChatId (int) 
    Stamp (datetime) // Obsolete, ignore... 
} 

ChatEmployees { 
    ChatEmployeeId (int) // Or bigint? 
    ChatId (int) -> Chat.ChatId 
    EmployeeId (smallint) -> Employees.EmployeeId 
} 

Messages { 
    MessageId (int) // Or bigint? 
    AuthorId (smallint) -> Employees.EmployeeId 
    ChatId (int) -> Chat.ChatId 
    Text (varchar(512)) 
    Stamp (datetime) 
} 

所以,這就是我到目前爲止,但我不知道它是否「足夠」。將與數據庫交互的應用程序使用ASP.NET MVC 2和Linq to SQL構建。

在此先感謝您的任何建議!

+0

如果每封郵件都有時間戳,爲什麼'Chat'需要一個? – 2010-10-15 02:49:21

+0

因爲我不確定,所以我在'Chat'中加了'Stamp'。我也在辯論它的需求......思考它,這可能是無用的,因爲我會有「開始」和「結束」'消息'的郵票。 – Gup3rSuR4c 2010-10-15 02:52:29

回答

2

ChatEmployees表似乎有點多餘。除非你需要記錄某人正在聊天,但從來沒有說過任何話我會放棄它。

回覆:Message.text
我認爲,「文字」,因爲它被用作SQL數據類型可能是一個保留字。可能想避免這個名字。

此外,varchar 512似乎是一種任意數量的字符以允許消息,爲什麼奇數?你是否因爲某種原因而選擇它是因爲它是2的冪次?

+0

現在你提到它了,「ChatEmployees」是多餘的,不必要的。 「文本」其實不是一個保留關鍵字,我有一個'Notes'表,它使用「文本」作爲一個字段,SQL對此並不生氣。至於字段長度,我只是把512作爲一個數字,所以我可以寫我的例子,不知道什麼是合適的... – Gup3rSuR4c 2010-10-15 03:26:06

+0

是的,我做了一些雙重檢查,你說的正確的文本沒有被保留。不過,我仍然建議避開它,因爲它可能會導致與該類型的混淆。只是我的個人意見,但不是一個硬性規定。 – JohnFx 2010-10-15 03:28:08

+0

你可能是對的,但是我喜歡它,因爲當我爲應用程序編寫代碼時,我做了一個像'<%= Note.Text%>的引用,它只是「感覺不錯」。但是,這是我的看法。 :) – Gup3rSuR4c 2010-10-15 03:31:11