mtm*_*ald 5 mysql database database-design normalization database-normalization
我需要设计一个数据库表,其中大多数属性都有单位。例如:
Readings
--------
id load (kW) fuel_consumption (tonnes) - etc
1 1154 89.4
2 1199 54.2
Run Code Online (Sandbox Code Playgroud)
在设计中捕获单元的推荐方法是什么?例如,我可以:
我碰巧使用 MySQL,但我认为这是一个通用的数据库规范化问题。
有趣的问题...
有两条明显的路线:
id load_kW fuel_consumption_tonnes
--------------------------------------------------
1 1154 89.4
2 1199 54.2
Run Code Online (Sandbox Code Playgroud)
这对于人类来说很容易阅读,并且相当合乎逻辑。但是,如果某些读数以“公斤”为单位,其他读数以“吨”为单位,则必须转换这些读数以适合“读数”表;这个过程必须是“无损的”,并且是幂等的。例如,读数“89403 公斤”不是“89.4 吨”,尽管企业可能为了方便而选择从公斤四舍五入为吨。通常会发生一些违反直觉的四舍五入的事情......
如果是这种情况,您可以更改架构:
id load load_unit fuel_consumption fuel_consumption_unit
--------------------------------------------------
1 1154 kW 89403 kg
2 1199 kW 54.2 t
Run Code Online (Sandbox Code Playgroud)
使用“单位”表,如果需要的话:
unit_id unit_name
--------------------
kg kilogramme
t Tonne
Run Code Online (Sandbox Code Playgroud)
但是,此模型容易出现人为故障 - 很容易在不修改“load”列的情况下更改“load_unit”列,从而破坏数据。您无法对数据模型采取任何措施来避免这种情况。它还使常见查询变得相当棘手:想象一下尝试以一致的测量单位检索“负载”总量。
在这种情况下,我建议您有两个表:“raw_readings”,其中原始数据采用上述格式,以及“normalized_readings”,您可以通过将所有读数转换为一致的测量单位来填充该表。
| 归档时间: |
|
| 查看次数: |
3465 次 |
| 最近记录: |