Mysql 冲呀!!

Web数据库设计

0x1 关系型数据库概念:

至今为止,关系型数据库是最常用的数据库类型。他们强依赖关系代数中的一些优秀的理论基础。当使用关系型数据库的时候,并不需要了解关系理论,但是还是需要了解一些关于关系型数据库的基本概念

0x1x1

关系型数据库由关系组成,这些关系通常称为表。顾名思义,表就是一个数据表。如果曾使用过电子数据表,那你就已经用过表了。

如下,这个表包括了Boox-O-Rama 书店客户的姓名与地址

  • Customers
CustomerIDNameAddressCity
1Julia Smith25 Oak StreetAirport West
2Alan Wong1/47 Haines AvenueBox Hill
3Michelle Arthur357 North RoadYarraville

该表具有一个名称(Customers),几个数据列,每一列对应于一种不同的数据;以及每一行记录对应一个客户。

0x1x2

表中的每一个列都有唯一的名称,包含不同的数据。此外,每一列都有一个相关的数据类型。例如,在Customers表中,可以看到CustomerID 列是一个整型数据,而其他三列是字符串类型的数据。有时,列也叫字段或者属性。

0x1x3

表中的每一行代表一个客户。每一行具有相同的格式,因而也具有相同的属性。行也称为记录或元组(Tuple)

0x1x4 值

每一行有对应于每一列的单个值组成。每个值必须与该列定义的数据类型相同

0x1x5 键

我们必须有一个能够识别一个特定客户的办法。通常,名称并不是一个很好的方法—如果名字很普通我们就会明白为什么。以Customers表中Julie Smith 客户为例,当打开电话本的时候们会发现里面相同名字的不计其数。

  • 在Customers示例中我们已经做的,以及可能要在应用程序中做的就是为每一个客户分配一个唯一的CustomerID。其原则与我们拥有唯一的银行账号或者身份证号码一个道理,它使得将详细信息存储到数据库的操作更为方便。手动分配的身份识别号能够保证唯一性。对于一些真实信息的组合,同样也具有这个属性
  • 一个表中用来标识数据的列称为键或主键。 一个键可能由几列组成。例如,如果选择用“Julie Smith,of 25 oak street,Airport West”来标识julie,那么该键包含三列:名字,地址,城市,而且这样还不能保证其唯一性.

0x1x6 模式

数据库整套表的完整设计称为数据库的模式。它是数据库的设计蓝图。模式应该显示表格及表格的列,每个表的主键和外键。模式并不会包含任何数据,但是我们可能会希望在模式里使用示例数据来解析这些数据的含义。模式可以在非正式的图表,实体关系图标,或者以为本的格式表示。如以下代码所示:

  • Customers(CustomerID,Name,Address,City)
    在这一模式种,带有下划线的元素表示该元素是所在关系的主键。斜体元素表示该元素是其所在关系的外键。

0x1x7 关系

外键表示两个表中数据之间的关系。例如,Orders表到Customers表的链接关系表示Orders 表中一行与Customers 表一行的关系。
关系型数据库中有3种基本的关系类型.根据关系双方所含对象的多少,可以将这些关系分为3种关系:一对一,一对多和多对多

  • 一对一关系表示关系双方只有一个对象互相对应.例如,如果将Addresses 放入与Customers 表分离出的一个独立表中,则该表和Customers 表就是一对一关系.表Addresses 表到 Customers表到Addresses 表也可以有外键( 两者都不是必要的 )
  • 一对多关系里,一个表中的一行与另一个表中的多行具有互相关联的关系.在这个示例中,一个用户可能由许多订单,在这些关系中,包含多行的表对应于包含一行的表应该有一个外键.在这里,讲CustomerID 放到Order 表中以显示其关系.
  • 多对多关系里,表中的多行与另一个表中的多行具有相互关联的关系.例如:如果有两个表Books 和Authors.我们会发现一本书可能有两个作者完成,这两个作者又独自著有或者与其他人合著有其他著作.通常,这种关系类型各自都要有一个表,因此,肯恶搞需要三个表即 Books,Authors 和 Books_Authors .第三个表只包含其他两个表中的键,将其作为外键对,用来显示哪些作者写了哪些书.

0x2 设计web数据库:

知道什么时候需要一个新表,以及需要哪些键,需要掌握很高的技巧.

0x2x1 考虑真实建模对象

当创建一个数据库时,我们经常为现实世界的实体和关系建立模型,并且存储这些实体对象与关系的信息.

0x2x1 避免保存冗余的数据

保存冗余数据的数据库设计,这将占用空间并且导致数据异常.

  • 会产生两个基本问题
    • 首先是空间的浪费.
    • 第二个问题是它会导致数据更新的不一致,也就是说,在修改数据库之后容易产生数据不一致.数据的完整性将被破坏,以至于我们不知道哪些数据正确,哪些数据不正确,通常这会导致信息的丢失.
  • 这里,需要避免3种情况的更新异常:修改插入的删除异常.

Q.E.D.