zoukankan      html  css  js  c++  java
  • MYSQL约束03数据库的设计:多表之间的关系2

    多表之间的关系

    1、分类

      a. 一对一(了解):如人和身份证,分析:一个人只有一个身份证,一个身份证只能对应一个人

      b. 一对多(多对一):如部分和员工,分析:一个部门有多个员工,一个员工只能对应一个部门

      c. 多对多:如学生和课程,分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择

    2、实现关系

      a. 一对多(多对一):如部门和员工

       实现方式:在多的一方建立外键,指向一的一方的主键。

        

       b. 多对多:如学生和课程

       实现方式:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键

       

      c. 一对一(了解)如人和身份证

          实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。

          

       出现一对一关系,一般合成一张表。

    3、案例

      

    -- 创建旅游线路分类表tab_category 
    -- cid旅游线路分类主键,自动增长 
    -- cname旅游线路分类名称非空,唯一,字符串100 
    CREATE TABLE tab_category (  
        cid INT PRIMARY KEY AUTO_INCREMENT,  
        cname VARCHAR(100) NOT NULL UNIQUE 
    );
    -- 创建旅游线路表tab_route 
    /* 
    rid旅游线路主键,自动增长 
    rname旅游线路名称非空,唯一,字符串100 
    price价格 
    rdate 上架时间,日期类型 
    cid 外键,所属分类 
    */ 
    CREATE TABLE tab_route(  
        rid INT PRIMARY KEY AUTO_INCREMENT,  
        rname VARCHAR(100) NOT NULL UNIQUE,  
        price DOUBLE,  
        rdate DATE,  
        cid INT,  
        FOREIGN KEY (cid) REFERENCES tab_category(cid) 
    );
    -- 创建用户表tab_user
    /*  
     uid用户主键,自增长 
     username用户名长度100,唯一,非空 
     password密码长度30,非空 
     name真实姓名长度100 
     birthday生日 
     sex性别,定长字符串1 
     telephone手机号,字符串11 
     email邮箱,字符串长度100 
     */ 
     CREATE TABLE tab_user (  
        uid INT PRIMARY KEY AUTO_INCREMENT,  
        username VARCHAR(100) UNIQUE NOT NULL,  
        PASSWORD VARCHAR(30) NOT NULL,  
        NAME VARCHAR(100),  
        birthday DATE,  
        sex CHAR(1) DEFAULT '',  
        telephone VARCHAR(11),  
        email VARCHAR(100) 
    );
    -- 创建收藏表tab_favorite 
    /*  
    rid 旅游线路id,外键 
    date 收藏时间 
    uid用户id,外键 
    rid和uid不能重复,设置复合主键,同一个用户不能收藏同一个线路两次 
    */ 
    CREATE TABLE tab_favorite (  
        rid INT,  -- 线路id
        DATE DATETIME,  
        uid INT,  -- 用户id
        -- 创建复合主键  
        PRIMARY KEY(rid,uid), -- 联合主键 
        FOREIGN KEY (rid) REFERENCES tab_route(rid),  
        FOREIGN KEY(uid) REFERENCES tab_user(uid) 
    );
  • 相关阅读:
    Google快照查看八大绝招[小摘]
    CSS li或dd 浮动后增加图片时多出4PX问题
    ASP.NET C# 邮件发送全解
    ff ie7 ie6 css支持问题[拼网页标记]
    net 中 等同与ajax的效果 ICallbackEventHandler
    让DIV层位于flash对象之上
    屏蔽JS错误代码
    META标签的使用摘录,网页跳转特效
    【转】海量数据处理常用思路和方法
    MFC画图定时刷新,能否做到完全无闪烁
  • 原文地址:https://www.cnblogs.com/ajing2018/p/15706570.html
Copyright © 2011-2022 走看看