文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

理解数据库范式:数据组织的艺术形式

2024-03-07 14:39

关注

引言

在现代信息系统中,数据库对于存储和管理数据至关重要。为了确保数据的完整性和一致性,需要遵循数据规范化的原则。数据库范式提供了用于组织和结构化数据的指导准则,从而优化数据存储和检索效率。

第一范式 (1NF)

1NF 要求表中的每列都包含原子值(不可再分的数据项)。换句话说,表中的每个单元格只能包含单个值,不能包含列表或数组。

例如,考虑以下违反 1NF 的表:

姓名 电话 地址 爱好
约翰·史密斯 555-1234, 555-5678 123 Main St 足球, 音乐

此表违反 1NF,因为 "电话" 和 "爱好" 列包含多个值。我们可以将表规范化为 1NF,如下所示:

姓名 电话 地址
约翰·史密斯 555-1234 123 Main St
约翰·史密斯 555-5678 123 Main St

| 爱好 | |---|---| | 足球 | | 音乐 |

第二范式 (2NF)

2NF 要求表中的每列都完全依赖于表的主键。这意味着表中的每列都必须与主键相关联,并且不能依赖于其他非主键列。

例如,考虑以下违反 2NF 的表:

订单 产品 数量 价格
1 书籍 10 10
2 书籍 5 5
3 CD 15 15
4 CD 10 10

此表违反 2NF,因为 "价格" 列依赖于 "产品" 列,而不是主键 "订单"。我们可以将表规范化为 2NF,如下所示:

订单 产品 数量
1 书籍 10
2 书籍 5
3 CD 15
4 CD 10
产品 价格
书籍 10
CD 15

第三范式 (3NF)

3NF 要求表中的每列都必须与主键完全依赖,并且不能传递依赖于其他列。换句话说,表中的每列必须直接与主键相关联,而不能间接地通过另一个非主键列相关联。

例如,考虑以下违反 3NF 的表:

订单 产品 数量 客户
1 书籍 10 约翰·史密斯
2 书籍 5 玛丽·琼斯
3 CD 15 彼得·帕克
4 CD 10 约翰·史密斯

此表违反 3NF,因为 "客户" 列依赖于 "订单" 列,但 "订单" 列并不是主键。我们可以将表规范化为 3NF,如下所示:

订单 产品 数量
1 书籍 10
2 书籍 5
3 CD 15
4 CD 10

| 客户 | |---|---| | 约翰·史密斯 | | 玛丽·琼斯 | | 彼得·帕克 |

要点总结

示例代码

可以使用 SQL 语句实现数据库范式化。以下示例演示如何将违反 1NF 的表规范化为 1NF:

CREATE TABLE orders (
  order_id INTEGER PRIMARY KEY,
  customer_id INTEGER,
  product_id INTEGER,
  quantity INTEGER
);

ALTER TABLE orders
DROP COLUMN phones,
DROP COLUMN hobbies;

CREATE TABLE phones (
  customer_id INTEGER PRIMARY KEY,
  phone_number VARCHAR(255)
);

CREATE TABLE hobbies (
  customer_id INTEGER PRIMARY KEY,
  hobby VARCHAR(255)
);

INSERT INTO orders (order_id, customer_id, product_id, quantity)
SELECT order_id, customer_id, product_id, quantity
FROM old_orders;

INSERT INTO phones (customer_id, phone_number)
SELECT customer_id, phone_number
FROM old_orders;

INSERT INTO hobbies (customer_id, hobby)
SELECT customer_id, hobby
FROM old_orders;
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯