数据库基本理论有哪些

介绍

今天就跟大家聊聊有关数据库基本理论有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<强> 1,数据库范式

第一范式:列不可分,如:【联系人】(姓名,性别,电话),一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到1 nf;

第二范式:有主键,保证完全依赖.eg:订单明细表【OrderDetail】(OrderID、ProductID UnitPrice,折扣,数量、ProductName),折扣(折扣)、数量(数量)完全依赖(取决)于主键(OderID ProductID),而UnitPrice, ProductName只依赖于ProductID,不符合2 nf;

第三范式:无传递依赖(非主键列一个依赖于非主键列B,非主键列B依赖于主键的情况),例如:订单表【订单】(OrderID、OrderDate CustomerID, CustomerName CustomerAddr, CustomerCity)主键是(OrderID) CustomerName, CustomerAddr, CustomerCity直接依赖的是CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合3 nf。

<强> 2,什么是反模式

范式可以避免数据冗余,减少数据库的空间,减轻维护数据完整性的麻烦。

然而,通过数据库范式化设计,将导致数据库业务涉及的表变多,并且可能需要将涉及的业务表进行多表连接查询,这样将导致性能变差,且不利于分库分表,因此,出于性能优先的考量,可能在数据库的结构中需要使用反模式的设计,即空间换取时间,采取数据冗余的方式避免表之间的关联查询。至于数据一致性问题,因为难以满足数据强一致性,一般情况下,使存储数据尽可能达到用户一致,保证系统经过一段较短的时间的自我恢复和修正,数据最终达到一致。

需要谨慎使用反模式设计数据库。一般情况下,尽可能使用范式化的数据库设计,因为范式化的数据库设计能让产品更加灵活,并且能在数据库层保持数据完整性。

有的时候,提升性能最好的方法是在同一表中保存冗余数据,如果能容许少量的脏数据,创建一张完全独立的汇总表或缓存表是非常好的方法。举个例子,设计一张”下载次数表”来缓存下载次数信息,可使在海量数据的情况下,提高查询总数信息的速度。

另外一个比较典型的场景,出于扩展性考虑,可能会使用BLOB和文本类型的列存储JSON结构的数据,这样的好处在于可以在任何时候,将新的属性添加到这个字段中,而不需要更改表结构。但是,这个设计的缺点也比较明显,就是需要获取整个字段内容进行解码来获取指定的属性,并且无法进行索引、排序,聚合等操作,因此,如果需要考虑更加复杂的使用场景,更加建议使用MongoDB这样的文档型数据库。

<强> 3,数据库事务

事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。

(1)。事务的特征

原子性(原子性):事务所包含的一系列数据库操作要么全部成功执行,要么全部回滚;

一致性(一致性):事务的执行结果必须使数据库从一个一致性状态到另一个一致性状态;

隔离性(隔离):并发执行的事务之间不能相互影响;

持久性(耐久性):事务一旦提交,对数据库中数据的改变是永久性的。

(2)。事务并发带来的问题

脏读:一个事务读取了另一个事务未提交的数据,

不可重复读:不可重复读的重点是修改,同样条件下两次读取结果不同,也就是说,被读取的数据可以被其它事务修改。

幻读:幻读的重点在于新增或者删除,同样条件下两次读出来的记录数不一样。

(3)。null

数据库基本理论有哪些