0
点赞
收藏
分享

微信扫一扫

【SQL基础学习】----基础篇(2)

知年_7740 2022-04-04 阅读 29
sqlmysql

一、数据库的设计

多表间关系
    1. 一对一       
        如:人与身份证   分析:一个人对应一个身份证,一个身份证对应一个人     
    2. 一对多(多对一)        
        如:部门和员工   分析:一个部门有多个员工,一个员工对应一个部门    
    3. 多对多        
        如:学生和课程   分析:一个学生可以选择多门课程,一门课程可以被多个学生选择


实现一对多(多对一)  
    如:员工和部门。  
    实现方式:
        在多的一方建立外键,指向一的一方的主键

实现多对多   
    如:学生与选课。  
    实现方式:
        多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段

作为第三张表的外键,分别指向两张表的主键{中间表中的主键关系是成对出现且不重复的,这种形式称为联合主键}

实现一对一  
    如:人和身份证。
    实现方式:
        可以在任意一方添加唯一外键指向另一方的主键     
        {一对一用的不多,因为可以合并}


利用数据库,在后台实现多表、元组的修改

案例一:       
    案例场景:
        一个用户上旅游网页收藏旅游线路      
    案例中实体分析:    
        用户实体{主键列,名字列,密码列};
        线路实体{主键列,名字列,价格列};
        旅游线路分类实体{主键列,名字列} 

    实体间关系分析:
        一个旅游线路分类对应多个线路,一个线路对应一个旅游线路分类;
        一个用户可以收藏多个线路,一个线路可以被多个用户收藏

    实体间外键设置:
        一对多{在多的一方设置外键指向一的一方},
        多对多{引入第三张表,实现两张主表中主键间的对应关系}

    SQL语句实现:       
        创建分类线路表:
            CREAT TABLE tab_category( 
                cid INT PRIMARY KEY AUTO_INCREMENT, 
                cname VARCHAR(100) NOT NULL UNIQUE
            ); 

        旅游线路表:
            CREAT TABLE tab_route( 
                rid INT PRIMARY KEY AUTO_INCREMENT, 
                rname VARCHAR(100) NOT NULL UNIQUE,
                price DOUBLE, rdate DATE, cid INT,
                CONSTRAINT  外键名称 FOREIGN KEY (cid) REFERENCES tab_category
            );

        用户表:
            CREATE TABLE tab_user( 
                uid INT PRIMARY KEY AUTO_INCREMENT, 
                username{用户昵称} VARCHAR(100) UNIQUE NOT NULL,
                upassword VARCHAR(30) NOT NULL, 
                uname{用户姓名} VARCHAR(100),
                birthday DATE,    
                sex CHAR(1) DEFAULT '男', 
                telephone VARCHAR(11), 
                email VARCHAR(100
            );    

        用户和线路的中间表:
            CREATE TABLE tab_favorite(
                rid INT, data DATETIME{收藏时间},
                uid INT {-- 创建复合主键}PRIMARY KEY(rid,uid),
                FOREIGN KEY(rid) REFERENCES tab_route(rid),
                FOREIGN KEY(uid) REFERENCES tab_user(uid)
        );
举报

相关推荐

0 条评论