我已经阅读了很多关于规范化的技巧和教程,但我仍然很难理解我们如何以及何时需要规范化。所以现在我需要知道一个电力监控系统的数据库设计是否需要规范化。
到目前为止,我有一张有字段的桌子:
该监控系统分别监控多台电器(电视、冰箱、洗衣机)。那么它是否需要进一步规范化呢?如果是这样的话,是怎么做的?
发布于 2015-06-10 01:19:42
老实说,不需要对每个数据库进行规范化,您就可以逃脱。如果数据库将是一个影响许多人的项目,或者如果存在性能问题,并且数据库执行OLTP,那么规范化是很好的。数据库规范化在许多方面归结为拥有更多的表本身和更少的列。去正规化涉及减少列数较多的表。
我从未见过真正的数据库只有一个表,但没关系。有些人为了报告的目的去美化他们的数据库。因此,并不总是有必要对数据库进行规范化。
你如何使它正常化?您需要有一个主键(在唯一的列上,或者有两个或多个组合的列,它们的组合形式是唯一的)。您需要创建另一个表并具有外键关系。外键关系是两个或多个表中存在的一对列。这些列需要共享相同的数据类型。这些是从一张桌子到另一张桌子的地图。这些桌子通常是按现实世界的目的分开的.
例如,您可以有一个具有状态、正常运行时间和monitor_id的表。这将与两个表之间的monitor_id有一个外键关系。然后,原始表可以删除“正常运行时间”和“状态”列。您可以使用第三个表,包括品牌、模型和所有模型的共同点(例如,power_kWh、安培等)。可以根据模型与第一个表建立外键关系。然后,品牌列可以从第一个表中删除(通过DDL命令删除),因为第三个表将使其与模型名称相关联。
要创建新表,需要调用DDL命令create,该命令包含列上的外键,该外键实际上将由新表和原始表共享。使用外键约束,新表将共享一列。当表高度规范化时,它们中的信息将减少(列数减少)。但是将会有更多的表来容纳和存储所有的数据。通过这种方式,您可以更新一个表,而不是用一个大表对非规范化数据库中的所有其他列设置一个锁。
新表从原始表中获得列中的数据后,可以从原始表中删除这些列(外键列除外)。要删除列,您需要调用DDL命令(ALTER,drop品牌)。
在许多方面,如果您尝试对规范化数据库中的数据库表进行多次读写(提交多个事务),性能将得到改善。如果您使用该表作为报表,并且希望正常显示表中的所有数据,那么规范化数据库将损害性能。
顺便说一句,规范化数据库可以防止冗余数据。这可以使数据库占用更少的存储空间,使用更少的内存。
发布于 2015-06-10 01:55:12
拥有我们的数据库normalize.It帮助我们拥有一个高效的数据是很好的,因为我们可以在这里防止冗余并节省内存使用。对于规范化表,我们需要在每个表中有一个主键,并使用它连接到另一个表,当主键(每个表中唯一)位于另一个表上时,它被称为外键(用于连接到另一个表)。
示例您已经有了以下表:
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....
您可以添加更多这样的表,但只需确保每个表中都有一个主键。你也可以把基数,以使你的正常化更容易理解。
https://stackoverflow.com/questions/30745332
复制相似问题