假设我有两种不同类型的传感器:一种监测模拟电压(例如温度传感器),另一种测量某物是开还是关(开关传感器)。
我不能决定是否要一张 table :
[Sensor]
Id : PK
UpperLimit : FLOAT
UpperLimitAlertDelay : INT
LowerLimit : FLOAT
LowerLimitAlertDelay : INT
IsAnalog : BOOL
[SensorReading]
Id : PK
SensorId : FK
AnalogValue : FLOAT
IsOn : BOOL
或者将它们全部分离到单独的表中:
[AnalogSensor]
Id : PK
UpperLimit : FLOAT
UpperLimitAlertDelay : INT
LowerLimit : FLOAT
LowerLimitAlertDelay : INT
[AnalogSensorReadings]
Id : PK
AnalogSensorId : FK
Value : FLOAT
[SwitchSensor]
Id : PK
OnTooLongAlertDelay : INT
[SwitchSensorReadings]
Id : PK
SwitchSensorId : FK
IsOn : BOOL
目前我把它作为一个表,当不将它用作模拟传感器时,我将“UpperLimitAlertDelay”用作“OnTooLongAlertDelay”。
在代码中,我通过传感器表上的 bool 标志进行区分并创建适当的对象(即 AnalogSensor 或 SwitchSensor),但我想知道在数据库级别将其分开是否会更整洁/更合适。
您会根据什么经验法则做出此类决定?它们在一个层面上是不同的实体,但在另一个层面上,您可以说它们都只是传感器。
这通常是我在创建数据库时永远无法决定采取什么方向的地方。也许每当我使用 bool 来区分什么字段意味着/应该使用时,它真的应该是一个单独的表吗?
对这个主题或这个特定问题的一般想法表示赞赏。
谢谢!
编辑:一些进一步的信息。
开关传感器监控门是否打开、冰箱压缩机是否正在运行、设备是否打开等。
图表和报告可以在任何传感器上生成,因此它们的使用方式相同;只是数据将根据类型打开/关闭或模拟值。
所以基本上他们通常被同等对待。
在读数表中,总是一行表示一个传感器的一个读数。
到目前为止,这些意见似乎都是主观的——我想这两种方式都各有利弊。
以上信息是否改变了任何人的意见?
谢谢! 马克。
最佳答案
这是与your other question 相同的应用程序/数据库吗? ?
在这种情况下,答案已在 Data Model 中提供.
如果不是同一个应用程序/数据库,或者如果这个问题没有得到充分回答,请发帖或评论。例如。根据以前的信息,我对其进行建模,以便 SensorType
表区分 Sensor
(模拟或 bool )......但我们可以:
在传感器层面区分它,
或将
Reading
分为子类型:ReadingAnalog
和ReadingSwitch
。这可能会使生成图表等的程序更容易一些。
关于数据库:什么时候拆分成单独的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3863910/