簡體   English   中英

數據庫和表管理

[英]Database and Table Management

我一直在創建一個Web應用程序,並且正在尋求擴展。 在我的Web應用程序中,我有一個供用戶使用的表,該表包含用於跟蹤用戶是否為管理員的特權,用於頁面的動態內容部分的很小的表以及用於跟蹤網站上“事件”的表。

由於不具備Web應用程序創建的豐富經驗,因此我不確定專業人員將如何為Web應用程序創建數據庫和表系統。 我計划在Web應用程序中為網站的每個成員甚至是消息系統添加更多的用戶設置。 我目前將PHP與查詢所有命令的MySQL數據庫一起使用,但是如果需要,我願意更改其中的任何一個。 跟蹤內容(例如人際關系消息以及每個用戶的特定用戶設置)的最佳途徑是什么? 我想隨時擁有多個數據庫嗎? 我是否想為每個用戶有多個表? 關於如何完成或應該完成的任何信息將非常有幫助。

我對這個問題的廣泛性感到抱歉,但是我一直想對這個Web應用程序進行改革,因為我覺得我對表使用的想法與有經驗的程序員所提出的想法並不一致。

這是我看似冗長的答案,希望對您的問題不太復雜。 我想我涵蓋了大部分(如果不是全部)您的查詢。

對於您的Web應用程序,您可以有一個名為“ Users”的用戶表,一個名為“ UserSettings”或類似描述的設置表以及“ PrivateMessages”表中的消息。 然后可能會有子表存儲所需的額外數據。

用戶安全性是設計和實現的棘手事情。 您是要按組進行操作(如果您打算擁有多個用戶,以便更輕松地管理其權限),還是由於用戶群較小而僅進行單獨分配? 僅出於安全性考慮,您最終將獲得4個表:

Users
UserSettings
UserGroups
UserAssignedGroups

這樣,您就可以正確分離用戶信息,設置,可以分配給他們的組以及分配給他們的內容。 這為您提供了相當大的靈活性,並符合歸一化標准(如DrSAR所述)。

對於您的消息,不要將其與用戶名一起存儲,而應與用戶ID一起存儲。 例如,在PrivateMessages表中,您將具有MessageID,SenderUserID,RecipientUserID,Subject,Body和DateSent來存儲最基本的信息。 這樣,當用戶想要檢查其收到的消息時,可以查詢該表,其中說:

   SELECT * FROM PrivateMessages WHERE RecipientUserID = 123556

您的郵件的表格列表可能是這樣的:

PrivateMessages
MessageReplies

PrivateMessages表可以存儲父消息,然后MessageReplies表可以存儲后續的答復。 您可以將它們全部存儲在一個表中,但根據流量以及編寫遞歸函數以從一個表中檢索所有消息和答復的情況,我覺得最簡單的是兩表方法。

如果我是你,我會拿着鉛筆和紙坐下來,寫下/畫出我想在數據庫中跟蹤的內容。 這樣,您便可以在要存儲的內容之間繪制鏈接,並查看它們如何結合在一起。 當我嘗試形象化事物時,它對我有幫助。

對於您的Web應用程序,您不需要多個數據庫。 但是,您確實需要多個表才能有效地存儲數據。

對於用戶設置,請始終使用單獨的表。 您希望您的“主要”用戶表盡可能精簡,因為每次用戶嘗試登錄時都將訪問(=搜索)該表。存儲ID,用戶名,密碼(當然是哈希值)以及您需要的任何其他字段驗證時需要訪問。 將所有其他信息放在單獨的表中。 這樣,您的登錄名將僅查詢較小的表,並且在對用戶進行身份驗證之后,您可以使用其ID從輔助表中獲取所有其他信息。

消息可能比較棘手,因為它們的數量級更大-每個用戶可能有數十或數百個消息。 您需要根據應用程序的邏輯設計表結構。 為每個用戶創建一個表顯然不是可行的解決方案,因此請使用通用消息表,但要執行一些程序以使其保持在可管理的大小。 一個示例是“存檔”早於X天的郵件,這會將它們移動到另一個表中(如果您的用戶不太可能經常訪問其舊郵件,則該表將很有效)。 但是就像我說的,這取決於您的應用程序。

祝好運!

遵循Cristian Radu的評論:您需要將數據拆分到不同的表中。 精益用戶表將(實際上應該)為每個用戶提供一個唯一的ID。 此(唯一)鍵應在輔助表中重復。 然后將其稱為外鍵。 顯然,您想要一個唯一的密鑰。 如果可以確保您的用戶名是唯一的(即,您要求用戶通過其電子郵件地址標識),則可以使用該用戶名。 如果用戶名是真實姓名(例如,名字“ Sirname”),那么您就沒有這個保證,您需要保留一個用戶ID,它成為您的密鑰。 同樣,包含您的帖子的表可以(但不必)具有一個字段,該字段包含唯一的用戶ID,以指示是誰撰寫的,等等。

您可能需要閱讀一些有關數據庫設計和規范化概念的信息:(http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html) -標准化的形式,但是它將在需要確定數據庫設計的現階段提供幫助。

祝你好運,並回報;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM