数据库:什么时候拆分成单独的表?

标签 database database-design

假设我有两种不同类型的传感器:一种监测模拟电压(例如温度传感器),另一种测量某物是开还是关(开关传感器)。

我不能决定是否要一张 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分为子类型:ReadingAnalogReadingSwitch。这可能会使生成图表等的程序更容易一些。

关于数据库:什么时候拆分成单独的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3863910/

相关文章:

mysql - 在数据库中表示多对多关系的最佳方式是什么?

mongodb - 如何在 MongoDB 中处理大数据集

用于远程开发的数据库同步

php - 将 SQLite 用于我的网站数据库时的实用性和安全性?

mysql - 从 bluehost 托管网站的 phpMyAdmin 数据库获取数据

java - 优化 Tinder 类型的 mysql 查询

MySQL InnoDB,自动增量辅助列?

sql - 在 sql 中没有任何 while 循环的情况下从列中删除前导零

mysql - 在 SQL 中查询任意 x 处的 y 值的 XY 数组对

sql - 如何使用 postgres 触发计算会计软件中的余额