数据库:何时拆分成单独的表?

Mar*_*ark 6 database database-design

假如我有两种不同类型的传感器:一种监测模拟电压(例如在温度传感器上),一种测量是否有东西开启或关闭(开关传感器).

我无法决定是否有一张桌子:

[Sensor]
Id : PK
UpperLimit : FLOAT
UpperLimitAlertDelay : INT
LowerLimit : FLOAT
LowerLimitAlertDelay : INT
IsAnalog : BOOL

[SensorReading]
Id : PK
SensorId : FK
AnalogValue : FLOAT
IsOn : BOOL
Run Code Online (Sandbox Code Playgroud)

或者将它们分成单独的表格:

[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
Run Code Online (Sandbox Code Playgroud)

目前我把它作为一个表,当不使用它作为模拟传感器时,我使用"UpperLimitAlertDelay"作为"OnTooLongAlertDelay".

在代码中,我通过传感器表上的布尔标志进行区分并创建适当的对象(即AnalogSensor或SwitchSensor),但我想知道在数据库级别它是否更整洁/更合适以将其分离出来.

你会用什么经验来做出这样的决定?它们是一个级别上的不同实体,但在另一个级别上,您可以说它们都只是传感器.

这通常是我无法决定创建数据库时要采取的方向.也许每当我使用bool来区分哪些字段意味着/应该使用时,它应该是一个单独的表?

关于这个主题或这个特殊问题的一般想法赞赏.

谢谢!

编辑:一些进一步的信息.

开关传感器可监控门是否打开,冰箱压缩机是否正在运行,设备是否已打开等情况.

可以在任何传感器上生成图形和报告,以便以相同的方式使用它们; 它只是数据将打开/关闭或模拟值取决于类型.

所以基本上它们通常都是一样的.

在读数表中,从一个传感器读取一个读数总是一行.

到目前为止,这些意见似乎是主观的 - 我想两种方式都有利有弊.

上述信息是否会改变任何人的意见?

谢谢!标记.

Per*_*DBA 2

这与您的其他问题是同一个应用程序/数据库吗?

在这种情况下,答案已在该数据模型中提供。

如果不是同一个应用程序/数据库,或者这个问题没有得到充分回答,请发帖或评论。例如。根据之前的信息,我对其进行了建模,以便SensorType表可以区分Sensor(模拟或布尔)......但我们可以:

  • 在传感器级别区分它,

  • 或分成Reading子类型:ReadingAnalogReadingSwitch。这可以使生成图表等的程序变得更容易一些。