任何人都可以帮助我知道mysql中的规范化是什么,在哪种情况下以及我们如何使用它...
提前致谢.
要坚持第一范式,你必须避免的一件事是重复组.而不是:
CustID Name Address Phone1 Phone2 Phone3
102 Jerry 234 East.. 555-2342 555-9854 555-2986
Run Code Online (Sandbox Code Playgroud)
您应该创建第二个电话号码表,然后在连接上创建:
CustID Name Address Phone
102 Jerry 234 East.. 555-2342
102 Jerry 234 East.. 555-9854
102 Jerry 234 East.. 555-2986
Run Code Online (Sandbox Code Playgroud)
有时,它有点模棱两可,而且很难判断一组列标题何时合格.例如,假设您目前在每个硬件上运行两次测试.您的第一个数据库设计产生了最横向的方法:
设计1
SN Test1_Max Test1_Min Test1_Mean Test2_Max Test2_Min Test2_Mean
2093 23 2 15 54 -24 45
Run Code Online (Sandbox Code Playgroud)
显然,这是一个重复的组,可以更容易地表示为(在"部件"和"测试"之间的连接):
设计2
SN Test Max Min Mean
2093 1 23 2 15
2093 2 54 -24 45
Run Code Online (Sandbox Code Playgroud)
但是,你可以更加垂直:
设计3
SN Test Statistic Value
2093 1 Max 23
2093 1 Min …Run Code Online (Sandbox Code Playgroud) 我正在从网上完成规范化练习,以测试我的数据规范化能力.这个特殊问题发现于:https://cs.senecac.on.ca/~dbs201/pages/Normalization_Practice.htm(练习1)
可以从此表创建的非标准化表是:
为了符合First Normal表单,我必须通过将visitdate,procedure_no和procedure_name移动到它们各自的表来摆脱表中的重复字段:
这也符合2NF和3NF,这使我怀疑我是否正确执行了标准化过程.如果我没有从UNF正确地搬到1NF,请提供反馈.
我在1NF形式的DBMS中读过类似下面的内容.
有一句话如下:
"每列都应该是原子的."
任何人都可以通过一个例子向我解释一下吗?
我想知道是否有人对如何规范化数据库有任何建议.现在,我并不是指设计结构,我的意思是如何将数据库数据从旧结构实际移动到新的标准化结构.我知道我可以编写类似PHP脚本的东西,但我想知道是否有办法在SQL中执行此操作.特别是MySQL.
**编辑:有没有人尝试过像SwisSQL这样的东西?这是一个迁移工具,但我不确定它是否能满足我的要求.
许多 DBMS 开始允许在数据库中使用 JSON。这违反了 1NF 吗?
1NF 的规则之一是不在一列中存储多个值。但我们存储的是 JSON,它可以包含键值对。这是否违反规则?
考虑一下这个表:
+-------+-------+-------+-------+
| name |hobby1 |hobby2 |hobby3 |
+-------+-------+-------+-------+
| kris | ball | swim | dance |
| james | eat | sing | sleep |
| amy | swim | eat | watch |
+-------+-------+-------+-------+
Run Code Online (Sandbox Code Playgroud)
爱好的类型没有优先权,因此所有的爱好都属于同一个领域.也就是说,表格中的爱好可以在任何hobby#列上移动.无论哪一列,特定的爱好都可以在任何列中.
该表违反了哪个数据库规范化规则?
问:"业余爱好列表是否按任意顺序"?
答:是的.
问:表格有主键吗?
答:是的,假设密钥是一个AUTO_INCREMENT名为的列类型user_id.
问题是列hobby#是否重复组.
旁注:这不是作业.这是一种辩论,它始于 SQL问题的评论 - 基于几个列将记录从一个表匹配到另一个表.我相信这个问题是违反1NF的明显例子.
然而,另一个人认为我" 已经堕落了1NF的谬误之一. "这个论点是基于" 关于第一范式的事实和谬误 "的"重复群体的模糊性" 一节.
我不是写这个来羞辱他,我或任何人.我写这篇文章,因为我可能错了,而且我有一些东西显然是错过的,也许这个家伙并没有对我说好.
database database-design relational-database database-schema database-normalization
提前感谢您的知识.我正在攻读微软技术考试,其中一个练习题是:
创建主键满足第一个普通表单.对或错?
我个人认为它是假的,因为第一个正常形式是摆脱重复的组.但是文中有一句话(数据库基础,微软出版社考试98-364),其中说明如下:
"第一个规范化形式(1NF)表示数据采用实体格式,这基本上意味着必须满足以下三个条件:•表格必须没有重复记录.一旦为表格定义了主键,就可以了已达到第一个标准化形式标准."
请帮助我理解这一点,请解释,就像我五岁.谢谢.
我想通过 MySql 的语法了解为什么在同一个表中不允许两个主键的原因。我了解复合键,这与此无关。
我不明白为什么不允许在同一个表中使用两个单独的主键。但是我们可以将一列作为主键,将另一列作为唯一的且不为空。这实际上充当了两个不同的主键,因为我们可以使用这些键中的任何一个来清楚地识别一行。为什么第一个是不允许的,而后者是?
我试图弄清楚逻辑,但偶然发现了 Codd 的 12 条规则的第 2 条,它说
通过使用表名、主键值和列名的组合,可以保证关系数据库中的每个数据(原子值)都可以在逻辑上访问。
对于单个数据值,表名、主键值和列的组合是否应该是唯一的,还是可以有多个组合来保证访问?为什么或者为什么不?
编辑:由于问题被确定为可能重复,我将在下面解释它的不同之处 其他类似的问题是
一个表中可以有多个主键吗?
答案是否定的。
我的问题是为什么?理由是什么?
Codd 打算根据规则 2 说什么?
如果允许多个单独的主键会出现什么问题?
在给定的表中,如果没有主键甚至不可能创建复合主键,那么该表的正常形式是什么?
如果它的零(0NF)添加一个新列并使其成为主键会将这个表转换为 1NF ?
database database-design relational-database database-normalization