分布式数据库第一章

发布时间 2023-09-19 20:07:36作者: 清澈的澈

模式--概念模式(关系就是表)

RELATION EMP{  -- 定义了一个关系(表),命名为EMP
    KEY={ENO}  -- 关键字
    ATTRIBUTE={  -- 属性
        ENO:CHAR(9)
        ENAME:CHAR(15)
        TITLE:CHAR(10)
    }
} 
  • ENO:字符类型,长度为9,表示员工编号。
  • ENAME:字符类型,长度为15,表示员工姓名。
  • TITLE:字符类型,长度为10,表示员工职称。

创建内部关系

INTERNAL_RELA EMPL{ -- internal_relation 定义了一个内部关系 名为EMPL
    INDEX ON E# CALL EMINX  -- 定义了一个名为"EMINX"的索引,该索引是基于"E#"属性的
    FIELD={
        HEADER:BYTE(1)
        E#:BYTE(9)
        ENAME:BYTE(15)
        TITLE:BYTE(10)
    }
}
  • HEADER:字节类型,长度为1。这个字段可能用于存储关系的头部信息或标识符。
  • E#:字节类型,长度为9。这个字段表示员工编号。
  • ENAME:字节类型,长度为15。这个字段表示员工姓名。
  • TITLE:字节类型,长度为10。这个字段表示员工职称。

索引是一种数据结构,用于提高数据库查询的性能。它可以加快对特定属性值的记录定位和访问速度。通过创建索引,可以预先构建一个按照指定属性排序的数据结构,以便更快地检索和访问数据。

创建外部关系

CREATE VIEW PAYROLL(EMP_ENO, EMP_NAME, SAL)
AS SELECT EMP.ENO,EMP.NAME,PAY.SAL
FROM EMP,PAY
WHERE EMP.TITLE=PAY.TITLE
  1. CREATE VIEW PAYROLL(EMP_ENO, EMP_NAME, SAL):这行代码创建了一个名为"PAYROLL"的视图,并定义了视图的列。视图是一个虚拟表,它是基于一个或多个表的查询结果而创建的。在这个例子中,视图"PAYROLL"包含了三列,分别是"EMP_ENO"、"EMP_NAME"和"SAL"。
  2. AS SELECT EMP.ENO,EMP.NAME,PAY.SAL FROM EMP,PAY WHERE EMP.TITLE=PAY.TITLE:这行代码定义了视图的查询语句。它从"EMP"表和"PAY"表中选择了"EMP.ENO"、"EMP.NAME"和"PAY.SAL"这三个列,并使用"WHERE"子句来指定了连接条件。
    • EMP.ENO和EMP.NAME是从"EMP"表中选择的列,表示员工的编号和姓名。
    • PAY.SAL是从"PAY"表中选择的列,表示员工的薪水。
    • WHERE子句用于指定连接条件,即"EMP.TITLE=PAY.TITLE",表示只选择那些在"EMP"表和"PAY"表中具有相同职称的记录。

通过创建这个视图,可以方便地查询和访问包含员工编号、员工姓名和薪水的数据。视图提供了一个逻辑上的表,可以简化复杂的查询操作,并提供更直观和易于使用的数据视图。

除运算的一个例子

在关系代数中,除运算是一种用于计算两个关系之间的差异的操作。它通常用符号"÷"表示。

除运算的目的是找到满足特定条件的元组。它的结果是一个新的关系,其中包含满足除运算条件的元组。

除运算用于找出满足某个条件的关系中的元组,而不在另一个关系中的元组。

除运算的语法如下: R ÷ S

其中,R和S是两个关系,R ÷ S表示从关系R中删除满足关系S中的条件的元组。

除运算的条件可以是简单的等式、不等式或其他逻辑条件。它们用于筛选出满足条件的元组,并从结果关系中删除它们。

除运算在关系数据库中非常有用,可以用于解决各种查询和数据操作问题。它可以帮助我们找到满足特定条件的数据,并从关系中删除它们,以便进行进一步的分析和处理。

需要注意的是,除运算可能会导致结果关系的大小变化,因为它删除了一些元组。因此,在使用除运算时,我们需要仔细考虑结果的影响,并确保它符合我们的预期和需求。

学生表包含以下列:学生ID(StudentID)和学生姓名(StudentName)。 课程表包含以下列:课程ID(CourseID)和课程名称(CourseName)。

现在,我们想找出选修了所有课程的学生。这可以通过执行除法运算来实现。

首先,我们需要找到选修了所有课程的学生ID。我们可以使用以下查询来获取这些学生ID:

SELECT StudentID FROM Students 
GROUP BY StudentID 
HAVING COUNT(DISTINCT CourseID) = (SELECT COUNT(*) FROM Courses)

这个查询将返回选修了所有课程的学生ID。

然后,我们可以使用这些学生ID来获取他们的姓名。我们可以使用以下查询来实现:

SELECT StudentName FROM Students 
WHERE StudentID IN 
( 
    SELECT StudentID FROM Students 
    GROUP BY StudentID 
    HAVING COUNT(DISTINCT CourseID) = (SELECT COUNT(*) FROM Courses) 
)

这个查询将返回选修了所有课程的学生姓名。

什么不是分布式数据库系统

  • 松耦合/紧耦合的多处理器系统
  • 网络节点上的集中式数据库系统
  • 联邦数据库系统