第一章强调良好的模型和合理的数据库设计的重要性
sql的背后有着关系模型的数学理论做为基础,以前一直以为关系模型指的是一个表通过外键与其它表关联起来,实际却不是这样。关系模型不是因为不同表之间建立了关系,而是因为表内不同字段之间存在关系。几个值就处于表的同一行,它们之间就存在关系。关系理论的关键原理是:关系不包含重复数据,且记录之间没有顺序
规范化是关系理论很重要的一部分,它的原理是按照严格的逻辑要求,将松散的数据组织在一起,形成结构化的信息,这种严格性是通过不同级别的范式来界定的。最具代表性的是1NF,2NF,3NF,通常符合3NF的数据库也符合BCNF和5NF
1NF:原子性,确定主键,这是规范化的基础
以前的接触的教材仅从技术角度强调1NF指的每个字段都是不可分割的,从实用角度讲,原子性表示字段能在where子句中充分利用,如果where子句中必须引用字段的某一部分,则这个字段没有达到原子性的级别,必须进一步拆分。至于将数据拆分到什么级别应该根据应用需用,看应用如何使用数据
原子性有两个优点:
1.高效搜索的能力,因为常规索引通常以具有原子性的值作为键
2.从数据库保角度证数据的正确性
2NF:对键的完全依赖
非关键字段必须完全依赖于任一组候选关键字,不能存在部分依赖(A, B)-->(C, D), (A-->C)
3NF:检查属性独立性,不能存在转递依赖
除了唯一键所包含的字段外,不能由其它任何字段的值确定另一字段的值(A-->B, C, D), (C-->D)
违反2,3范式容易造成冗余,数据不一致,影响查询性能
还存在一种设计缺陷的征兆:太多的NULL值
如果表存在太多NULL,尤其是两个字段不可能同时有值,显然是违背了2NF或3NF。NULL有可能影响查询的优化。关系模型的完备性是以二值逻辑(two-valued logic, yes or no)为基础的,where子句中的条件必须明确,但NULL代表不确定。举个例子:
where color not in ('RED', null)
以上条件不会返回任何结果,因为SQL引擎无法确定null代表什么。如果表中出现了太多的空值,应当考虑是否需要引入新的表
理解子类型
子类型可能被误用,大量查询频繁引用父表不是高效的做法。如果父表保存着查询必需的信息,则所有查询都会来访问父表。子类型之间必须有逻辑差异性,千万不要受到OO思想的启发,而设计出继承性很强的schema
约束应明确声明
数据中存在隐含约束是一种不良设计,隐含约束通常只有人知道,但DBMS不知道,不能帮助优化器实现最高效的数据访问。应当尽可能多地定义约束,约束不仅有助于保证数据完整性,还为DBMS优化器提供了数据的重要信息
历史数据
处理不断变化并需要保存变化历史的数据,必须根据数据改变的快慢程度小心地设计策略
设计仅做到功能正确是不够的,设计时必须考虑性能,性能拙劣的罪魁祸首是错误的设计。后续的调优,可做为解决性能问题的补充手段。有时打着改善性能的旗号进行非规范化的处理,经常使性能问题变得更加糟糕,成功的数据库建模应该严格遵守基本的设计原则
分享到:
相关推荐
第1章,制定计划:为性能而设计 讨论如何设计高性能数据库 第2章,发动战争:高效访问数据库 解释如何进行程序设计才能高效访问数据库 第3章,战术部署:建立索引 揭示为何建立索引,如何建立索引 第4章,...
在中文版的《SQL语言艺术》中,第一章"制定计划:为性能而设计",作者着重讲解了如何在项目初期就考虑到性能因素,从而构建出高效能的数据库系统。这一章的内容可能包括以下几个方面: 1. **性能设计原则**:强调在...
《SQL语言艺术》一书深度探索了SQL语言的精髓与应用技巧,对于SQL数据库开发者、软件架构师以及数据库管理员(DBA)来说,是一份宝贵的资源。本书由资深SQL专家Stéphane Faroult撰写,他巧妙地借鉴了中国古代军事著作...
第1章,制定计划:为性能而设计 讨论如何设计高性能数据库 第2章,发动战争:高效访问数据库 解释如何进行程序设计才能高效访问数据库 第3章,战术部署:建立索引 揭示为何建立索引,如何建立索引 第4章,机动灵活:...
- **战略与战术的结合**:借用了军事战略的经典框架,《SQL语言艺术》教会读者如何在复杂多变的数据环境中制定有效的数据管理策略,将抽象的概念转化为具体的行动指南。 #### 结论 《SQL语言艺术》是一部对SQL语言...
《SQL语言艺术》这本书深入探讨了SQL这一关系型数据库查询语言的艺术性与实用性,旨在帮助读者充分发挥SQL的潜力,解决数据库性能瓶颈问题,尤其适用于大型应用程序。以下是对书中的主要知识点进行的详细解读: 1. ...
第一章“制定计划:为性能而设计”探讨如何在设计阶段就考虑到数据库的高性能需求。第二章“发动战争:高效访问数据库”关注程序设计与数据库访问效率的提升。第三章“战术部署:建立索引”介绍了索引的创建和作用。...
《Oracle经典编程艺术》是一本深入探讨Oracle数据库系统的专业书籍,涵盖了Oracle的各个方面,包括数据库设计、SQL查询优化、PL/SQL编程、性能调优、安全性管理等多个关键领域。这本书籍被誉为Oracle世界的绝对经典...
《Oracle Database 9i/10g/11g编程艺术:深入数据库体系结构(第2版)》是一本专为Oracle数据库开发者和管理员精心编写的权威指南。这本书全面覆盖了Oracle数据库9i、10g和11g版本的核心技术和最佳实践,旨在帮助...
3. **编程艺术**:这本书很可能是涵盖了数据库设计、SQL语言、PL/SQL编程、存储过程、触发器、索引、事务处理、安全性、备份与恢复等多个方面的内容。对于开发者和DBA来说,理解这些概念和技巧是至关重要的。 - **...
1. **SQL与PL/SQL编程**:Oracle支持SQL标准,同时扩展了PL/SQL,这是一种过程化的语言,用于创建存储过程、函数和触发器。了解如何编写高效的SQL查询和复杂的PL/SQL块是成为Oracle开发人员的基础。 2. **表和索引*...
《Oracle+9i_10g编程艺术:深入...这本书对于希望深入理解Oracle数据库的开发人员和管理员来说是一份宝贵的资源,它将帮助读者掌握Oracle的核心技术,提高解决问题的能力,并为日常数据库管理和性能优化提供指导。
2. SQL优化:深入理解SQL执行计划,掌握索引策略,以及如何利用Oracle的优化器提高查询性能。 3. 数据库设计与管理:包括表空间、分区、索引、约束等元素的创建和管理,以及数据安全性、备份恢复策略。 4. 高可用...
- **PL/SQL基础**:Oracle 9i和10g支持PL/SQL,这是一种过程化SQL语言,用于编写存储过程、函数、触发器等。理解其语法结构、变量声明、控制流程语句(如IF-THEN-ELSE,LOOP)至关重要。 - **高级SQL查询**:深入...
10. **备份与恢复**:Kyte详细介绍了Oracle的备份策略,包括RMAN(Recovery Manager)工具,以及如何制定有效的灾难恢复计划。 《9i&10g编程艺术》全面覆盖了Oracle数据库开发和管理的核心技能,对于希望深入理解...
综上所述,这个CD销售管理系统JSP+SQL的实现是一个典型的企业级应用实例,它展示了如何结合Web技术和数据库管理,构建一个实用、高效的业务系统。通过深入学习和分析,不仅可以掌握相关技术,还能为今后的项目开发...