数据库建模-mysql

时间:2011-04-26 13:35:52

标签: mysql database database-design

我正在设计一个数据库,最终会有数千名用户。每个用户都有您的个人资料和特定数据。

在您看来,最佳做法是使用id,username,activationLink和hash表格,另一个表格用于地址,年龄,照片,工作,或者最好是所有内容的唯一表格?

感谢您的时间

2 个答案:

答案 0 :(得分:2)

如果:

  1. 所有(或几乎所有)用户都填写了所有数据
  2. 大部分时间查询所有字段
  3. 然后将它们保存在一个表中,其他人将它们分开。

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

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

答案 1 :(得分:1)

不要让您的初始设计限制将来扩展您的要求的能力(或者只是让其变得困难)。

  • 目前,用户可能只有一个address,因此您可以将其放在users表格中 - 如果您希望他们能够存储“工作”和“家庭”地址,该怎么办?未来,或过去地址的历史?
  • 用户可能只允许拥有一张照片,但如果您在users.photo中添加了该照片(或其中的网址),那么您必须更改数据结构以允许用户拥有个人资料照片的历史

正如Quassnoi所提到的,每个决策都会产生性能影响 - 更多的表意味着更多的复杂性,更多的潜在的慢查询。不要为此创建新表,但要仔细考虑您的数据模型,因为很快就很难对其进行更改。

任何与user实体严格的一对一关系的值,并且不太可能发生变化并且需要历史记录(出生日期是一个很好的例子)应该列在表中核心定义。任何潜在的一对多关系(即使他们现在不是 )都是他们自己的桌子的好候选人。