数据库和表管理

时间:2011-02-08 03:48:42

标签: php sql database

我一直在创建一个网络应用程序,我正在寻求扩展。在我的网络应用程序中,我有一个用户表,其中包括用于跟踪用户是否为管理员的权限,用于页面的动态内容部分的非常小的表,以及用于跟踪网站上“事件”的表。

由于对Web应用程序创建不是很有经验,我不确定专业人员如何为Web应用程序创建数据库和表系统。在我的网络应用程序中,我计划为网站的每个成员甚至是消息传递系统添加更多用户设置。我目前使用PHP与我查询所有命令的MySQL数据库,但如果有必要,我愿意更改任何一个。跟踪内容的最佳监听点是什么,例如人际关系的消息以及每个用户的特定用户设置。我想在任何时候都有多个数据库吗?我想为每个用户创建多个表吗?有关如何完成或应该如何完成的任何信息都会非常有用。

我对这个问题的广泛性感到抱歉,但我一直想改进这个网络应用程序,因为我觉得我对桌面使用的想法与经验丰富的程序员不同。

3 个答案:

答案 0 :(得分:1)

这是我对你的问题似乎很长,希望不是太复杂的回答。我想我已经涵盖了大部分(如果不是全部)你的问题。

对于您的网络应用,您可以拥有一个名为“用户”的用户表,名为“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表可以存储后续的回复。您可以将它全部存储在一个表中,但是根据流量并可能编写递归函数来从一个表中检索所有消息和回复,我认为最简单的两个表方法。

如果我是你,我会用铅笔和纸坐下来,在我的数据库中记下/画出我想跟踪的内容。这样,您就可以在想要存储的内容之间绘制链接,并了解它将如何组合在一起。当我试图想象事物时它会帮助我。

答案 1 :(得分:0)

对于Web应用程序的范围,您不需要多个数据库。但是,您确实需要多个表来有效地存储数据。

对于用户设置,请始终使用单独的表格。您希望您的“主要”用户表尽可能精简,因为每次用户尝试登录时都会访问(=搜索)。存储ID,用户名,密码(当然是哈希)以及您使用的任何其他字段在验证时需要访问。将所有额外信息放在一个单独的表中。这样,您的登录将只查询较小的表,一旦用户通过身份验证,您就可以使用其ID从辅助表中获取所有其他信息。

消息可能比较棘手,因为它们的数量级更大 - 每个用户可能需要数十或数百个。您需要根据应用程序的逻辑设计表结构。每个用户的表格显然不是一个可行的解决方案,因此请查看常规消息表,但要实现过程以使其保持可管理的大小。一个例子是“存档”超过X天的消息,这会将它们移动到另一个表(如果您的用户不太可能经常访问他们的旧消息,那么该表很有效)。但就像我说的那样,这取决于你的申请。

祝你好运!

答案 2 :(得分:0)

根据Cristian Radu的评论:您需要将数据拆分为不同的表格。精简用户表(实际上应该)每个用户有一个唯一的ID。应在辅助表中重复此(唯一)密钥。然后它将被称为外键。显然,你想要一个独特的钥匙。如果您的用户名可以保证是唯一的(即您要求用户通过他们的电子邮件地址识别),那么您可以使用它。如果用户名是真实姓名(例如,姓名Sirname),那么您没有这种保证,您需要保留一个成为您密钥的用户ID。同样,包含帖子的表格可以(但不一定)有一个字段,其中包含唯一的用户标识,表明是谁编写的。

您可能想要阅读一些关于数据库设计和规范化概念的内容:(http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html)无需陷入困境第n种规范化形式,但它会帮助您在这个阶段需要弄清楚数据库设计。

祝你好运并报告回来; - )