在设计数据库时,重复表或留下空字段有多糟糕?

时间:2014-05-23 22:18:03

标签: mysql database

我目前正在为一个网站设计一个数据库,它很简单,但我会有很多信息条目,我不想留下一个弱设计。所以,基本上,我在创建两个具有相同结构的表时发现了一个问题,或者只创建了一个但在另一个表中将一些文本字段保留为null。

我有一个表area,但我还需要创建其他名为sub-area的文件,两者都有自己的一组images,但只有来自区域和子区域的一些数据才会共享,子区域可能有许多区域没有的长文本信息,文本字段。

所以,基本上,我做的是,创建一个名为area的表,并创建一个布尔字段,告诉我是否是子区域,也是一个可以为null的外键,但是用于指向父区域以防区域为子区域,并在图像表中创建区域的外键(因为区域和子区域可以有许多图像)。

我现在的问题是,我有一个区域信息表(因为它会有很多我不会使用的字段,所以我真的不想加载它),该表与区域有一对一的关系表,但该区域的某些字段 - 信息仅限于子区域,因为我没有仅有子区域的表,我想在模式中将它们保留为NULL,字段为{{1}并且我不知道这是一个大错误还是一个准确的决定,考虑到我不想用查询重载服务器(因为信息足够多,所以流量会这样)

有什么想法吗?感谢。enter image description here

1 个答案:

答案 0 :(得分:0)

您可以采用的几种方法之一。注意尽管人们在谈论第六范式,但实际的数据库设计与科学一样多。

基于我可以从你的问题中收集的内容

InfoGroups InfoGroupID (PK)
           InfoType, (Unique Key with InfoGroupID ?)
           Info

Areas    AreaID (PK), 
         any other attributes soley down to area,
         InfoGroupID (FK to InfoGroups)

SubAreas SubAreaID (PK)
         any other attributes soley down to sub area,
         AreaID (FK to Areas),
         InfoGroupID (FK to InfoGroups)

如果Info对于区域/子区域是通用的,并且Make InfoGroups是多对多的,并且有一个Info Table,那么你可以走得更远...... Info Type是一个幻数,枚举,字符串还是FK到InfoTypes表是另一组选项。

如果区域和SubAreas之间的唯一区别是链接,那么你可以选择一个自我参考表,不过我个人不会,除非subAreas有更多的subAreas ..

没有看到这太贵了,但我不知道你的需求。数据方面,它简洁,整洁,高效,而且比模糊空列的流量更好。