CS145 Intro to databases 学习笔记1——Relational Model、XML、JSON

零、前言

1. 碎碎念

前几天真是煎熬啊,也可能是没写博客输出内容,学的有些不安QwQ。。学计算机网络在哈工大和湖科大两个视频之间左右横跳,概念的东西有些太多了看的很不爽,耐心濒临崩溃。。又去做一下GAN的实战案例,自己是写不出来的,跑别人的代码也死慢死慢的。最后决定先放一放,来看数据库系统好了

2. 本文概述

本文是学习standford CS145 Introduction to Databases系列视频的第一篇笔记,内容主要包括第二章第四章的三种数据模型:

  1. Relational Model
  2. XML
  3. JSON

视频链接:Introduction to Databases - Jennifer Widom - Stanford

个人博客页观感更佳喵:CS145 Intro to databases 学习笔记1——Relational Model、XML、JSON | Andrew的个人博客 (andreww1219.github.io)

一、Relational Model

1. Relational Model的介绍

1.1 Relational Model的定义

Schema是指对数据库结构的描述
Instance是指在数据库运作时出现的真实数据

Schema——structural description of relations in database
Instance——actual contents at given point in time

在Relational Model中

  1. 数据库是一些已命名的关系(或称为)的集合。如,学生表,学校表
  2. 每个表包含已命名的属性(或称为)。如学号,姓名
  3. 每个元组(或称为)有对应属性的值。
  4. 每个属性应指定类型 (或称为 范围)
  1. Database = set of named relations (or tables
  2. Each relation has a set of named attributes (or columns
  3. Each tuple (or row) has a value for each attribute
  4. Each attribute has a type (or domain)

示例:

Student Table

IDnamegenderGPA
1Andrewmale3.2
2Shirokofemale4.5

1.2 Relational Model的应用

字段的值允许不存在,即字段的值为NULL

NULL——special value for “unknown" or “undefined’

IDnamegenderGPA
1AndrewmaleNULL
2ShirokoNULL4.5

每一行需要有唯一标识

唯一标识Key可以是一个unique的值,也可以是多个字段的组合是unique的值的组合

Key——attribute whose value is unique in each tuple Or set of attributes whose combined values are unique

在SQL语句中创建表

Create Table Student(ID, name, GPA, photo)

Create Table College(name string, state char(2), enrollment integer)

2. 在Relational Model中查询

具体查询语言在后续学习,现展示两种语言的形式:

查找申请了斯坦福且GPA大于3.7的学生的ID:

  1. 关系代数(Relational Algebra)

Π I D σ G P A > 3.7 ∧ C N A M E = ′ S t a n d f o r d ′ ( S t u d e n t × A p p l y ) \Pi_{ID} \sigma_{GPA > 3.7 \wedge CNAME = 'Standford'} (Student \times Apply) ΠIDσGPA>3.7CNAME=Standford(Student×Apply)

  1. SQL

Select student.ID
From student, Apply
Where student.ID = Apply.ID
And GPA>3.7 and college=‘Stanford’

二、XML(Extensible Markup Language)

1. XML的介绍

1.1 XML的基本组成部分

  1. 嵌套的标签元素
  2. 标签的属性
  3. 文本

Basic constructs

  1. Tagged elements(nested)
  2. Attributes
  3. Text

1.2 well-formed XML

well-formed XML满足的条件:

  • 根元素是唯一的
  • 相互正确嵌套的标签(包括开始标志、结束标志)
  • 元素内的参数是唯一的

Adheres to basic structural requirements

  • Single root element
  • Matched tags, proper nesting
  • Unique attributes within elements

1.3 “Valid” XML

“Valid” XML代表XML文件不仅满足well-formed XML的条件,同时也满足其他对内容的限制条件,这些条件主要有以下两种描述方式:

  1. Document Type Descriptor(DTD)
  2. XML Schema (XSD)

Adheres to basic structural requirements
Also adheres to content-specific specification

  1. Document Type Descriptor(DTD)
  2. XML Schema (XSD)

2. DTD

根据视频中的DTD文件总结:

<!DOCTYPE rootName>:定义根元素  
<!ELEMENT eleName>:定义元素  
<!ATTLIST eleName attName1 attType1 #REQUIRED
                  attName1 attType1 #IMPLIED>
定义元素下的属性,包括属性名,属性类型,#REQUIRED表示必要,#IMPLIED表示不必要

通常用正则表达式中 | . * ? 等符号表示需要元素及其数量

#PCDATA 表示需要被解析的数据
CDATA 表示不需要被解析的数据
IDREFS 元素的ID组成的列表
ID 元素的ID

更多关于DTD:DTD 教程 | 菜鸟教程 (runoob.com)

示例(注释是自己写的QwQ):

<!DOCTYPE Bookstore [
    <!-- 可包含多个Book和多个Magazine的Bookstore-->
    <!ELEMENT Bookstore (Book*, Magazine*)>
    
    <!-- 包含一个Title和零/一个Remark的Book-->
    <!ELEMENT Book (Title, Remark?)>
    <!-- Book的属性必须两个字符类型数据,以及作者的ID列表-->
    <!ATTLIST Book ISBN CDATA #REQUIRED
                  Price CDATA #REQUIRED
                  Authors IDREFS #IMPLIED>
                  
    <!-- 包含一个Title的Magazine-->
    <!ELEMENT Magazine (Title)>
    <!ATTLIST Magazine Month CDATA #REQUIRED
                       Year CDATA #REQUIRED>
                       
    <!-- Title包含PCDATA Remark包含多个PCDATA或书的ID-->
    <!ELEMENT Title (#PCDATA)>
    <!ELEMENT Remark (#PCDATA | BookRef)*>
    
    <!-- 只包含属性的空元素-->
    <!ELEMENT BookRef EMPTY>
    <!ATTLIST BoookRef book IDREF #REQUIRED>
    
    <!-- Author由 First_Name 和 LastName组成,同时必须一个属性作为ID-->
    <!ELEMENT Author (First_Name, Last_Name)>
    <!ATTLIST Author Ident ID #REQUIRED>
    <!ELEMENT First_Name (#PCDATA)>
    <!ELEMENT Last_Name (#PCDATA)>
]>

3. XSD

参考:一个 XSD 实例 (w3school.com.cn)

<!-- 文件头定义标准的xml声明,使其符合基本的xml结构-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
</xs:schema>

<!-- -复杂类型的元素定义 -->
<xs:element name="eleName" type="complexTypeName"/>
<xs:complexType name="complexTypeName">
  <xs:sequence>
  ...
  </xs:sequence> 
  <xs:attribute name="attName" type="xs:string" use="required"/>
</xs:complexType>

<!-- 简单类型的元素定义-->
<xs:element name="eleName" type="xs:string"
            minOccurs="0" maxOccurs="unbounded"/>


<!-- 元素的主键 -->
<xsd:key name="eleNameKey">
    <xsd:selector xpath="eleName" />
    <xsd:field xpath"@attName" />
</xsd:key>

<!-- 其他元素主键的引用 -->
<xsd:key name="eleName3KeyRef" ref="eleName3Key">
    <xsd:selector xpath="eleName1/eleName2/eleName3" />
    <xsd:field xpath"@attName" />
</xsd:key>

三、JSON(JavaScript Object Notation)

1. JSON的介绍

1.1 JSON的特点

  1. 是用于序列化数据对象的标准
  2. 可读性强,便于交流数据
  3. 能很好地表达和存储结构不那么严格的数据
  4. 不再于JavaScript绑定,并且能在许多编程语言中转换
  1. Standard for “serializing" data objects, usually in files
  2. Human-readable, useful for data interchange
  3. Also useful for representing & storing semistructured data
  4. No longer tied to JavaScript
  5. Parsers for many languages

1.2 JSON的基本组成部分

JSON由以下成分递归定义

  1. 基本类型
    number, string, boolean, …
  2. 对象 {}
    对象包含键值对的集合,值可以是基本类型,也可以是数组和对象。
  3. 数组 []
    数组包括一列表的值,可以是基本类型,也可以是数组和对象。

Basic constructs(recursive)

  1. Base values
    number, string, boolean, …
  2. Objects {}
    sets of label-value pairs
  3. Arrays []
    lists of values

2. JSON Schema

从示例看如何使用JSON Schema规范JSON的内容:

{"type":"object", //"type": "属性类型"
  "properties":{  //object接properties
      "Books":{ 
          "type":"array", // array接items
          "items":{
              "type":"object", 
              "properties":{ 
                  "ISBN":{ 
                      "type": "string",
                      "pattern": "ISBN*" //正则表达式匹配
                  },
                  "Price":{ 
                      "type": "integer", 
                      "minimum": 0,  //最小数量
                      "maximum": 200 //最大数量
                  },
                  "Edition":{ 
                      "type":"integer", 
                      "optional":true //表示属性可选
                  }, 
// 省略

四、三种数据模型之间的比较

1. Relational Model、XML和JSON

RelationalXMLJSON
StructureTables
hierarchical tree, or graph
多层次的树或图
Nested Sets of Objects and Arrays
嵌套的对象和数组
SchemaFixed in advance
固定
“self-describing” Flexible
灵活
“self-describing” Flexible
灵活
QueriesSome simple expressive languages
有容易表述的查询语言
Less so
比关系模型要少
None widely used till 2012-2
到2012-2仍未有盛行的JSON查询语言
OrderingNoneImpliedArrays
ImplementationNative systems
有原生实现关系模型的系统
Add-on
作为关系型数据库的上一层的附加组件
Coupled with programming language,
used in NOSQL systems
常在编程语言中出现,或用于NOSQL系统

2. XML和JSON

XMLJSON
Verbosity
冗长程度
More
带结束标签
Less
Complexity
复杂性
More
属性、子元素和文本
Less
Validity
校验器
DTDs XSDs 常用JSON Schema 不常用
Prog. Interface
编程语言接口
Clunky “Impedence mismatch”
与编程语言中的数据结构不直接匹配
More direct
Querying
查询
XPath XQuery XSLT不常用的各种提案
  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值