数据库设计,网站的两种类型的用户

时间:2010-01-26 04:32:36

标签: php mysql database database-design

我正在制作一个评论类型的网站,我希望有两种类型的用户。一个是大多数审稿人,而另一个则是评论的人。在数据库设计方面,我如何区分这两者。我是否应该为审阅者和审核提供单独的表格,或者只是为两者分配不同的ID范围?

7 个答案:

答案 0 :(得分:1)

我建议您为用户创建一个表,为usertype创建一个表,并为用户创建一个外键,以防您以后需要具有这两种类型的用户。

答案 1 :(得分:1)

鉴于您的问题模糊不清,我会说这取决于任何一方将访问/插入的信息类型。据我了解,数据库的结构应该反映您组织数据的方式,而不一定是数据库用户之间的关系。例如,您可以使用名为“用户状态”的单独表格,其中包含0-> Reviewer,1-> Review-ee,然后将用户状态列为Users表中的外键,作为指示是否给定的列用户是审阅者或复审者,因此无需单独的用户表。

答案 2 :(得分:1)

这是一种经典的超类型/子类型情况。用户和审阅者都是人,关系型偏执者会说你应该有一个包含所有常用人字段的“人员”表。然后,您可以与审阅者表具有明确的一对一foriegn密钥关系,其中包含审阅者特定字段以及其他审阅者特定表的相关键。您可以通过加入Reviewers表来检查某人是否是评论者。

您当然可以为此方法添加具有不同数据的其他类型的人。对于像我这样喜欢避免空值字段的关系型偏执者和引用多个表之一的未声明外键,这是一种很好的方法。 MySQL jockeys会把它全部塞进一个大表中,在varchar字段中有很多空值,幻数和逗号分隔列表。

如果您知道将来不会改变要求(哈!),并且用户和审阅者之间的架构没有区别,只需使用单个person_type字段并保持简单。

不要出于任何原因使用“键范围”。这只是hackery,只会在几年内给你或其他人造成大量痛苦的重新编码。主键应该没有语义和不变。

答案 3 :(得分:0)

您可以使用值“reviewer”和“reviewee”

创建列'type'

答案 4 :(得分:0)

这在很大程度上取决于您对每种用户类型保留的数据。如果非常相似,单个表可能没问题,但您需要区分字段(列)而不是分配一系列ID。

如果您需要有关审阅者和审稿人的不同信息,并且将这些信息保存在一起是有意义的,那么您最好将它们分成至少两个表。

答案 5 :(得分:0)

如果描述这两个不同用户的属性不同,那么您可能希望将它们分开。如果它们共享相同的属性,如firstName,lastName等,那么您可以将它们保存在同一个表中。

答案 6 :(得分:0)

有一次,有人说,“总是把同样的东西放在同一张桌子上。”

这是真的,因为对'喜欢'的定义是如此模糊,以至于他总能创建一个真实的定义。

所以说,你应该在这里做同样的事情。 Reviewers和Reviewee都是“人”这一事实无关紧要。真正的问题是,任何人都可以成为两者吗?如果那不是真的那么你就没有问题,实际上应该使用单独的表。

这样想。

让我们说这是真正的评论者永远不会是评论者。在某个地方你会有一个包含Reviewer_ID和Reviewee_ID的表格。你将构建一个FK回到这两个表。那些限制保证你会有一个评论者和一个评论者......你永远不会有2个人。

但是如果他们可以'穿着'可以说,并且你构建了两个表,那么你要么必须将同一个人放在两个不同id的表中,除了添加更多层之外都不知道他们是同一个人,否则你必须重铸为超级型/子型。

将相同的东西放在同一张桌子上。 喜欢真正意味着什么是行为。即使他们是教授和电影,可以审查的事情也应该放在一张桌子上。如何处理其不同的属性(可以为Nullable列或超类型/子类型)取决于您提供的更多信息。