精华内容
下载资源
问答
  • 依赖关系
    千次阅读
    2021-06-15 15:45:36

    强制性依赖关系(又称硬依赖关系、硬强制关系):   

    法律、合同要求的;内在性质决定的;客观限制有关

    比如:先报名才能考试,你想要考试,必须先报名。

     

    选择性依赖关系

    不强制你一定要这样做;

    首选逻辑关系;优先逻辑;软逻辑

    例子:学习,先看书,后做题,还是先做题,后看书呢,没有强制要求,只有最优的做法。

    更多相关内容
  • 前几天总结范式,看到了几个网站的信息,把依赖关系总结的不错,参考的网址会放在后面,大家自主学习~现在综合一下,加上自己的理解依赖或函数依赖:在下面这个学生信息表中,student id这一列可以作为主键,因为每...

    前几天总结范式,看到了几个网站的信息,把依赖关系总结的不错,参考的网址会放在后面,大家自主学习~现在综合一下,加上自己的理解

    依赖或函数依赖:

    在下面这个学生信息表中,student id这一列可以作为主键,因为每一个ID号都可以唯一读取表中其他列的信息:

    例如通过id号10和11,可以从表中读取信息,信息是唯一的~

    dependency也被称为功能性依赖:Funational Dependency (感谢维基百科)https://zh.wikipedia.org/wiki/%E5%87%BD%E6%95%B0%E4%BE%9D%E8%B5%96​zh.wikipedia.org

    部分依赖:

    并不是所有的表格信息,可以完全依赖于一组数据就可以读取出完整信息。

    结合上面的学生信息表,我们建立另外一个学科信息表和得分信息表:

    在上面的的得分信息表中,Studentid和学科id一起可以查询学生具体科目的分数。得分表格中的主键,由student_id和subject_id共同组成(又叫做composite key)。

    但是表格中的老师信息,只由subjectid决定,和studentid无关。这就是部分依赖关系。表格中的一列属性仅有部分主键决定。

    如何去除部分依赖关系,因为这不符合2NL的规则要求:

    在这个例子中,直接将teacher信息加到决定其信息的表格即可(即加到subject表格)

    传递依存关系:

    继续上面的三个表格:学生信息表,学科信息表,得分表:

    并在得分表中加入两列,考试名字和总得分:

    其中,examname 取决于主键studentid和subjectid. total marks由exam name 决定。不同的考试类型,总分会发生变化。在这个表格中,exam name 不是主键,但是却决定了total marks. 这就是传递依赖。

    去除传递依赖的方法很简单,拆分表格。把exam name 和 total marks 拿出来组成新表,加一列exam-id :

    This is Transitive Dependency. When a non-prime attribute depends on other non-prime attributes rather than depending upon the prime attributes or primary key.

    参考网站(前面总结NL范式有提到,这里再次详细说明一下):Second Normal Form (2NF) of Database Normalization​www.studytonight.comThird Normal Form (3NF)​www.studytonight.com

    展开全文
  • makefile文件中的依赖关系理解

    千次阅读 2019-10-30 11:10:49
    首先,假设当前工程目录为prj/,该目录下有6个文件,分别是:main.c、abc.c、xyz.c、abc.h、xyz.h和Makefile。其中main.c包含头文件abc.h和xyz.h,abc.c包含头文件abc.h,xyz.c包含头文件...它们的依赖关系如图。 ...

    首先,假设当前工程目录为prj/,该目录下有6个文件,分别是:main.c、abc.c、xyz.c、abc.h、xyz.h和Makefile。其中main.c包含头文件abc.h和xyz.h,abc.c包含头文件abc.h,xyz.c包含头文件xyz.h,而abc.h又包含了xyz.h。它们的依赖关系如图。

                                                                                                                             

    第一次使用Makefile应该写成这个样子(假设生成目标main):

    1. main:main.o abc.o xyz.o
    2.     gcc main.o abc.o xyz.o -o main
    
    3. main.o:main.c abc.h xyz.h
    4.     gcc -c main.c –o main.o -g
    5. abc.o:abc.c abc.h xyz.h
    6.     gcc -c abc.c –o abc.o -g
    7. xyz.o:xyz.c xyz.h
    8.     gcc -c xyz.c -o xyz.o -g
    
    9. clean:
    10.    rm main main.o abc.o xyz.o -f

    虽然这样Makefile完全符合Makefile的书写规则,但是当代码文件再增加几倍后,再管理这些命令将会是一个噩梦!!!因此Makefile提供了默认规则和自动推导帮我们完成一些常用功能。然后,我们将Makefile修改如下:

    1. EXE=main
    2. CC=gcc
    3. OBJ=main.o abc.o xyz.o
    4. CFLAGS=-g
    5. $(EXE):$(OBJ)
    6.     $(CC) $^ -o $@
    
    7. clean:
    8.     rm $(EXE) $(OBJ) -f

    变量EXE,CC,OBJ分别代指目标程序名,编译器名,目标文件名。CFLAGS是C编译选项,它会附加在每条编译命令(gcc -c)之后。$(EXE)是对变量的引用,$^代指所有的依赖项——即$(OBJ),$@代指目标项——即$(EXE)。
    该命令等价于:$(CC)  $(OBJ) -o $(EXE)。

    这个Makefile只有目标文件链接的命令,源文件的编译命令都被忽略了!这正是Makefile的自动推导功能——它可以将目标文件自动依赖于同名的源文件,即:

    1. main.o:main.c
    2.     gcc -c main.c -o main.o
    
    3. abc.o:abc.c
    4.     gcc -c abc.c -o abc.o
    
    5. xyz.o:xyz.c
    6.     gcc -c xyz.c -o xyz.o

    按照上述方式,只要工程下增加了源文件后,只需要在OBJ初始化处增加一个*.o即可。但是这种方式是有问题的,Makefile的自动推导功能只会推导出目标文件对源文件的依赖关系,而不会在依赖关系中添加头文件!这导致的直接问题就是:当第一次执行make后,再次修改依赖的abc.h、xyz.h头文件的内容,自动推导功能只会去检测.c文件的修改时间戳,发现没有变化则不会再次编译生成main.o、abc.o、xyz.o文件,进一步导致不会进行重新make链接生成目标文件(因为检测到main.o、abc.o、xyz.o文件没有变化)!除非修改头文件后运行一次make clean,再运行make.

    为了能让make自动包含头文件的依赖关系,gcc为我们提供了一个编译选项(gcc -M,对于g++是-MM),能输出目标文件的依赖关系!比如执行:
    gcc -M main.c
    会终端显示:
    main.o:main.c abc.h xyz.h
    注意:如果是不在当前路径下的头文件会显示出全路径!

    如果将每个源文件的依赖关系包含到Makefile里,就可以使得目标文件自动依赖于头文件了!再次修改原先的Makefile:

    1. EXE=main
    2. CC=gcc
    3. SRC=$(wildcard *.c)  
    4. OBJ=$(SRC:.c=.o)    
    5. CFLAGS=-g            
    6. all:depend $(EXE)     
    7. depend:
    8.     @(CC)−MM(SRC) > .depend
    9. -include .depend
    10. $(EXE):$(OBJ)
    11.     $(CC)  $(OBJ) -o $(EXE)
    
    12. clean:
    13.     @rm $(EXE)  $(OBJ) .depend -f

    创建了一个伪目标:all,它依赖于目标depend和实际的目标EXE。而depend正是将所有源文件对应的目标文件的依赖关系输入到.depend文件,并被包含在Makefile内!这里有几个细节需要说明:
    1..depend文件是隐藏文件,避免和工程的文件混淆。
    2.include命令之前增加符号'-',避免第一次make时由于.depend文件不存在报告错误信息。
    3.SRC初始化为wildcard *.c表示当前目录下的所有.c源文件,这就省去了我们手动输入新增的源文件。
    4.OBJ初始化为SRC:.c=.o,表示将SRC中所有.c结尾的文件名替换为.o结尾的,这样就自动生成了源文件的目标文件序列。
    5.clean的rm命令钱@符号表示执行该命令时不回显命令。

    这样,每次执行make时都会重新计算目标文件的依赖关系,并输出到.depend文件,然后包含到Makefile后进行编译工作,这样目标文件的依赖关系就不会出错了!而我们得到了一个能自动包含源文件和识别头文件依赖关系的Makefile,将该文件应用于任何单目录的C/C++工程(C++需要修改部分细节,不作赘述)都能正常工作。

    但是,这种方式也有一定的不足,当头文件的依赖关系不发生变化时,每次make也会重新生成.depend文件。如果这样使得工程的编译变得不尽人意,那么我们可以尝试将依赖文件拆分,使得每个源文件独立拥有一个依赖文件,这样每次make时变化的只是一小部分文件的依赖关系。

    1.  EXE=main
    2.  CC=gcc
    3.  SRC=$(wildcard *.c)
    4.  OBJ=$(SRC:.c=.o)
    5.  DEP=(patsubst(SRC))
    6.  CFLAGS=-g
    7.  $(EXE):$(OBJ)
    8.      $(CC) $^ -o $@
    9.  $(DEP):.%.d:%.c
    10. @set -e;  
    11. rm -f $@;
    12. $(CC) −M $< > @.$$$;
    13. sed 's,$∗\.o[ :]*,\1.o $@ : ,g' < $@.
    14. > $@;
    15. rm -f @.$$$
    16. -include $(DEP)
    
    17. clean:
    18.     @rm $(EXE) $(OBJ) $(DEP) -f

    注意,上面10-15行其实是一条命令,make只会创建一个Shell进程执行这条命令,这条命令分为5个子命令,用;号隔开。执行步骤为:
    1)set-e命令设置当前Shell进程为这样的状态:如果它执行的任何一条命令的退出状态非零则立刻终止,不再执行后续命令。@表示makefile执行这条命令时不显示出来
    2)把原来的.d文件删掉。
    3)$<依赖的目标集(即*.c), -M表示生成文件依赖关系, $@表示生成的目标文件(即*.d),$$表示本身的ProcessID。注意,在Makefile中$有特殊含义,如果要表示它的字面意思则需要写两个$,所以Makefile中的四个$传给Shell变成两个$,两个$在Shell中表示当前进程的id,一般用它给临时文件起名,以保证文件名唯一。
    4)这个sed命令比较复杂,就不细讲了,主要作用是查找替换,并加入.d的依赖关系。
    5)最后把临时文件删掉。

    该Makefile增加了一个变量DEP,初始化为patsubst %.c,.%.d,$(SRC),表示将SRC中的以*.c结尾的源文件名替换为.*.d的形式,比如main.c对应着文件.main.d,这就是main.c的依赖关系文件,且是隐藏的。

    为了生成每个源文件的依赖文件,建立了目标依赖关系$(DEP):.%.d:%.c,该关系表示,对于目标DEP,通过$@可以访问一个依赖文件,通过$>则访问对应的同名源文件。命令部分使用连接,表示当前命令作为一个整体在一个进程内执行。该组命令的含义是:将gcc -M生成的信息输出到一个临时文件,然后在:之前加上当前的文件名输出到依赖文件。比如对于main.c生成的临时文件信息为:
    main.o:main.c abc.h xyz.h

    处理后依赖文件信息是:
    main.o .main.d:main.c abc.h xyz.h

    这样的依赖关系表示main.o和它的依赖关系文件的依赖项是一致的,只要相关的源文件或头文件发生了改变,才会重新生成目标文件和依赖关系文件,也就达到了依赖关系文件单独更新的目的了

    虽然如此,但是这样的Makefile也不是完美的。现假设工程目录内新增一个源文件lmn.c,按照Makefile的指令make后会产生.lmn.d依赖关系文件。而如果我们再删除lmn.c源文件后,重新make后.lmn.d依然存在!尤其是当重复增删很多源文件后,工程目录下可能会存在很多无用的依赖文件,当然这些问题可以通过make clean解决。

    通过前边的讨论,我们得到一个能在单目录工程下工作的通用Makefile,至于是实现为单独一个依赖文件的形式,还是每个源文件产生一个独立的依赖文件,要根据程序作者自己的喜恶来选择。虽然每种方法都有一些细微的瑕疵,但是不影响这个通用的Makefile的实用性,试想一下在工程目录下拷贝一份当前的Makefile,稍加修改便可以正确的编译开发,一定会令人心情大好。

    参考:https://www.cnblogs.com/sky-heaven/p/9735177.html

    参考:https://www.cnblogs.com/lidabo/p/6207175.html

    展开全文
  • [数据库原理] 函数依赖关系

    千次阅读 2021-08-19 15:46:35
    函数依赖是指关系中属性间的对应关系。 函数依赖是从数学角度来定义的,在关系中用来刻画关系各属性之间相互制约而又相互依赖的情况。函数依赖普遍存在于现实生活中,比如,描述一个学生的关系,可以有学号、姓名、...

    函数依赖概念

    函数依赖是指关系中属性间的对应关系。

    函数依赖是从数学角度来定义的,在关系中用来刻画关系各属性之间相互制约而又相互依赖的情况。函数依赖普遍存在于现实生活中,比如,描述一个学生的关系,可以有学号、姓名、所在系等多个属性,由于一个学号对应一个且仅一个学生,一个学生就读于一个确定的系,因而当“学号”属性的值确定之后,“姓名”及“所在系”的值也就唯一地确定了, 此时, 就可以称“姓名”和“所在系”函数依赖于“学号”,或者说“学号”函数决定“姓名”和“所在系”,记作:学号→姓名、学号→所在系。下面对函数依赖给出确切的定义。
    定义如下:
    设关系R(U,F),U是属性集,F是函数依赖集,令X、Y是U的两个子集
    对于任意R的一个关系r,X的每一个具体值,Y都有唯一值与之对应
    则,X决定函数Y,或Y函数依赖于X,记作X→Y(X是自变量,Y是因变量,一个X只能得到一个Y)

    若X→Y且Y→X,则X↔Y 不依赖则是在箭头上画上斜线 简单说,若X→Y,那么在关系r上任意两个元组,若ti[X] = tj[X],那么ti[Y] = tj[Y],在这里就要联想到函数的单映射和双映射了。

    函数依赖可以理解为属性之间的一种约束条件,它能够用于判断建立的关系表是否合理。

    三种函数依赖关系

    函数依赖分为:完全函数依赖部分函数依赖传递函数依赖

    1. 完全函数依赖

    设R为任一给定关系,X、Y为其属性集,若 X→Y,且X中的任何真子集X’,都有 X’!→Y,则称 Y 完全函数依赖于 X。

    白话文翻译一波:在函数依赖的基础上,我们的A属性是一个属性组,只有这个属性组中的全部属性才能确定唯一的B属性,A的任何一个子集都不可以。

    简易例子:通过AB能得出C,但是AB单独得不出C,那么说C完全依赖于AB.
    比如(学号,课名)->成绩,而单独的学号或者课名都不能确定成绩,这就叫完全函数依赖。

    2. 部分函数依赖
    设R为任一给定关系,X、Y为其属性集,若 X→Y,且X中存在一个真子集X’,满足 X’→Y,则称 Y 部分函数依赖于 X。

    白话文翻译一波:和完全函数依赖相比,A属性组中的部分属性就能确定B属性,其它属性可有可无。

    简易例子:通过AB能得出C,通过A也能得出C,通过B也能得出C,那么说C部分依赖于AB。
    比如(学号,课名)->姓名,其实只要学号就可以了,这样的依赖就叫部分函数依赖。

    2. 传递函数依赖
    设R为任一给定关系,X、Y、Z 为其不同属性子集,若 X→Y,Y!→X,Y→Z,则有 X→Z,称为 Z 传递函数依赖于 X。

    白话文翻译:如果A->B,B->C,并且B不能->A(防止直接A->C),那么我们可以得出结论A->C,叫做C传递函数依赖A。

    简易例子:通过A得到B,通过B得到C,但是C得不到B,B得不到A,那么成C传递依赖于A
    比如学号->系名,系名->系主任,并且(系名不能决定学号),所以系主任传递函数依赖学号。

    展开全文
  • Linux下查看依赖关系

    千次阅读 2021-05-10 22:45:16
    我们在开发Linux程序时,经常会遇到查看自己的编译结果是否正常调用外部共享库,至少在编译结果能够查看到这层依赖关系依赖关系有两种,一种是可执行文件依赖共享库,还有一种是共享库依赖共享库,查看方法如下。...
  • 依赖关系 在生产中,很多场景下类与类之间都存在一定的联系,类之间的关系包括:依赖、关联、聚合、组合、继承等 ,通过学习类之间的关系有利提高面向对象编程的能力,为解决生产实际问题打下基础。 假设有两个类,...
  • Java基础:如何在IDEA中查看依赖关系

    万次阅读 多人点赞 2020-09-05 06:26:20
    Maven提供了mvn dependency:tree来查看依赖关系,而IDE往往提供了更加便利的方式,比如Eclipse或者IDEA都有类似的功能,这篇文章简单说明一下如何在IDEA中查看依赖关系
  • UML六种依赖关系

    千次阅读 2019-07-10 19:19:45
    在UML类图中,常见的有以下几种关系:泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1.泛化(Generalization) 【泛化关系】:是一种...
  • 解决RPM包依赖关系

    千次阅读 2021-01-13 00:19:59
    前言:常用RPM的朋友们都知道,RPM简单易用,但是它的依赖关系是最头疼的!有时候比方说A包需要B包,B包需要C包,C包需要A包,好了。这就是最常见的死锁了(类似数据库有木有?)。这个时候有以下几种方式可以解决:A ...
  • 问题描述 有一些软件包无法被安装。如果您用的是 unstable 发行版...下列软件包有未满足的依赖关系: ros-melodic-cv-bridge : 依赖: libopencv-imgcodecs3.2 但是它将不会被安装 依赖: libopencv-dev 但是它将不会
  • 查看依赖关系 dependency walker(depends)

    千次阅读 2021-05-15 10:31:59
    Dependency Walker能检测出许多常见应用问题,例如缺少模块,无效的模块,导入/导出不匹配,循环依赖错误,不匹配的机器类型模块和模块初始化失败。所以对于程序员来说,Dependency Walker(以下简称Depends)是一项...
  • go mod查看依赖关系

    千次阅读 2021-08-04 09:33:13
    在使用 Go module 过程中,随着引入的依赖增多,也许你会发现go.mod文件中部分依赖包后面会出现一个// indirect的标识。这个标识总是出现在require指令中,其中// 与代码的行注释一样表示注释的开始,indirect表示...
  • IDEA中gradle查看依赖关系树 去掉重复的依赖 比如log4j和重复的log依赖
  • 管理服务之间的依赖关系

    千次阅读 2019-08-16 15:29:14
    在系统的各种组件之间,尤其是类、包、模块以及服务之间都可能存在依赖关系。依赖在某种程度上不可避免,但是过多的依赖势必会增加系统复杂性和降低代码维护性,从而成为团队开发的阻碍。在微服务架构中存在众多服务...
  • pip 查看依赖关系In the past, if you wanted to review your installed pip packages to see if there are updates available, you either had to use tools like pip-tools or check all of them manually. 过去...
  • Linux_RPM解决安装包依赖关系方法

    千次阅读 2021-02-03 14:16:37
    解决安装包依赖关系方法 一.linux应用程序基础 应用程序与系统命令的关系 角色 系统命令 应用程序 文件位置 一般在/bin和sbin目录中或为shell内部命令 通常在/usr/bin、/usr/sbin和/usr/local/b
  • rpm 查看依赖关系 依赖谁和被谁依赖

    千次阅读 2020-08-03 11:52:21
    1. 查询软件包依赖哪些软件 rpm -qR centos-release 安装R参数的意思就是requires就是依赖哪些软件包 rpm -qpR centos-release未安装 或 yum deplist centos-release 2. 查询软件包被哪个软件包依赖 rpm -q ...
  • java 类之间的依赖关系 -------转

    千次阅读 2019-02-27 10:49:37
    继承、实现、依赖、关联、聚合、组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者...
  • Flutter查看库的依赖关系

    千次阅读 2020-07-07 13:52:02
    dependencies,选中右键运行)查看依赖关系: 例如: +--- androidx.multidex:multidex:2.0.1 +--- androidx.annotation:annotation:1.1.0 +--- androidx.appcompat:appcompat:1.1.0 | +--- androidx.annotat
  • IDEA查看maven依赖关系的方法

    千次阅读 2019-12-18 11:04:32
    在terminal窗口下,进到相应的工程目录,...就能看到jar包的依赖关系: [INFO] com.edaily:edaily-api:jar:1.0-SNAPSHOT [INFO] +- org.springframework:spring-webmvc:jar:4.1.1.RELEASE:compile [INFO] | +- org...
  • Ubuntu-解决包依赖关系的三种办法

    千次阅读 2021-10-16 15:08:03
    安装软件包的时候,有时会遇到类似下图的依赖问题,无法正常安装,下面提供三种方法解决依赖问题。 1.可以尝试用下面方法处理依赖问题,紧跟前一条安装命令后面输入下面命令,然后再执行安装命令: sudo apt-...
  • Non-local:用于捕获长距离依赖关系

    千次阅读 2021-01-30 15:07:29
    non-local主要贡献是提出了一种新的神经网络操作方法,通过non-local的方式捕获长距离依赖关系,从而能够建模上下文信息;所提出的non-local块可以和神经网络进行自由组合,插入到任何位置,可以当做插件使用。
  • Linux 下, 可用ldd 工具查看依赖,但ldd无法查看具体的依赖关系,推荐一个好用的工具: sudo apt install pax-utils lddtree *.so 你会得到一个依赖树: lddtree cv2.cpython-37m-x86_64-linux-gnu.so cv2....
  • 数据库中表的依赖关系

    千次阅读 2019-06-09 12:20:25
    数据库中表的依赖关系 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术:Visual Studio 作者:李继金 撰写时间:2019年6月8日 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 提起...
  • sql三范式中关于三种依赖关系简述
  • npm 查看指定 package 的依赖关系

    千次阅读 2021-11-09 13:10:04
    npm 查看指定 package 的依赖关系 npm ls lodash
  • Maven 怎么查看包之间的依赖关系

    千次阅读 2021-07-16 10:04:52
    我们在使用maven项目时,经常会用到各种依赖库,那么如何清晰的查看各种依赖关系呢?怎么在pom文件中找到相应的配置呢?这就需要Maven Helper了,下面就分享一下在IDEA中如何安装插件并使用Maven Helper插件。 1...
  • java项目中经常会查看pom文件中jar包的依赖关系。 方式一:直接点击工具栏按钮 方式二:使用命令 在Terminal命令窗口使用命令:mvn dependency:tree 显示如下: 即可显示所有jar包的依赖关系,包括父级包含关系...
  • 设置任务之间的依赖关系 估算工期 创建工作分解结构 根据项目实际划分工作分解任务,可以通过excel进行分解任务, 下面是一个新房装修项目例子: 设置任务之间的依赖关系 1.理解任务之间的依赖关系图 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,298,595
精华内容 519,438
关键字:

依赖关系