【问题标题】:Groups-People Database Design - Need adviseGroups-People 数据库设计 - 需要建议
【发布时间】:2011-03-27 07:39:30
【问题描述】:

我正在开发一个应用程序,用户在该应用程序中将图片上传到服务器,然后通过显示这些图片的链接向他们选择的人发送电子邮件。

我的问题是关于在数据库中组织人员(我使用的是 MySQL)。

我希望每个用户都有这样的人物树:

  • 家庭
    • 妈妈
    • 爸爸
    • 乔纳森
  • 亲密的朋友
    • 大卫
    • 罗尼
  • 其他
    • 朱莉娅
    • 彼得
    • 亚历克斯
  • Tanya(不属于任何组)

我想到了数据库中的以下组织:

电子邮件表(所有用户的电子邮件)

组表(所有用户组)

人员表(所有用户人员)

在电子邮件表中,不会有两封相同的电子邮件。 Emails Table 中的 name 是用户在添加电子邮件时给此人的名称(我称之为默认名称)。每个用户可能对同一个人有不同的名称。因此,这就是 People Table 中的 name 的含义。 People Table 中的 name=NULL 表示默认名称将出现在人员树中。 group_id=NULL 表示此人不属于任何组。

这一切看起来合理吗?

此外,如您所见,用户之间存在某种电子邮件共享。这意味着,如果 Julia 更改了 David 的电子邮件,所有其他用户也会看到此更改(他们将收到有关此更改的电子邮件)。您认为这会导致问题吗?

感谢您的意见!

【问题讨论】:

    标签: mysql database database-design


    【解决方案1】:

    哦。给定的电子邮件可以与不同的“人”相关联吗?我认为它的语义非常丑陋。我将重命名人员表联系人。我还将 Emails 表中的“名称”字段重命名为 DefaultName,以表明它严格来说是一个后备。

    除了语义(这很重要,如果其他人必须使用此数据库),您可以使用 varchar(20) 将所有者引用为外键。没有迹象表明它引用了什么,我认为它是某种 Owners 表,以用户名作为主键。我会推荐一个 int 代理键...如果用户想要更改他们的用户名会发生什么?

    最后,我的固执己见会改变“无组”联系人。我会为每个联系人创建一个默认组,将其命名为 _Groupless,并将像 Tanya 这样的“无组”联系人分配给 _Groupless 组。该应用程序可以整理出细节。我不是特别喜欢可选的外键。

    【讨论】:

    • 非常感谢您的回答。我接受你说的大部分。但是,我并没有说“给定的电子邮件可以与不同的人相关联”。 People Table 中的 person_id 1 和 5 确实具有相同的 email_id,但这并不意味着它们是不同的人。这是同一个人,John,他的电子邮件是 johns_email@gmail.com。 misha 称他为 John(默认名称),而 jenya 称他为 Johnny。这是有道理的,还是我仍然错过了什么?确实还有一个Owners Table,我真的要把owner name改成owner_id。
    • 我明白你在说什么,我认为最好将表命名为Contacts。原因是在您的场景下,“人物”表中的两条不同的行可以指代同一个现实生活中的人。通常,您不会认为“人员”表中的不同行指的是同一个人。另一方面,一个联系人表......如果我的电子邮件地址簿中有我的母亲,而我的姐姐也有,那是两个不同的联系人,但一个人。称它为人会让我妈妈看起来像是两个不同的人......
    • 我同意将名称更改为联系人。谢谢!
    猜你喜欢
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2020-04-22
    • 1970-01-01
    • 2011-11-13
    相关资源
    最近更新 更多