好吧,我想提供许多不同的内容类型。有些是如此相似,我觉得它们属于同一类别。但是,有些列适用于内容类型,而不适用于其他类型。我应该将它们全部存储在nodes
表中,还是应该为每个content type
创建一个新表?我应该将表格分解为不兼容的列吗?
以下是一些示例内容类型:书籍,博客条目,广告,个人资料,聚光灯故事,档案故事,静态页面,联系表格,测验,民意调查。
我一直在考虑像这样拆分表格:
post: book, spotlight story, archival story, blog entry
questionnaire: quiz, poll
static: static page, profile
ad
contact form
不幸的是,在阅读了关于数据库规范化之后哪种方法最好是不明显的,但是在理解第三范式之外的任何事情时我都遇到了很多麻烦。当我开始阅读第三种正常形式时,我发现特别令人不安的是,为了速度,工业界人士经常忽视故意坚持这种形式。所以,如果有人能用我的榜样让我清楚地知道什么是合理的,我会非常感激。
答案 0 :(得分:1)
TL; DR:这取决于。
规范化意味着您有一个公共属性表,以及每个类型的唯一属性的单独表。如果有大量的公共属性,并且将每个共享这些属性的类型称为相同的“超类型”是有意义的,那么我更喜欢这个。
如果速度很重要,您可能不想要这样做,因为每次访问其中一个子类型时它都会强制加入。这种调整水平是否有意义取决于一系列事情。
如果每个子类型具有“小”数量的唯一属性,那么将类型和每个属性存储在单个表中(“单表继承”)或者如果实际速度可能同样容易成为一个问题。
另一个选择是实际执行这两个操作:保留关系模型,但使用触发器来保留平面数据的集合。我不确定在你的情况下是否有意义,因为可能没有“大量”连接 - 但对于非常复杂的数据库模型,它很方便,特别是对于报告。