数据库设计相关

时间:2009-06-23 13:25:33

标签: ruby-on-rails

我希望用户能够创建他们的帐户(存储登录名和密码信息 - 帐户表),一旦验证了电子邮件,他们就可以选择创建自己的人员记录(存储其他信息,如作为名字,... - 人员表)。我还希望用户(账户持有人)能够创建自己以外的人员记录。因此,在创建自己的人员记录时,用户可以选择接受由其他人创建的人员记录,而不是自己创建,甚至可以从其他社交网站下载配置文件并创建人员记录。

这些帐户持有人中的每一位也有来自其他用户和其他社交网络内容的多条消息,例如博客,... 我的问题是,是否将这些消息,博客,工作......与account_id或person_id相关联?

=============================================== ================================== 的更新: 好吧,我想我在制作问题方面不是很有创意。在一个简单的应用程序中,我可以在USERS表上创建并存储所有登录信息以及用户信息(如first_name,...),并将消息和其他内容与user_id相关联。

但是我希望用户能够创建许多人员记录(不仅是为了他们自己以及其他人,也可能包括有关尚未创建帐户的用户的信息)我正在考虑将登录信息分成ACCOUNTS表(或称为USERS表)和配置文件信息到PEOPLE表中。每个帐户持有者只有一个人员记录(他们自己的记录,这是向全世界标识他们的信息,因为登录信息仅用于系统身份验证)。让我们说你已经创建了一个帐户以及你的人员记录,并且看到了比尔盖茨并希望向他发送消息,我们有两个场景: (1)任何账户持有人均未将比尔盖茨的人事记录声称为其本人 (2)比尔盖茨人员记录有相关的账户持有人 在方案(1)中,系统甚至不允许您发送消息,因为没有可以检查消息的帐户持有者,并且在方案(2)中我应该将BillGates person_id保存在MESSAGES表的receiver_id或BillGates.account中。ID ? 这同样适用于所有其他内容类型,例如博客,照片......

让我们看看,如果我可以将表关系放在一起:

ACCOUNTS
id
login
password
person_id (account holders personal record)

PEOPLE
id
first_name
....
creater_id (current_account().person.id or just the current_account().id ?)
updater_id (current_account().person.id or just the current_account().id ?)

MESSAGES
sender_id (current_account().person.id or just the current_account().id ?)
receiver_id (person.id or person.account.id ?)
subject
body

BLOGS
id
title
body
author_id (current_account().person.id or just the current_account().id ?)

我希望我明白我的观点。如果不让我知道,我会尝试考虑其他一些例子。

3 个答案:

答案 0 :(得分:3)

我会说这取决于目的。如果你想指定一条消息,博客文章等的所有权,我会使用account_id,因为应该对这个人进行身份验证以创建这样的记录。

如果您要标记帖子引用其他人,那么我会使用people_id

答案 1 :(得分:1)

你自己已经说过了。 “这些帐户持有人中的每一个也都有......”

帐户持有人有消息,博客等。所以这些应该是accountid的。如果你想要没有账户的人有你应该使用person_id的

答案 2 :(得分:0)

如果总有一个人与一个account_holder相关联,那么他们在某种意义上描述了同样的事情,因此你把博客,消息等放在哪里都没关系。在这种情况下,我会去什么是最直观的,因为它在结构上无关紧要,这可能意味着把它放在Person表中。

另一方面,如果您建议可以将多个人与某个帐户相关联,或者您希望人们能够以某种方式拥有博客,消息等,即使没有相关帐户,那么显然那些放在Person表中。

编辑:在外键上放置一个独特的约束是非常重要的(无论你最终把它放在哪个表中)。否则,如果粗心的用户输入新的account_holder行并且为其提供与先前account_holder相同的“ownerID”,则您的一对一关联很容易成为一对多。在这种情况下,ownerID是Person表中的外键,需要唯一约束。

编辑#2:查看您的问题澄清,我认为没有理由不拥有一个“USERS”表。只需要一个布尔“acitivated”属性,这意味着此人拥有一个具有有效登录凭据的活动帐户。当某人创建帐户但尚未输入任何个人信息时,“已激活”将为真,但个人信息字段将保持为NULL。如果该用户创建了其他人的个人资料,则新的行将插入USERS中,其中包含所有个人信息,但“用户名”和“密码”字段将为NULL,“激活”将为false。这不是最无缝和简单的吗?用户和account_holder是相同的(这就是你获得一对一关联的原因),那么为什么不把它全部放在一个表中呢?