课程: 编程基础知识:数据库

免费学习该课程!

今天就开通帐号,25,600 门业界名师课程任您挑!

多对多关系

多对多关系

在这节课中,我们来学习, 如何用连接表来建立多对多关系。 多对多关系是数据库里面, 另外一种常见的关系。 如果想把多个事物和另外多个事物关联起来, 用这种模型呢就非常的有用。 比如说我们有订单表, 用来追踪客户的单个订单。 每个客户可以有多个订单, 所以客户和订单之间是一对多的关系。 但是一个订单里面可以包含不止一道菜。 为了追踪订单里面有哪些菜品, 我们可以在订单表里面去添加列, 每列放一个菜品的键。 但实际上我们不应该这么做, 因为我们不知道一个客户, 最终可能会点多少道菜。 如果我们创建了 50 列, 为客户点的在这每道菜都预备一列, 那么大部分的字段,最后可能都是空的。 不但浪费存储空间,而且维护起来也很困难。 为了更好的解决这个问题呢, 我们就要用多对多关系。 一个订单可以包含多个菜品; 一个菜品也可以出现在多个订单里面。 当我们发现存在这样的关系时, 就会用这样的连结线,两端各有一个乌鸦脚。 同时呢,这也提醒我们, 需要多做一点工作。 在大多数的数据库管理工具里面, 我们没办法直接对多对多关系建模, 所以需要创建一个连接表。 这个表和我们想用的那两张表, 都构成了一对多的关系。 我们把这个表起名叫“订单菜品表”。 按照惯例,这种连接表, 通常是把多对多关系 左边的表明和右边的表明, 组合起来来进行命名。 这个连接表只需要两列, “订单编号”和“菜品编号”。 对于每个订单, 我们要为每道菜添加一行, 当我们查询客户订单的信息时, 就向数据库请求匹配订单号的行, 然后就会得到一个菜品列表, 或者更准确地说, 是每个订单包含的菜品编号列表。 可能只有一个,也可能有五个、十个, 或者 50 个。 这样做能够让订单表保持整洁, 同时又能让我们记录下来 每个订单包含的具体内容。 而且还能让我们轻松地查出来 多少个订单包含了这道菜。 我们可以继续使用连接表, 来创建其他多对多的关系。 比如说, 如果想记录一个客户喜欢的很多个菜品, 可以创建一个客户菜品表。 或者,如果我们有一个食材 或者过敏源的列表, 可以创建一 个“菜品食材表”, 或者“菜品过敏源表”。 这样就能随时掌握这些信息, 用来打印详细的菜单, 或者是在菜单上, 给可能对配料过敏的人添加提醒。 我们也可以对客户的活动, 建立一个连接表的模型。 比如说这个客户可能会参加提供的各种活动。…

内容