电力监控系统数据库规范化

时间:2015-06-10 00:57:24

标签: database database-design normalization database-normalization

我已经阅读了很多关于规范化的技巧和教程,但我仍然觉得很难理解我们需要规范化的方式和时间。所以现在我需要知道电力监控系统的数据库设计是否需要规范化。

到目前为止,我有一个包含字段的表:

  • monitor_id
  • appliance_name
  • 品牌
  • 安培
  • 正常运行时间
  • power_kWh
  • price_kWh
  • 状态(开/关)

该监控系统分别监控多个设备(电视,冰箱,洗衣机)。 那么需要进一步规范化吗?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:0)

老实说,你可以在不规范每个数据库的情况下逃脱。如果数据库将成为影响许多人的项目,或者存在性能问题并且数据库执行OLTP,则规范化很好。数据库规范化在很多方面归结为拥有更多数量的表本身和更少的列。非规范化涉及具有较多列数的较少表。

我从未见过只有一张桌子的真实数据库,但没关系。有些人为了报告目的而对其数据库进行非规范化。因此,不一定需要规范化数据库。

你如何规范它?您需要拥有一个主键(在一个唯一的列上,或者两个或多个列的组合,这些列在它们的组合形式中是唯一的)。您需要创建另一个表并具有外键关系。外键关系是存在于两个或多个表中的一对列。这些列需要共享相同的数据类型。它们充当从一张桌子到另一张桌子的地图。这些表格通常以实际目的分开。

例如,您可以拥有一个包含状态,正常运行时间和monitor_id的表。这将与两个表之间的monitor_id具有外键关系。然后,您的原始表可以删除正常运行时间和状态列。您可以拥有第三个表,其中包含品牌,型号以及所有型号共有的内容(例如,power_kWh,安培等)。基于模型,第一个表可能存在外键关系。然后可以从第一个表中删除品牌列(通过DDL命令DROP),因为第三个表将使它与模型名称相关。

要创建新表,您需要在列上调用一个DDL命令CREATE TABLE newTable,该外键实际上将由新表和原始表共享。使用外键约束时,新表将共享一列。当表格高度规范化时,表格中的信息较少(列数较少)。但是会有更多的表来容纳和存储所有数据。这样,您可以更新一个表,而不是使用一个大表对非规范化数据库中的所有其他列进行锁定。

一旦新表中的数据包含原始表中的一列或多列,您就可以从原始表中删除这些列(外键列除外)。要删除列,您需要调用DDL命令(ALTER TABLE originalTable,drop brand)。

在许多方面,如果您尝试在规范化数据库中的数据库表上执行许多读取和写入(提交许多事务),性能将得到改善。如果您将表用作报表,并希望正常显示表中的所有数据,则规范化数据库将损害性能。

顺便说一句,规范化数据库可以防止冗余数据。这可以使数据库占用更少的存储空间并使用更少的内存。

答案 1 :(得分:0)

让我们的数据库规范化很好。它可以帮助我们获得高效的数据,因为我们可以在这里防止冗余并节省内存使用。在规范化表时,我们需要在每个表中都有一个主键,并使用它来连接到另一个表,当主键(每个表中唯一)在另一个表上时,它被称为外键(用于连接到另一个表)

  

示例您已经拥有此表:

Table name : appliances_tbl
-inside here you have

-appliance_id : as the primary key
-appliance_name
-brand
-model
and so on about this appliances...
  

接下来你有另一张桌子:

Table name : appliance_info_tbl (anything for a table name and must be related to its fields)

-appliance_info_id : primary key
-appliance_price
-appliance_uptime
-appliance_description
-appliance_id  : foreign key (so you can get the name of the appliance by using only its id)
and so on....

您可以添加更多这样的表,但只需确保每个表中都有一个主键。您还可以使用基数来使您的规范化更容易理解。