# 数据库定义

# 基本定义

根据具体的Web项目需要 按照数据库原型设计规范 定义需要的数据库表设计。

# 表关系定义

使用框架数据库示例指定路径下的sql脚本创建betterlife数据库;该数据库严格按照[2.数据库原型设计规范]定义所有的表,并且包括了Web网站所有可能的表关系形态:

  • 一对一[has_one]

    • 关系数据库中两个表之间的一种关系,该关系中第一个表中的单个行只可以与第二个表中的一个行相关,且第二个表中的一个行也只可以与第一个表中的一个行相关。

    • 一对一关联关系的使用, 一对一关系在实际生活中是比较常见的,如果学生与身份证的关系,学生与档案的关系等等。

    • 例如示例数据库中

      • 主表:bb_user_user
      • 从表:bb_user_userdetail
      • 用户[主表]和用户详情[从表]就是一对一关系
  • 一对多[has_many]

    • 关系数据库中两个表之间的一种关系,该关系中第一个表中的单个行可以与第二个表中的一个或多个行相关,但第二个表中的一个行只可以与第一个表中的一个行相关。

    • 例如示例数据库中

      • 主表:bb_core_blog
      • 从表:bb_core_comment
      • 博客[主表]和评论[从表]就是一对多关系
  • 多对多[many_many]

    • 关系数据库中两个表之间的一种关系,该关系中第一个表中的一个行可以与第二个表中的一个或多个行相关。第二个表中的一个行也可以与第一个表中的一个或多个行相关。

    • 例如示例数据库中

      • 主表:bb_user_user
      • 从表:bb_user_role
      • 多对多关系表:bb_user_re_userrole
      • 用户[主表]和角色[从表]就是多对多关系

并根据实际开发需要定义了附属的关系形态:

  • 从属于一对一[belong_has_one]

    • 即从表中一字段关联主表中的主键

    • 例如示例数据库中

      • 主表:bb_user_user
      • 从表:bb_user_userdetail
      • 用户详情[从表]和用户[主表]就是从属于一对一关系
      • 在从表中存在字段user_id关联主表中的主键
  • 从属于多对多[belongs_many_many]

    • 例如示例数据库中
      • 主表:bb_user_user
      • 从表:bb_user_role
      • 多对多关系表:bb_user_re_userrole
      • 角色[从表]和用户[主表]就是从属于多对多关系

# 进一步分析

  • 多对多分解成一对多

    • 在将关系型数据库的表转换成面向对象的类进行代码的开发处理之后,作为开发者,我们往往发现,多对多都会分解为一对多来进行处理。

      • 例如示例数据库中
        • 主表:bb_user_user
        • 从表:bb_user_role
        • 多对多关系表:bb_user_re_userrole
        • 用户[主表]和角色[从表]就是多对多关系
    • 在这里:

      • 用户[主表]和多对多关系表的关系是一对多的关系

      • 角色[从表]和多对多关系表的关系是一对多的关系

      • 也就是说通过一个用户可以找到多个角色, 通过一个角色可以找到多个用户

      • 在本框架实际的开发中,多对多关系往往更多的是使用这种一对多的方式进行处理。