精华内容
下载资源
问答
  • 关系数据库里,关系模式(模型)是型,关系是值,关系模式...关系实质上是一个二维表,表每一条记录(行)在关系模式被称为元组,每个字段(列)被称为属性。 前者是描述结构,后者是具体数据。严格上不能划等号。
    关系数据库里,关系模式(模型)是型,关系是值,关系模式是对关系的描述。关系实质上是一个二维表,表中每一条记录(行)在关系模式中被称为元组,每个字段(列)被称为属性。
    前者是描述结构,后者是具体数据。严格上不能划等号。
    展开全文
  • 这个名字听起来似乎有些陌生, 平时在写代码也基本没什么应用场景, 然而, 出人意料的是, 元组跟程序设计密切相关, 可能有的同学不知道, 关系数据库中的「纪录」的另一个学术性的名称就是「元组」, 一条记录...

    元组在计算机领域有着特殊的意义,这个名字听起来似乎有些陌生, 平时在写代码也基本没什么应用场景, 然而, 出人意料的是, 元组跟程序设计密切相关, 可能有的同学不知道, 关系数据库中的「纪录」的另一个学术性的名称就是「元组」, 一条记录就是一个元组, 一个表就是一个关系, 纪录组成表, 元组生成关系, 这就是关系数据库的核心理念。

    元组是关系数据库不可脱离的部份, 但是在程序设计中, 元组并不显得那么不可或缺。 有一些编程语言本身就自带元组的语法, 比如说python、F#、haskell、scala等,另一些更为流行的编程语言却不带元组语法, 如Java、JavaScript、c++、c#等。

    元组并不像数组、对象那样是不可缺少的编程元素,但是, 使用它却能对编写代码带来很多的便利,尤其是当一个函数需要返回多个值的情况下。对于这种情况, 普遍的做法是定义一个对象,把函数需要返回的值作为对象的属性设置,然后把函数的返回值类型设为这个对象的类型, 函数直接返回这个对象就相当于返回多个值了。或者可以让这个函数返回一个map数据结构,具体的数据存在这个map里面。 然而, 这两种做法各有缺陷, 第一种方法虽然可靠, 然而代码会显的异常臃肿。需求本身很简单, 只要让函数返回多个值 , 然而用这种方法却需要事先定义好一个类型, 然后再实例化,再设置实例属性, 最后返回, 这样做的编码效率也未免太低了些。 第二种方法虽然快捷,却不够安全, 在函数的内部或许知道map里存储着什么样的值, 然而在函数外部, 却只知道这个函数的返回值是一个map,至于map里面存有哪些值,是什么类型都是一无所知的, 在多人开发的项目中这种弊端尤其明显 ,可悲的是这种做法在一些动态类型的语言中是首选的方案,这也是动态类型语言被吐槽安全性、可读性差的根本原因之一。 因此, 解决这类问题最好的方案就是使用元组。

    在语法本身支持元组的语言中, 元组是用括号表示的,如(int,bool,string)就是一个三元组类型, 它的值可以是(1,true,"abc")。 需要注意是的每一个元组类型都是唯一的, (int,bool),(bool,int),(string,double)虽然都是二元组, 然而它们却是不同的元组, 假如把这里的某一个元组作为函数的返回值, 在可读性和安全性方面虽然不如前面讲的第一种使用自定义类型的方案, 然而却比第二种使用map的方案要好的多, 至少使用元组能知道函数会返回几个值, 这些值又分别是什么类型, 而且它还有第二种使用map的方案编码简单快捷的优势。

    另人遗憾的是, 像java、c++、c#之类行业内主流的编程语言都不内置元组这一项特性,要使用元组必须自行实现,所幸现在这些编程语言都支持泛型, 实现非内置元组也变的异常简单, 但是毕竟是非语言内置的语法元素,使用起来肯定不如原生元组来的便捷。

    下面介绍一个第三方的Java元组库类库,名称叫做Javatuples,有自己的官方主页, github star数也有几百,在Java元组库领域差不多起着垄断的地位了。

    Javatuples定义的元组最大长度为10, 其实我觉得10元组的元素数量已经是太多了, 基本上没有什么可读性可言了。 元组类的定义如下

    f2940af480e1b4b65ede0eee02de2ab9.png

    Unit (1 element)

    Pair (2 elements)

    Triplet (3 elements)

    Quartet (4 elements)

    Quintet (5 elements)

    Sextet (6 elements)

    Septet (7 elements)

    Octet (8 elements)

    Ennead (9 elements)

    Decade (10 elements)

    f2940af480e1b4b65ede0eee02de2ab9.png

    这些原型类都是泛型类, 所以尖括号中的字母可以使用任意类型来代替。 下面是一个三元组的代码示例

    20180110225405765479.png

    举一反三,其余的元组类型也是同样的使用方式。

    因为Java的元组并非语言自身支持, 因此代码看起来Java味十足, 显得不那么优雅。然而, 写代码时除了书写便捷能提高效率以外,更要注重的是代码本身所表达的意途, 在这里就是利用元组本身的含意(作用)来对代码进行增强, 至于是用什么方式书写其实只是次要的。

    最后, 要注意的是泛型尖括号里面的类型不能是Java的基本类型, 如果要使用基本类型那也必须是经过装箱的基础类型,如int形必须转成Integer,bool型对应Boolean类型。

    展开全文
  • 关系运算及元组演算

    千次阅读 2019-10-10 15:51:11
    计算两个关系在集合理论上的并集,即给出关系R和S(两者有相同元/列数),R∪S的元组包括R和S所有元组的集合,形式定义如下: 式 t是元组变量(下同)。显然,R∪S=S∪R。 (2)差。计算两个关系的区别...

    写了半天,不知道这些有什么用,好繁琐,不知道从这些东西可以用在什么地方,有哪些场景。


    1. 关系运算

    关系代数的基本运算主要有并、交、差、笛卡尔积、选择、投影、连接和除法运算。
    (1)并。计算两个关系在集合理论上的并集,即给出关系R和S(两者有相同元/列数),R∪S的元组包括R和S所有元组的集合,形式定义如下:
    在这里插入图片描述
    式中 t是元组变量(下同)。显然,R∪S=S∪R。

    (2)差。计算两个关系的区别的集合,即给出关系R和S(两者有相同元/列数),R-S的元组包
    括R中有而S中没有的元组的集合,形式定义如下:
    在这里插入图片描述
    通俗点说,就是属于R但是属于S的元素。

    针对这种差运算的应用场景,举个例子来说,就两只股票组合,一个组合包含“东阿阿胶”,“涪陵榨菜”,“同仁堂”。
    而另一个组合只包括“东阿阿胶”,“涪陵榨菜”。那这两个的差就是“同仁堂”

    (3)交。计算两个关系集合理论上的交集,即给出关系R和S(两者有相同元/列数),R∩S的元组包括R和S相同元组的集合,形式定义如下:
    在这里插入图片描述
    显然,R∩S=R-(R-S)和R∩S=S-(S-R)成立。

    (4)笛卡尔积。计算两个关系的笛卡尔乘积,令R为有m元的关系,S为有n元的关系,则R×S是m+n元的元组的集合,其前m个元素来自R的一个元组,而后n个元素来自S的一个元组。形成定义如下:

    在这里插入图片描述
    若R有u个元组,S有v个元组,则R×S有u×v个元组。

    要记住笛卡尔积的数量是两者的乘积即可,相当于两者排列组合。

    (5)投影。从一个关系中抽取指明的属性(列)。令R为一个包含属性A的关系,则

    在这里插入图片描述

    (6)θ连接。θ连接从两个关系的笛卡儿积中选取属性之间满足一定条件的元组,记作:
    在这里插入图片描述

    其中A和B分别为R和S上元数相等且可比的属性组。θ为“=”的连接,称为等值连接,记作:
    在这里插入图片描述

    如果两个关系中进行比较的分量必须是相同的属性组,并且在结果中将重复的属性去掉,则称为自然连接,记作:
    在这里插入图片描述
    θ连接是对笛卡尔积进行处理,虽然现在我还不知道这个到底是干什么用的。

    二、元祖演算

    在元组演算中,元组演算表达式简称为元组表达式,其一般形式为{t|P(t)},其中,t是元组变
    量,表示一个元数固定的元组;P是公式,在数理逻辑中也称为谓词,也就是计算机语言中的条件表
    达式。{t|P(t)}表示满足公式P的所有元组t的集合。

    在元组表达式中,公式由原子公式组成,原子公式有下列两种形式:
    (1)R(s),其中R是关系名,s是元组变量。其含义是“s是关系R的一个元组”。
    (2)s[i]θu[j],其中s和u是元组变量,θ是算术比较运算符,s[i]和u[j]分别是s的第i个分量和u的第j个分量。原子公式s[i]θu[j]表示“元组s的第i个分量与元组u的第j个分量之间满足θ运算”。例如,“t[2]<u[3]”表示元组t的第2个分量小于元组u的第3个分量。这个原子公式的一种简化形式是s[i]θa或aθu[j],其中a为常量。例如,“t[4]=3”表示t的第4个分量等于3。

    在一个公式中,如果元组变量未用存在量词“ ”或全称量词“ ”等符号定义,那么称为自由元组变量,否则称为约束元组变量。公式的递归定义如下。

    (1)每个原子是一个公式,其中的元组变量是自由变量。
    (2)如果P1和P2是公式,那么, P1、P1∨P2、P1∧P2和P1→P2也是公式。
    (3)如果P1是公式,那么( s)(P1)和( s)(P1)也都是公式。
    (4)公式中各种运算符的优先级从高到低依次为θ、 和 、 、∧和∨、→。在公式外还可以加括号,以改变上述优先顺序。
    (5)公式只能由上述四种形式构成,除此之外构成的都不是公式。

    在元组演算的公式中,有下列四个等价的转换规则:
    (1)P1∧P2等价于 ( P1∨ P2)。
    (2)P1∨P2等价于 ( P1∧ P2)。
    (3)( s)(P1(s))等价于 ( s)( P1(s));( s)(P1(s))等价于 ( s)( P1(s))。
    (4)P1→P2等价于 P1∨P2。
    关系代数表达式可以转换为元组表达式,例如,R∪S可用{t|R(t)∨S(t)}表示,R-S可用{t|R(t)∧S(t)}表示

    看了上面的这么一段话,完全不懂元祖演算是什么玩意,哈哈哈。

    测试习题

    试题1
    若对关系R(A,B,C,D)进行π1.3(R)运算,则该关系运算与__B__等价,表示__B__。
    A.πA=1,C=3(R) B.πA=1∧C=3(R) C.πA,C(R) D.πA=1∨C=3(R)

    A.属性A和C的值分别等于1和3的元组为结果集
    B.属性A和C的值分别等于1和3的两列为结果集
    C.对R关系进行A=1、C=3的投影运算
    D.对R关系进行属性A和C的投影运算

    试题2
    若关系R、S如图5-3所示,则R与S自然连接后的属性列数和元组个数分别为__B__;
    π1,4(σ3=6(R×S))B
    图5-3关系R与S
    (3)A.4和3 B.4和6 C.6和3 D.6和6
    (4)A.πA,D(σC=D(R×S))B.πA,R.D(σS.C=R.D(R×S))
    C.πA,R.D(σR.C=S.D(R×S))D.πR.A,R.D(σS.C=S.D(R×S))
    在这里插入图片描述

    展开全文
  • 1.元组关系演算语言ALPHA 语法格式:GET 工作空间名(表达式1)[:条件] 【 DOWN | UP 表达式2】 2.简单检索 GET 工作空间名 (表达式1) 查询所有被选修课程号码 GET W (SC.Cno) 3.限定检索(带条件) GET 工作空间...

    1.元组关系演算语言ALPHA
    语法格式:GET 工作空间名(表达式1)[:条件] 【 DOWN | UP 表达式2】

    2.简单检索
    GET 工作空间名 (表达式1)

    查询所有被选修的课程号码
    GET W (SC.Cno)

    3.限定检索(带条件)
    GET 工作空间名 (表达式1):条件

    查询信息系(IS)中年龄小于20岁的学生的学号和年龄
    GET W (Student.Sno, Student.Sage) :
    Student.Sdept=‘IS’ ^ Student.Sage<20

    4.带排序的检索
    GET 工作空间名 (表达式1):条件 DOWN | UP 表达式2

    GET W (Student.Sno, Student.Sage):
    Student.Sdept=‘CS’ DOWN Student.Sage
    查询计算机科学系(CS)学生的学号、年龄,结果按年龄降序排序
    5. 带定额的检索
    GET 工作空间名(表达式1/定额)[:条件] 【 DOWN | UP 表达式2】

    取出一个信息系学生的学号
    GET W (1)(Student.Sno): Student.Sdept=‘IS’

    1. 定义元组变量
      格式:RANGE 关系名 变量名
      一个关系可以设置多个元组
      查询成绩为90分以上的学生名字与课程名字
      SC:表名
      RANGE SC SCX
      GET W (Student.Sname,Course.Cname):3SCX (SCX.Grade>=90 ^ SCX.Sno=Student.Sno ^ Course.Cno=SCX.Cno)
    展开全文
  • 直观上,元组关系演算ALPHA中的存在量词和全称量词并不太好理解。本文虽对其做了一定的解释,但是依然可能显得不够。建议大家最好结合表实际演算,增加... 简而言之,该学生在选修关系中,存在一个选修2号课程的元组
  • 删除被参照关系的某个元组而参照关系有若干元组的外码值与被删除的被参照关系的主码值相同 ...当参照关系中没有任何元组的外码值与要删除的被参照关系的元组的主码值相对应时,系统才执行删除操作,...
  • Python中的元组和集合

    2021-01-10 19:49:55
    集合2.1 什么是集合2.2 集合创建2.2 集合增、删、改、查操作2.2.1 集合元素判断操作2.2.2 集合元素新增操作2.2.3 集合元素删除操作2.3 集合生成式2.3.1 集合间相关关系2.3.2 集合数据操作2.3.3 集合...
  • 这个名字听起来似乎有些陌生, 平时在写代码也基本没什么应用场景, 然而, 出人意料的是, 元组跟程序设计密切相关, 可能有的同学不知道, 关系数据库中的「纪录」的另一个学术性的名称就是「元组」, 一条记录...
  • 元组和列表是近亲关系,所以元组和列表在实际使用上是非常相似。 >>> list1 = [1,2,3,4,5,6,7,8,9] >>> list1 [1, 2, 3, 4, 5, 6, 7, 8, 9] 我们主要从以下几个点来进行讨论学习: 创建和...
  • Python元组元组是另一个数据类型,类似于List(列表)。元组用"()"标识。内部元素用逗号隔开。但是元素不能二次赋值,相当于只读列表。#!/usr/bin/python# -*- coding: UTF-8 -*-tuple = ( 'abcd', 786 , 2.23, 'john'...
  • 关系演算可分为元组演算与域演算 关系演算是基于元组进行操作 而域演算是基于一列中的每个值进行演算,域演算的过程性较差 域演算有QBE语言
  • 元组关系的演算

    2014-02-26 17:13:00
    然后再对这种情况下定义的演算作适当的修改,保证关系演算中的每一个公式表示的是有限关系。 在元组关系演算系统中,称 {t|Φ(t)} 为元组演算表达式。其中 t 是元组变量, Φ(t) ...
  • 这个名字听起来似乎有些陌生, 平时在写代码也基本没什么应用场景, 然而, 出人意料的是, 元组跟程序设计密切相关, 可能有的同学不知道, 关系数据库中的「纪录」的另一个学术性的名称就是「元组」, 一条记录...
  • 候选码(Candidate Key):能唯一标识关系中元组的一个属性或属性集 性质:唯一性,最小性 二、关系主码和外码 主码(Primary Key):从多个候选码中选择一个作为查询、插入或删除元组的操作变量,被选用候选码...
  • 关系模型是一种基于表模型,含有列(attribute)和数据表即可视为relationship关系代数集合,重复元组总是会被排除。如 union 和 union all ,对于返回查询结果,前者会把重复项随机删除一个查找与排序均为不...
  • Java中元组的使用

    2019-09-30 03:50:45
    这个名字听起来似乎有些陌生, 平时在写代码也基本没什么应用场景, 然而, 出人意料的是, 元组跟程序设计密切相关, 可能有的同学不知道, 关系数据库中的「纪录」的另一个学术性的名称就是「元组」, 一条记录...
  • 关系演算 :以数理逻辑中的谓词演算为基础 按谓词变元不同分类 1.元组关系演算:以元组变量作为谓词变元的基本对象元组关系演算语言ALPHA2.域关系演算:以域变量作为谓词变元的基本对象域关系演算语言QBE 元组...
  • pg_dirtyread:从PostgreSQL关系中读取已死但未清空的元组
  • 一、关系候选码候选码(Candidate Key):能唯一标识关系中元组的一个属性或属性集性质:唯一性,最小性二、关系主码和外码主码(Primary Key):从多个候选码中选择一个作为查询、插入或删除元组的操作变量,被选用...
  • 包括一个运算集合,集合运算以一个或两个关系为输入,产生一个新的关系作为结果。 关系代数基本运算包括:选择、投影、并、集合差、笛卡尔积、更名。 其他运算:集合交、自然连接、赋值,可用基本运算来定义...
  • 数据库存储了大量的关系(表)之后,要对其进行增删查改等操作,其一般通过SQL类语言来实现,而语言实现基础就是对关系进行一定集合(关系代数)或逻辑处理(关系演算、域演算),然后返回处理结果。1、关系...

空空如也

空空如也

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

关系中的元组