【问题标题】:How to design a multiuser database?如何设计多用户数据库?
【发布时间】:2012-11-29 10:05:23
【问题描述】:

我正在制作一个活动策划网站。在这个网站上,会有很多用户。每个用户都有自己的无菌区。
例如:每个用户都可以创建一个活动和一个客人列表。现在,可能是创建活动的两个人想要邀请同一个人。我希望那个人(客人)在数据库中被创建两次。以下是我的想法:

多个数据库

我会为每个新用户创建一个数据库,每个数据库都有相同的架构。

带前缀的表格

例如,如果谈论的是用户 234 和 342,则将有两个表(具有相同的架构)234_guests 和 342_guests。

一张桌子统统统统

会有一个大的客人表,主键的一部分将是客人所属的用户的引用。

澄清: 我将尝试澄清我的问题: 约翰在我的网站上开了一个帐户。他正在为女儿筹办婚礼。 Bob 还在我的网站上开设了一个帐户,他正在计划他儿子的 Bar Mitzva。 Bob 和 John 都认识一个叫 Jim Halpert 的人。鲍勃和约翰都邀请吉姆参加他们的婚外情。为了注册客人,您必须输入他的信息。我显然不希望 Bob 和 John 访问相同的客人(即使他们是同一个人!),我的问题是在这种情况下如何设计数据库。


考虑到性能、逻辑、数据库规范化,什么是最好的?
还有其他选择吗?

【问题讨论】:

  • 一个数据库 x 用户?复制数据库上的用户?我想你必须花更多时间重新思考你的设计。正如给出的第一个答案所指出的那样,您最终会得到大量不必要的重复数据。

标签: sql database-design database-schema


【解决方案1】:

根据我在这里收集到的信息,您将有以下裁决 =>

  • 一个活动可以与多个客人建立关系。
  • 来宾可以与多个事件建立关系。

您可以使用联结表,而不是为同一个人创建多个实例。从理论上讲,您最终可能会以这种方式复制大量数据。

下面的链接演示了使用连接表的好处。它们可以用在上面的例子中,其中事件和客人有多对多的关系。

这篇文章中的例子涵盖了一个类似的困境,多个教室和多个学生。

http://megocode3.wordpress.com/2008/01/04/understanding-a-sql-junction-table/

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    我可能过于简化了,但我会这样做:

    创建一个包含 EventGUID、Location、Date 等字段的 Event 表...然后在您的 Guest 表中包含 EventGUID 字段。此表可能包含以下字段:GuestGUID、EventGUID、名称、地址等...

    这样,您可以为客人提供一张桌子,并且可以轻松地将他们链接回他们被邀请参加的活动。

    在您的示例中,John 在 Event 表中有一个条目,假设 EventGUID='abc',而 Bob 在 Event 表中有一个条目,EventGUID='xyz'。对于 Jim Halpert,Guest 表中有两个条目。第一个是 GuestGUID='123' 和 EventGUID='abc'(这是 John 的事件),第二个是 GuestGUID='456' 和 EventGUID='xyz'(这是 Bob 的事件)。

    使用这种方法比为每个用户创建数据库或表要干净得多。

    【讨论】:

      猜你喜欢
      • 2017-01-04
      • 1970-01-01
      • 2015-02-21
      • 2012-09-24
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多