我正在开发一个数据库架构,这让我有点生气,因为我似乎在重复相同的表来重现不同类型的行为。
基本上,该系统包括通过网络监控的实时传感器,以及通过手机收集的记录器。传感器和记录器分为多个位置,位置分为多个区域。一个位置最多可以有1个记录器,但可以有任意数量的实时传感器。
我会试着打破规则:
所以场景是,读数进入并存储(通过Logger下载或通过网络进行实时读取)。读数超出范围,因此它有一个警报代码。为该读数生成警报。用户最终将动作应用于该动作。如果读数进入表示报警条件已经结束,则AlarmResolution(或我在模式中调用它的AlarmEnd)条目将链接到报警以显示它已结束,以及它已结束的时间。
在模拟报警时,只要新读数高于最后一个,就会存储一个新的“峰值”读数,这就是AnalogSensorReadingAlertPeak表的用途。
基本上就是这样。我的问题是不同传感器(特别是记录器和模拟传感器基本相同)的模式重复性如何 - 而且我似乎有很多1到0..1的关系,尽管我不太关心它
我真的在进行健全检查。我可以想办法摆脱重复性,但似乎总是以牺牲数据完整性为代价。
感谢。
编辑:我在投票后略微修改了标题和问题,因为它不是特别具体。我希望现在好多了..答案 0 :(得分:2)
如果每个传感器(例如)具有完全相同的属性(列),我会说这是重复的。 如果它们完全不同,它们应该有不同的表格。
我也尝试使用NORMA或类似方法来捕获它,以验证设计。
答案 1 :(得分:1)
我不会太担心太多的零对一关系。我确实首先担心拥有零对一关系。从长远来看,这些变成了一对多的关系。
对我而言,没有什么比许多工具标准的ER图的混乱更令人困惑了。我使用一种名为“Levelized Conceptual Diagrams”的技术来帮助理解我的人际关系。
你应该制作一个Levelized Diagram - 它会让你的生活变得非常轻松 数据库设计。
希望我能让这一切变得简单 - 一方在顶部,多方在底部。许多人被分解为两个一对多表。
重复直到完成。
链接到完整图片:http://i.stack.imgur.com/VKAGZ.jpg
答案 2 :(得分:0)
为什么需要只有PK字段的表?你不能直接将他们的孩子与父母联系起来吗?
另外考虑创建一个包含两个字段和一个contextID键字段的限制表,因此不是每个有2个限制字段的2个表(2个上限和2个下限字段),而是有一个包含3个字段的新表并更改现有表有两个FK关系的字段到新的字段,名称如upperLimitContextID和lowerLimitContextID。
此外,由于动作和结束表具有相同的PK,因此请考虑将它们组合在一起。任何时候都有相同PK的表格,它们可以合并。
答案 3 :(得分:0)
在Oracle中,ARC描述了与其他表的互斥关系。这个概念可以使用可空的FK列在其他数据库中实现。
根据表的功能,您可以选择将所有* Readings或所有* Alerts表组合到一个表中,具有可以为空的外键列到相应的Logger,AnalogSensor和SwitchSensor表。
因此,* AlertEnd和* AlertAction表也可以组合在一起(如果需要,可能会添加一个Type列。)
(可选)为三个域(Logger,AnalogSensor和SwitchSensor)添加视图以模拟原始表。