电力监控系统数据库规范化
Database normalization for electricity monitoring system
我已经阅读了很多关于规范化的技巧和教程,但我仍然觉得很难理解我们如何以及何时需要规范化。所以现在我需要知道这个电力监控系统的数据库设计是否需要规范化。
到目前为止我有一个 table 字段:
- monitor_id
- appliance_name
- 品牌
- 安培
- 正常运行时间
- power_kWh
- price_kWh
- 状态 (ON/OFF)
此监控系统分别监控多个电器(电视、冰箱、洗衣机)。
那么是否需要进一步规范化呢?如果是,怎么做?
老实说,您可以在不对每个数据库进行规范化的情况下逃脱。如果数据库将是一个影响很多人的项目,或者如果存在性能问题并且数据库做 OLTP,则规范化是好的。数据库规范化在许多方面归结为拥有更多的 table 本身和更少的列。非规范化涉及使用更少的 table 和更多的列。
我从未见过只有一个 table 的真实数据库,但没关系。有些人为了报告目的而对他们的数据库进行非规范化。所以并不总是需要规范化数据库。
你如何规范化它?您需要有一个主键(在一个唯一的列或两个或更多列的组合上,这些列的组合形式是唯一的)。您需要创建另一个 table 并具有外键关系。外键关系是存在于两个或多个 table 中的一对列。这些列需要共享相同的数据类型。它们充当从一个 table 到另一个的映射。 table 通常按实际用途分开。
例如,您可以有一个包含状态、正常运行时间和 monitor_id 的 table。这将与两个 table 之间的 monitor_id 有外键关系。然后,您原来的 table 可能会删除正常运行时间和状态列。您可以有第三个 table,包含品牌、型号和所有型号共有的东西(例如,power_kWh、安培等)。根据模型,可能与第一个 table 存在外键关系。然后可以从第一个 table 中删除品牌列(通过 DDL 命令 DROP),因为第三个 table 将与型号名称相关联。
要创建新的 tables,您需要调用 DDL 命令 CREATE TABLE newTable,在列上使用外键,实际上将由新的 [=30] 共享=]和原来的table。有了外键约束,新的 table 将共享一个列。当 table 高度规范化时,它们中的信息将更少(更少的列)。但是会有更多的 table 来容纳和存储所有数据。这样你就可以更新一个 table 而不是用一个大的 table 锁定非规范化数据库中的所有其他列。
一旦新 table 具有原始 table 中的一个或多个列中的数据,您可以从原始 table 中删除这些列(外键列除外).要删除列,您需要调用 DDL 命令 (ALTER TABLE originalTable, drop brand).
在许多方面,如果您尝试在规范化数据库中的数据库 table 上进行多次读写(提交许多事务),性能将会提高。如果您使用 table 作为报告,并希望在 table 中正常呈现所有数据,规范化数据库会损害性能。
顺便说一下,规范化数据库可以防止冗余数据。这可以使数据库消耗更少的存储空间 space 并使用更少的内存。
很高兴我们的数据库 normalize.It 可以帮助我们获得高效的数据,因为我们可以在此处防止冗余并节省内存使用量。在规范化 table 时,我们需要在每个 table 中有一个主键,并使用它连接到另一个 table,当主键(在每个 table 中是唯一的)是在另一个 table 上它被称为外键(用于连接到另一个 table)。
Sample you already have this table :
Table name : appliances_tbl
-inside here you have
-appliance_id : as the primary key
-appliance_name
-brand
-model
and so on about this appliances...
Next you have another table :
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....
您可以像这样添加更多 table,但只需确保每个 table 中都有一个主键。您还可以放置基数以使规范化更易于理解。
我已经阅读了很多关于规范化的技巧和教程,但我仍然觉得很难理解我们如何以及何时需要规范化。所以现在我需要知道这个电力监控系统的数据库设计是否需要规范化。
到目前为止我有一个 table 字段:
- monitor_id
- appliance_name
- 品牌
- 安培
- 正常运行时间
- power_kWh
- price_kWh
- 状态 (ON/OFF)
此监控系统分别监控多个电器(电视、冰箱、洗衣机)。 那么是否需要进一步规范化呢?如果是,怎么做?
老实说,您可以在不对每个数据库进行规范化的情况下逃脱。如果数据库将是一个影响很多人的项目,或者如果存在性能问题并且数据库做 OLTP,则规范化是好的。数据库规范化在许多方面归结为拥有更多的 table 本身和更少的列。非规范化涉及使用更少的 table 和更多的列。
我从未见过只有一个 table 的真实数据库,但没关系。有些人为了报告目的而对他们的数据库进行非规范化。所以并不总是需要规范化数据库。
你如何规范化它?您需要有一个主键(在一个唯一的列或两个或更多列的组合上,这些列的组合形式是唯一的)。您需要创建另一个 table 并具有外键关系。外键关系是存在于两个或多个 table 中的一对列。这些列需要共享相同的数据类型。它们充当从一个 table 到另一个的映射。 table 通常按实际用途分开。
例如,您可以有一个包含状态、正常运行时间和 monitor_id 的 table。这将与两个 table 之间的 monitor_id 有外键关系。然后,您原来的 table 可能会删除正常运行时间和状态列。您可以有第三个 table,包含品牌、型号和所有型号共有的东西(例如,power_kWh、安培等)。根据模型,可能与第一个 table 存在外键关系。然后可以从第一个 table 中删除品牌列(通过 DDL 命令 DROP),因为第三个 table 将与型号名称相关联。
要创建新的 tables,您需要调用 DDL 命令 CREATE TABLE newTable,在列上使用外键,实际上将由新的 [=30] 共享=]和原来的table。有了外键约束,新的 table 将共享一个列。当 table 高度规范化时,它们中的信息将更少(更少的列)。但是会有更多的 table 来容纳和存储所有数据。这样你就可以更新一个 table 而不是用一个大的 table 锁定非规范化数据库中的所有其他列。
一旦新 table 具有原始 table 中的一个或多个列中的数据,您可以从原始 table 中删除这些列(外键列除外).要删除列,您需要调用 DDL 命令 (ALTER TABLE originalTable, drop brand).
在许多方面,如果您尝试在规范化数据库中的数据库 table 上进行多次读写(提交许多事务),性能将会提高。如果您使用 table 作为报告,并希望在 table 中正常呈现所有数据,规范化数据库会损害性能。
顺便说一下,规范化数据库可以防止冗余数据。这可以使数据库消耗更少的存储空间 space 并使用更少的内存。
很高兴我们的数据库 normalize.It 可以帮助我们获得高效的数据,因为我们可以在此处防止冗余并节省内存使用量。在规范化 table 时,我们需要在每个 table 中有一个主键,并使用它连接到另一个 table,当主键(在每个 table 中是唯一的)是在另一个 table 上它被称为外键(用于连接到另一个 table)。
Sample you already have this table :
Table name : appliances_tbl
-inside here you have
-appliance_id : as the primary key
-appliance_name
-brand
-model
and so on about this appliances...
Next you have another table :
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....
您可以像这样添加更多 table,但只需确保每个 table 中都有一个主键。您还可以放置基数以使规范化更易于理解。