2011-04-26 85 views
2

我正在做一个数据库的设计,最终会有成千上万的用户。每个用户都有您的个人资料和特定数据关联。数据库建模-mysql

在您看来,最好的做法是为id,用户名,activationLink和hash以及地址,年龄,照片,工作提供另一张桌子,或者最好是所有东西的唯一表格?

感谢您的时间

回答

2

如果:

  1. 全部(或几乎全部)用户的所有数据填充
  2. 你们中的大多数查询所有领域

那么时间把它们放在一张桌子里,其他人将它们分开。

在您的模型中,activationLink似乎每次激活只查询一次,所以我会将它移动到一个单独的表中(这将允许在帐户被激活后删除它)。

地址,年龄,照片和工作通常会与用户名一起显示,因此最好将它们合并到一张表中。

+0

在我的模型中,我总是检查登录帐户是否激活。 – 2011-04-26 14:15:02

+0

@Wire:当然,但是你真的需要在激活链接被使用后永久存储吗?我会创建一个1字节的'isActive BOOL',并在激活执行后放弃链接。 – Quassnoi 2011-04-26 14:16:07

+0

我有一个布尔值用于激活或不激活。链接后一两天,可以删除,是:) – 2011-04-26 14:18:00

1

不要让您的初始设计限制未来扩展需求的能力(或使其很难)。

  • 目前,用户可以有一个address所以你可能把它放在users表 - 如果你希望他们能够存储的“工作”,并在未来的“家”的地址,或历史过去的地址?
  • 用户只能被允许拥有一张照片,但如果您在users.photo中放置了该照片(或其URL),则必须更改数据结构以允许用户拥有个人资料的历史记录照片

正如Quassnoi提到的那样,这些决策都会对性能产生影响 - 更多的表格意味着更多的复杂性,以及更多的潜在缓慢查询。不要为此创建新表,但应仔细考虑数据模型,因为它很快就会变得很难改变。

任何与user实体严格一对一的关系,并且不可能永远不会改变,并且需要(出生日期是一个很好的例子)历史的值应该与核心定义一起放在表中。任何潜在的一对多关系(即使它们不是现在为)都适合他们自己的表格。

+0

谢谢,很好的解释 - – 2011-04-26 14:28:41