[英]Database design too repetitive?
我正在研究一个数据库模式,此刻让我有点发疯,因为我似乎要重复相同的表来重现不同类型的行为。
基本上,该系统由通过网络监控的实时传感器和通过手机收集的记录器组成。 传感器和记录器分为“位置”,“位置”分为“区域”。 一个位置最多可以有1个记录器,但可以有任意数量的实时传感器。
我将尝试打破规则:
因此,场景是一个读数进入并存储(通过Logger下载或通过网络输入的实时读数)。 读数超出范围,因此带有警报代码。 将为该读数生成警报。 最终,用户会对其执行操作。 如果出现读数,表明警报条件已结束,则将AlarmResolution(或在我在架构中称为AlarmEnd)的条目链接到Alarm,以显示其结束时间和结束时间。
对于模拟警报,只要新读数高于上一个读数,就会存储一个新的“ Peak”读数,这就是AnalogSensorReadingAlertPeak表的作用。
基本上就是这样。 我的问题是对于不同的传感器(尤其是基本相同的记录器和模拟传感器),该模式的重复性如何-我似乎有很多1到0..1的关系,尽管我对此不太担心。
我真的在进行健全性检查。 我可以想到摆脱重复性的方法,但是它似乎总是以牺牲数据完整性为代价。
谢谢。
编辑:由于没有特别明确的规定,我在向下表决后已对标题和问题进行了一些修改。 我希望现在会更好。
我要说的是,如果每个Sensor(例如)具有完全相同的属性(列),则是重复的。 如果它们完全不同,则它们应该具有不同的表。
我也尝试使用NORMA或类似工具捕获此内容以验证设计。
我不会太担心太多的“一对一”关系。 我不担心有零到一的摆在首位的关系。 从长远来看,这些关系是一对多的关系。
对我来说,没有什么比许多工具中标准的ER图混乱更令人困惑了。 我使用一种称为“层次化概念图”的技术来帮助理解我的关系。
您应该制作一个Levelized Diagram-在进行数据库设计时,它将使您的生活变得非常轻松。
希望我能使这变得容易-一侧在顶部,许多在底部。 多对多分解为两个一对多表。
重复直到完成。
链接到完整图像: http : //i.stack.imgur.com/VKAGZ.jpg
为什么需要仅包含PK字段的表? 您不能将他们的孩子直接与父母联系吗?
还可以考虑创建一个包含两个字段和一个contextID键字段的限制表,因此,要代替具有2个限制字段的2个表(每个限制字段2个上限和2个下限字段),要有一个包含3个字段的新表,并更改现有表中的2个字段与新的FK关系,名称如upperLimitContextID和LowerLimitContextID。
另外,由于操作表和结束表具有相同的PK,请考虑将它们组合在一起。 任何时候只要表具有相同的PK,就可以将它们组合在一起。
在Oracle中, ARC描述了与其他表的互斥关系。 可以使用可空FK列在其他数据库中实现此概念。
根据表的功能,您可以选择将所有* Readings或所有* Alerts表组合到一个表中,这些表具有指向相应Logger,AnalogSensor和SwitchSensor表的可空外键列。
因此,* AlertEnd和* AlertAction表也可以合并(如果需要,可以添加Type列)。
(可选)添加三个域(Logger,AnalogSensor和SwitchSensor)的视图以模拟原始表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.