繁体   English   中英

数据库设计是否重复?

[英]Database design too repetitive?

我正在研究一个数据库模式,此刻让我有点发疯,因为我似乎要重复相同的表来重现不同类型的行为。

基本上,该系统由通过网络监控的实时传感器和通过手机收集的记录器组成。 传感器和记录器分为“位置”,“位置”分为“区域”。 一个位置最多可以有1个记录器,但可以有任意数量的实时传感器。

我将尝试打破规则:

  1. 系统可以有0到多个区域
  2. 一个区域可以有0到多个位置
  3. 一个位置可以有0到1个记录器
  4. 一个位置可以有0到许多LiveAnalogSensor
  5. 一个位置可以有0到许多LiveSwitchSensors
  6. 一个位置可以有0到多个动作
  7. 一个LiveAnalogSensor必须属于1个LiveSensorRelay
  8. 一个LiveSwitchSensor必须属于1个LiveSensorRelay
  9. 记录器可以有0到许多读数
  10. LiveAnalogSensor可以读取0到许多读数
  11. LiveSwitchSensor可以读取0到许多读数
  12. 读数可能有警报
  13. 系统可以有0到多个动作
  14. 警报可以应用0到1的动作
  15. 一个警报可以有0到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM