精华内容
下载资源
问答
  • mysql 表之间的关联

    千次阅读 2018-11-08 17:27:27
    表之间的关联:都是使用forgine key来完成的,只是改变了一下玩法。 注意的点: 必须要先创建被关联的表,否则你的foreign key会报错。 【多对一】 这个已经写过了,就是一个表的多条记录对应另一张表的一条记录。...

    表之间的关联:都是使用forgine key来完成的,只是改变了一下玩法。

    注意的点: 必须要先创建被关联的表,否则你的foreign key会报错。

    【多对一】

    这个已经写过了,就是一个表的多条记录对应另一张表的一条记录。

    点击跳转 这篇博客里的forgine就是用的多对一的列子。

    【多对多】

    案例: (出版社表)>>>(图书表)  他们之间就是一个多对多,一个出版社可以有多本书,一个书也可以多个出版社。

    创建图书表

    create table book(id int primary key auto_increment,name char(12))charset=utf8;
    mysql> insert into book(name) values('xiyouji'),('shiji');
    
    mysql> select * from book;
    +----+---------+
    | id | name    |
    +----+---------+
    |  1 | xiyouji |
    |  2 | shiji   |
    +----+---------+
    

    创建出版社表

    create table press(id int primary key auto_increment,name char(12));
    
    mysql> insert into press(name) values('one press'),('two press');
    
    
    mysql> select * from press;
    +----+-----------+
    | id | name      |
    +----+-----------+
    |  1 | one press |
    |  2 | two press |
    +----+-----------+

    创建关联表

    create table press_book(id int primary key auto_increment,
    press_id int not null,
    book_id int not null, 
    foreign key(press_id) references press(id)
    on delete cascade 
    on update cascade,
    foreign key(book_id) references book(id) 
    on delete cascade 
    on update cascade);
    
    mysql> desc press_book;
    +----------+---------+------+-----+---------+----------------+
    | Field    | Type    | Null | Key | Default | Extra          |
    +----------+---------+------+-----+---------+----------------+
    | id       | int(11) | NO   | PRI | NULL    | auto_increment |
    | press_id | int(11) | NO   | MUL | NULL    |                |
    | book_id  | int(11) | NO   | MUL | NULL    |                |
    +----------+---------+------+-----+---------+----------------+
    
    mysql> insert into press_book(press_id,book_id) values(2,1);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into press_book(press_id,book_id) values(1,2);
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from press_book;
    +----+----------+---------+
    | id | press_id | book_id |
    +----+----------+---------+
    |  1 |        1 |       2 |
    |  2 |        2 |       1 |
    +----+----------+---------+
    
    # 出版社id为1的,对应了书籍id为2的 这就形成了多对多的关联,由于数据写的比较少,体现不出效果,后期可以自己添加更多的记录。
    

     

     【一对一】

    懒得写的,就是foreign key 后加一个 primary即可。

    万变不离其中。

     

    展开全文
  • PowerDesigner如何设计表之间的关联

    千次阅读 2020-08-12 18:45:18
    PowerDesigner如何设计表之间的关联 步骤/方法 在工具箱中找到参照关系工具: 由地区表到省份表之间拉参照关系,箭头指向父表,然后双击参照关系线,打开参照关系的属性: 在这里检查父表与子表是否...

    PowerDesigner如何设计表之间的关联

     

    步骤/方法

      1. 在工具箱中找到参照关系工具:

         

      2. 由地区表到省份表之间拉参照关系,箭头指向父表,然后双击参照关系线,打开参照关系的属性:

         

      3. 在这里检查父表与子表是否正确,如果因操作失误不正确的话可以点击下拉列表框选择。
        点击连接标签,进行字段关联设置:

        如上图,在这里设置子表的关联字段。
        OK,基本父表与子表的关联关系已经设置完毕,记住最好不要使用系统自动生成的名称,修改为自己的,否则表多了以后可以会出现重名。
    展开全文
  • Association 相信有很多同学都有使用过Hibernate框架的开发...中的三个注解,正好解析了表与表之间的关联关系。我也就不这这方面进行过多的赘述了。所以... 今天的主题是:我想在不涉及表与表之间的关联关系的情...
    img_2876f76a73e7ca18ee9b074196a50485.jpe
    Association

    相信有很多同学都有使用过Hibernate框架的开发经验,尽管现在开发人员对Hibernate的褒贬不一,我们暂且不谈这个话题。
    图中的三个注解,正好解析了表与表之间的关联关系。我也就不这这方面进行过多的赘述了。所以...
    今天的主题是:我想在不涉及表与表之间的关联关系的情况下对表进行关联。
    换成对应的表的意思就是,不设外键,实现多对多关联。话不多说 先上一张我自己的设计手稿:


    img_9bebe716b78970bf19e1a1ee2c74ebb7.jpe
    手稿

    数据库:(数据库的编码(utf8)与数据库引擎(InnonDB)已经设置好了)

    CREATE table t_user(
        uid int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
        username VARCHAR(100) not null,
        password VARCHAR(100) not null,
        createtime date not null
    )default CHARSET=utf8;
    
    -- 创建角色表
    CREATE TABLE t_role(
        rid int(10) not null PRIMARY KEY AUTO_INCREMENT,
        rname VARCHAR(100) not null
    )
    
    -- 权限表db_auth
    CREATE TABLE t_authority(
        aid int(10) not null PRIMARY KEY AUTO_INCREMENT,
        aname VARCHAR(100) not NULL,
        url VARCHAR(100) not NULL
    )
    -- 意义上的中间表 
    CREATE TABLE t_role_authority(
        rid int(10) not null,
        aid int(10) not NULL,
        KEY index_rid(rid),
        KEY index_aid(aid)
    )
    
    CREATE TABLE t_user_role(
        uid int(10) not null,
        rid int(10) not null,
        KEY index_uid(uid),
        KEY index_rid(rid)
    )
    
    img_a055ac723c5ef7aaa04d98f3866746ea.png
    没有任何关联关系的5张表

    项目框架选型我用的是SpringBoot+MyBatis


    img_d15f2c6a9ea936c17983d41d15387bf9.png
    项目结构

    Vo类:

    package cn.calista.sbm.pojo.Vo;
    
    import cn.calista.sbm.pojo.Authority;
    
    import java.util.HashSet;
    
    /**
     *  权限和角色也是多对多
     */
    public class AuthorityVo extends Authority {
        private HashSet<RoleVo> roleVos = new HashSet<>();
    
        public HashSet<RoleVo> getRoleVos() {
            return roleVos;
        }
    
        public void setRoleVos(HashSet<RoleVo> roleVos) {
            this.roleVos = roleVos;
        }
    
    }
    
    package cn.calista.sbm.pojo.Vo;
    
    import cn.calista.sbm.pojo.Role;
    
    import java.util.HashSet;
    
    /**
     * Role 和 User 多对对
     * Role 和 authority  多对多
     */
    public class RoleVo extends Role {
        private HashSet<AuthorityVo> authorityVos = new HashSet<>();
    
        private HashSet<UserVo> userVos = new HashSet<>();
    
        public HashSet<AuthorityVo> getAuthorityVos() {
            return authorityVos;
        }
    
        public void setAuthorityVos(HashSet<AuthorityVo> authorityVos) {
            this.authorityVos = authorityVos;
        }
    
        public HashSet<UserVo> getUserVos() {
            return userVos;
        }
    
        public void setUserVos(HashSet<UserVo> userVos) {
            this.userVos = userVos;
        }
    
    }
    
    package cn.calista.sbm.pojo.Vo;
    
    import cn.calista.sbm.pojo.User;
    
    import java.util.HashSet;
    
    /**
     * 用户和角色 多对多
     */
    public class UserVo extends User {
        private HashSet<RoleVo> roleVos = new HashSet<>();
    
        public HashSet<RoleVo> getRoleVos() {
            return roleVos;
        }
    
        public void setRoleVos(HashSet<RoleVo> roleVos) {
            this.roleVos = roleVos;
        }
    }
    

    这里说一句,虽然用户和角色是多对多的关系,但是我们在实际开发中并不会去关注一个角色被多少用户所拥有,我们关心的更多的是一个用户拥有哪些角色然后拥有多少权限。所以我们实际理解就可以理解为 用户和角色是 一对多的关系就OK

    至于XML Mapper 的代码我就不在粘了 直接上核心代码

    package cn.calista.sbm;
    
    import cn.calista.sbm.mapper.*;
    import cn.calista.sbm.pojo.*;
    import cn.calista.sbm.pojo.Vo.AuthorityVo;
    import cn.calista.sbm.pojo.Vo.RoleVo;
    import cn.calista.sbm.pojo.Vo.UserVo;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.BeanUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.List;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SbmApplicationTests {
    
        @Autowired
        private UserMapper userMapper;
    
        @Autowired
        private UserRoleMapper userRoleMapper;
    
        @Autowired
        private RoleMapper roleMapper;
    
        @Autowired
        private RoleAuthorityMapper roleAuthorityMapper;
    
        @Autowired
        private AuthorityMapper authorityMapper;
    
        @Test
        public void testMethod() {
            UserVo userVo = new UserVo();
            RoleVo roleVo = null;
            AuthorityVo authorityVo = null;
            //根据uid 查询到 user
            User user = userMapper.getUser(1);
            //拿到User 装配给 UserVo
            BeanUtils.copyProperties(user, userVo);
            //根据user的uid  查询 user_role 用户角色表  得到该 user所拥有的角色集合
            List<UserRole> userRoleList = userRoleMapper.getUserRoleList(user.getUid());
            //遍历 操作每一个 用户角色对象
            for (UserRole userRole : userRoleList
            ) { // 拿到角色
                Role role = roleMapper.getRoleById(userRole.getRid());
                roleVo = new RoleVo();
                // 拿到role  装配给 roleVo
                BeanUtils.copyProperties(role, roleVo);
                //通过每一个role的rid 查询中间表roleAuthority 的到该角色的权限集合
                List<RoleAuthority> roleAuthorites = roleAuthorityMapper.getRoleAuthorites(role.getRid());
                //遍历权限集合
                for (RoleAuthority roleAuthority : roleAuthorites
                ) {
                    //通过aid查询到权限
                    Integer aid = roleAuthority.getAid();
                    Authority authority = authorityMapper.getAuthorityById(aid);
                    authorityVo = new AuthorityVo();
                    BeanUtils.copyProperties(authority, authorityVo);
                    authorityVo.getRoleVos().add(roleVo);
                    //装配roleVo中的AuthorityVos
                    roleVo.getAuthorityVos().add(authorityVo);
                }
                //装配userVo属性roleVos
                userVo.getRoleVos().add(roleVo);
            }
            
        }
    }
    

    最后测试一下:
    我想知道id是 1 的用户拥有哪些权限?

    HashSet<AuthorityVo> authorityVos = roleVo.getAuthorityVos();
            Iterator<AuthorityVo> it = authorityVos.iterator();
            while (it.hasNext()){
                AuthorityVo next = it.next();
                System.out.println(next.getAname());
            }
    
    img_f765181dd4615ad75ce8427545406852.png
    测试结果

    再查看一下数据库


    img_dd0fbac20ed0d7285799cf58aa64f0f5.png
    user

    img_dff2688e429f0e1f37e752d5b28bd59c.png
    role

    img_49193d0182fa3533d29d9eb546cc30d1.png
    authority

    img_41f314a1f789f79ad7e560928699c77b.png
    role_Authority

    img_9d12fd3c1e0ebfef6185009aa7704763.png
    user_role

    最后,实现了关联。(并没有使用连接查询)

    img_b6916100578997ef6ed29449730d5e59.png
    image.png

    img_fbc3bc9957109ea5fa69723fc0d99382.png
    image.png

    img_dd65e878f322968dcf2fd8f771a46c84.png
    image.png

    img_7d604b440b15272f36e96ed915e1ebc1.png
    image.png

    img_e457c209fd9bdbeaa63aebb20eb491f8.png
    image.png
    展开全文
  • 就可以获得一条直线,要获得下还需要第三步操作 第三步:将鼠标换回箭头,然后点击线段,再拖动两表的黑点,进行位置选择,这样就完成了 如果需要删除关联 将线段选中,点击鼠标右键 选中edit 选择delete 将会看到这...
    • 第一步:首先找到ToolBox中的reference
      在这里插入图片描述
    • 第二步:然后把鼠标放在A表上,按住鼠标左键不放,拖到B表再放鼠标.就可以获得一条直线,要获得下图还需要第三步操作
      在这里插入图片描述
    • 第三步:将鼠标换回箭头,然后点击线段,再拖动两表的黑点,进行位置选择,这样就完成了
      在这里插入图片描述

    如果需要删除关联

    1. 将线段选中,点击鼠标右键
    2. 选中edit
    3. 选择delete
    4. 将会看到这个窗口,选择ok即可
      在这里插入图片描述
    展开全文
  • 工具使用很多公司都会使用Navicat ,我用小黄爪 ...之前在网上下过导模型类软件,效果不是太好,无意间发现经常用软件就有这样功能,惭愧惭愧 首先:右键库 (不是) 直接逆向数据库到模型 就可以了 ...
  • Mybatis--多表之间的关联映射(五)

    千次阅读 2018-04-23 13:57:02
    (一)关联关系概述 (二)一对一实例演示 项目文件结构 01创建t_idcard和t_person数据 CREATE TABLE `t_idcard` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code` varchar(255) DEFAULT NULL,...
  • 表之间如何建立关联映射

    千次阅读 2018-10-09 15:38:26
    首先要明白你创建的的多个数据表及其表与表之间的关联关系 举例User表(一方)和Customer表(多方) 建立一对多联系(在“多”方实体中添加“一”方实体的主键作为外键) 即一个用户可以创建多个客户,故在customer...
  • 65. 现在要做这个分销商没有个数,你也得在报表上出来,这个怎么写。 66. a.name拿到数据字典里面name字段 select a.name,count(*) from t_data_dict a join t_client b on a.id=b.client_level_id group ...
  • 1 foreign key 2则1多条记录对应...1一条记录唯一对应2一条记录,反之亦然分析时,我们先从按照上面基本原理去套,然后再翻译成真实意义,就很好理解了1、先确立关系2、找到多一方,吧关联字...
  • 最近项目组让整理一个我们项目的表结构设计说明书,就是梳理每张表的字段、描述、是否为空、字段类型等,理论上完成上面的就可以交差了,但我觉得要是能将所有的表之间的关联关系(EER)画出来就更好了,逼格一下...
  • 一对多表与表之间的关系 例如人和银行卡两个表的关系关联的所示,bank_card表中不加unique的属性,那么表示此表的person_id可以有多个重复的Int类型的值,我们估且认为它的值是1, 我们探讨下 。此表的好多条...
  • 常用的约束条件 在Navicat 中设置主键如下 ...例如:班级 与 学生 之间的关系 实现:而班级中的班级id(在班级中的班级Id 作为主键),学生定义一个字段(学生班级id)作为外键,该外键 ...
  • 当你写表时候有没有出现过一条数据要打很多行,而且有很多重复,看起来也极其不舒服,而且也不方便。 如: 张三 计算机成绩100分,如果再多加几科成绩,会是什么样子呢? 根据表就能发现,除了...表与表之间
  • 将两个数据按照相同字段进行关联,把属于不同的字段集中到同一个中,从而实现对两张数据中同一记录的不同字段的关联分析,实现两个数据集之间的拼接。关联完成后可以对符合条件的记录进行筛选。关联方式包括...
  • 在企业系统中经常会使用到给用户分配权限情况,往往在用户信息表和权限表之间还维护了一张角色表,即通过给用户添加角色,角色添加权限这样一种方式来给用户间接添加权限。 如示例 那么,查询用户权限多...
  • 新建“架构设计器”编辑页,将要 查看表关系 表,拖到 “架构设计器”编辑页。 如果关联关系已加上。拖动后,自动可见 可视化 表之间 关联关系,图形界面。
  • 方式二:建立POJO之间的互相引用在*.hbm或Annotation中配置"subclass"属性,对应三种类型的关联方式one-to-one/many-to-one/one-to-many.需要谨慎的使用Lazy和fetch关键字,避免不必要的查询,或者已经关闭Session后...
  • 微服务下数据表之间的耦合关系 1.问题产生 今天同事给我发了一个链接,问我这种做可视化建表的过程觉得怎么样?(如下) 同事的意思主要是,在微服务架构下,新建单一数据表,然后表内数据需要引用其他数据表的...
  • 在 UML 中, 泛化关系⽤用来⽰示类与类, 接⼝口与接⼝口之间的继承关系. 泛 化关系有时也称为”is a kind of”关系 在 UML 中泛化关系用一条实线空心箭头有子类指向父类 二 类之间的关系 ---- 实现关系 在 UML 中...
  • 1、不同地物目标、位置、地物结构、表面形态、介电性能,对雷达波束(电磁波束)反应不同。不同雷达波段、极化方式、入射角也会使地物在图像上形成不同色调和纹理。 雷达图像灰度是地物目标后向散射回波强度...
  • 销售(销售事实)、商品(各商品的信息)、关联商品(基于商品copy出的关联商品)以及一个含有可以用来判定为一个个体的唯一值的(如会员号、手机号、订单号等等)如下所示,为购物篮分许用到的和各自...
  • 数据表之间的关系

    2017-09-21 09:35:04
    一对多:从球队角度来说一个球队拥有多个球员 即为一对多多对一:从球员角度来说多个球员属于一个球队 即为多对一数据间一对多关系如下: 注:一对多/多对一关系简记:“多”要记住“一”主键,即每...
  • 例如两张列表之间的父子关系。 思路如下: 列表中新增列表项后会有一个唯一的ID,我们获取到该ID赋予子即可将两张列表相互关联。 效果如下: 实现起来也是很简单的。下面来动手实践下。 首先...
  • 多个模块之间的关联(4) 前面搭建了客户以及客户父模块的一个分支,另一个分支是产品线,还有一个是业务员,然后这三条线归并到订单之上。 前面我贴了我要搭建系统的一张,现在贴一下数据库的...
  • 外键与关联

    2011-07-18 20:07:05
    在数据库中,在表与表之间经常会存在关联关系,如下面州信息表States(其中Population单位为k),以及主要城市信息表Cities:(缺)(缺)Cities通过StateId字段和States关联。数据库中这种存储模式可以使得数据...
  • 数据库中表与表之间存在着三种关系,也就是系统设计中三种实体关系。下面进行简单阐述。一对一创建表原则有两种: 唯一外键对应 在任意一方添加一个外键来描述对应关系。如下所示: 或者 主键对应

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,333
精华内容 533
关键字:

表之间的关联图