用户数据库架构 - 是否超过规范化?

时间:2015-12-13 15:45:50

标签: php mysql database-design database-schema

我正在尝试创建用户的数据库架构。我可以将“user”实体视为具有其属性的对象,如下所示:

  • 用户(表)
    • ID
    • 姓名
    • 名字
    • 电子邮件
    • 密码
    • description(text)
    • 类别(tinyint - 外键)
    • sub_category(tinyint - foreing keys)
    • status(varchar,active,banned,waiting(等待批准))
    • created(datetime)
    • 已编辑(日期时间)
    • 已删除(日期时间)

否则我可以将描述分成user_description表(1-1关系),user_category(1-1)中的类别,users_status(1-1),users_datetime(1-1)(用于创建,编辑...)并加入他们加入。

哪种形式更好?我认为,比第二个假设“过度归一化”,理论上更好但实际上并非如此。我使用Mysql和php。

1 个答案:

答案 0 :(得分:1)

您的架构是一个很好的列表,有时会“过度标准化”。

不要规范化“连续”事物,例如DATETIME,数字,浮点数等。有一天,您可能需要获取某些日期时间范围内的行;正常化会使那种笨拙和低效。

“状态”和“标志”以及“是/否”等内容通常可以通过简单的ENUM更好地处理。

假设“类别”(也许是“子类别”)有一些与之相关的其他信息,那么将其标准化可能很好。如果它是用户和类别之间的“多对多”关系,那么您需要2个额外的表,并且它不是真正的“规范化”而是“关系”。 (你提到1-1;我怀疑这是一个错误。)

description TEXT - 这就像一个永远不会重复的字段,因此规范化既不会节省空间也不会简化更改。不要正常化。