Wil*_*nes 14 database database-design models
我正在使用Ruby on Rails,但我认为这个问题比这个更广泛,并且通常适用于数据库设计.
何时将单个模型拆分为多个表是个好主意?例如,假设我有一个User模型,并且模型中的字段数实际上已经开始累加.例如,用户可以进入他的网站,他的生日,他的时区,他的等等.
分割模型是否有任何优点或缺点,例如,User表可能只有登录和电子邮件等基本信息,然后每个用户都有另一个表,如UserInfo,另一个表是UserPermissions,以及另一个是UserPrivacySettings或类似的东西?
编辑:要为此添加额外的光泽,除了特定于它们的页面外,很少访问大多数字段.例如,只有在有人点击用户的个人资料时才会访问生日等内容.此外,一些领域(很少被访问)有可能非常大.大多数字段都可能设置为空白或为零.
通常,将具有一对一关系的东西放在同一个表中是个好主意.除非您的用户群包含Queen或Paddington Bear,否则用户只有一个生日,因此应该是USERS表的属性.具有一对多关系的事物应该在单独的表中.因此,如果用户可以通过各种方式将多个隐私设置拆分出来.
如果我们想要一次检索所有用户的信息,将一个表拆分成几个表可能会使查询更复杂或更慢.另一方面,如果我们有一组仅以离散方式查询或更新的属性,那么拥有一个单独的表来保存该数据是一个好主意.
这将是一个需要分析的情况。
当您发现此类表中的许多字段都是 NULL,并且可以组合在一起(例如 UserContactInfo)时,是时候考虑将信息提取到自己的表中了。
您希望避免拥有一个包含数十/数百个字段且仅稀疏输入数据的表。
相反,尝试对数据进行逻辑分组,并创建包含大部分已填充字段的主表。然后,您可以创建数据子集,就像在 UI 上将它们(联系信息、个人兴趣、工作相关信息等)表示到单独的表中一样。