Sql 普通英语中的规范化
我理解数据库规范化的概念,但总是很难用通俗易懂的英语来解释它——尤其是在面试时。我读过这篇文章,但仍然觉得很难向非开发人员解释这个概念。首先想到的是“以不获取重复数据的方式设计数据库” 有人能用通俗易懂的英语解释数据库规范化的概念吗?有什么好的例子来说明第一范式、第二范式和第三范式之间的区别 假设你去面试,对方问:解释规范化的概念,以及如何设计规范化数据库Sql 普通英语中的规范化,sql,database,terminology,database-normalization,data-dictionary,Sql,Database,Terminology,Database Normalization,Data Dictionary,我理解数据库规范化的概念,但总是很难用通俗易懂的英语来解释它——尤其是在面试时。我读过这篇文章,但仍然觉得很难向非开发人员解释这个概念。首先想到的是“以不获取重复数据的方式设计数据库” 有人能用通俗易懂的英语解释数据库规范化的概念吗?有什么好的例子来说明第一范式、第二范式和第三范式之间的区别 假设你去面试,对方问:解释规范化的概念,以及如何设计规范化数据库 面试官在寻找什么关键点?好吧,如果我必须向我妻子解释的话,应该是这样的: 其主要思想是避免大数据的重复 让我们看一份名单,上面列出了一些人和
面试官在寻找什么关键点?好吧,如果我必须向我妻子解释的话,应该是这样的: 其主要思想是避免大数据的重复 让我们看一份名单,上面列出了一些人和他们来自的国家。我们没有为每个人保留与“波斯尼亚和黑塞哥维那”一样长的国家名称,而只是保留一个参考国家表的数字。因此,我们持有的不是100个“波斯尼亚和黑塞哥维那”,而是100个45。现在在未来,就像巴尔干国家经常发生的那样,他们分裂成两个国家:波斯尼亚和黑塞哥维那,我只需要在一个地方改变它。嗯,有点 现在,为了解释2NF,我会改变这个例子,让我们假设我们持有每个人访问过的国家的列表。 而不是像这样拿着桌子:
Person CountryVisited AnotherInformation D.O.B.
Faruz USA Blah Blah 1/1/2000
Faruz Canada Blah Blah 1/1/2000
我会创建三个表,一个表包含国家列表,一个表包含人员列表,另一个表将两者连接起来。这给了我最大的自由,我可以得到更改个人信息或国家信息。这使我能够像规范化所期望的那样“删除重复行”。我想说,规范化就像记笔记一样,可以说是: 如果你有一张便条说你必须 去买冰激凌而不必担心 正常化之后,您将拥有 另一张纸条上写着你得走了 买冰激凌,每件只有一件 每个口袋 现在,在现实生活中,你永远不会这样做 这是为什么要在数据库中进行呢 对于设计和实现部分,这时您可以回到“行话”并远离外行术语,但我认为您可以简化。首先,你会说你需要做什么,然后当标准化开始时,你会说你会确保以下几点:
我认为,如果你也谈到非规范化,以及你不可能总是拥有最佳结构并处于正常形式这一事实,可能会给人留下更深刻的印象。这就是我问受访者的问题: 为什么我们不为应用程序使用一个单个表,而不是使用多个表呢
答案当然是正常化。如前所述,其目的是通过更新异常来避免冗余 规范化是一组规则,用于设计通过关系连接的表 它有助于避免重复条目,减少所需的存储空间,防止重新构造现有表以容纳新数据,提高查询速度 第一种范式:数据应该以最小的单位分解。表不应包含重复的列组。每行用一个或多个主键标识。 例如,在“自定义”表中有一个名为“Name”的列,应将其拆分为“First Name”和“Last Name”。此外,“Custom”应该有一个名为“CustiomID”的列来标识特定的自定义 第二种范式:每个非键列都应该与整个主键直接相关。 例如,如果“自定义”表有一个名为“City”的列,则该城市应该有一个单独的表,其中定义了主键和城市名称。在“自定义”表中,将“City”列替换为“CityID”,并将“CityID”作为表中的外键 第三种范式:每个非键列不应依赖于其他非键列。
例如,在订单表中,“总计”列取决于“单价”和“数量”,因此应删除“总计”列。这不是一个彻底的解释,但标准化的一个目标是允许增长而不尴尬 例如,如果您有一个
user
表,并且每个用户都只有一个电话号码,那么在该表中有一个phonenumber
列就可以了
但是,如果每个用户都有一个可变数量的电话号码,那么像phonenumber1
、phonenumber2
等列会很尴尬。这有两个原因:
- 如果您的列上升到
,并且有人需要添加第四个数字,则必须向表中添加一列phonenumber3
- 对于电话号码少于3个的所有用户,其行上都有空列
相反,您希望有一个
phonenumber
表,其中每一行都包含一个电话号码和一个外键引用,user
表中它所属的行。不需要空白栏,每个用户都可以根据需要拥有最少或最多的电话号码。我已经多次阅读了关于规范化的wiki链接,但我从中找到了更好的规范化概述。这是一个简单易懂的关于规范化到第四范式的解释。读一读
预览:
什么是正常化
规范化是一个过程
奥加
Friends
Id | Name | Address
-------------------------
1 | John | The Road 1
2 | Bob | The Belltower
Cats
Id | Name | OwnerId
---------------------
1 | Kitty | 1
2 | Edgar | 2
3 | Howard | 2
Friends and cats
Id | Name | Address | CatName
-----------------------------------
1 | John | The Road 1 | Kitty
2 | Bob | The Belltower | Edgar
3 | Bob | The Belltower | Howard
(Table1)
tblEmployees
* EmployeeID
First
Last
(Other Fields)….
Project1
Project2
Project3
Etc.
**********************************
(Table2)
tblProjects
* ProjectNum
ProjectName
StartDate
EndDate
…..