title |
---|
Data Models |
概念 | 类比 | 定义 |
---|---|---|
relation | table | 一组 tuples 之集 |
tuple | row | 一组 attributes 的取值 |
attribute | column | |
domain | 某个 attribute 的许可值之集 | |
relation schema | definition of a type | 一组 attributes 及其 domains |
relation instance | value of a variable |
概念 | 定义 |
---|---|
superkey | tuples 不同则取值不同的一组 attributes |
candidate key | 没有真子集为 superkey 的 superkey |
primary key | 设计者选择用于区分 tuple 的 candidate key |
foreign-key constraint | 关系 |
referential-integrity constraint | 关系 |
概念 | 符号 |
---|---|
relation name | title of the box |
attributes | listed inside the box |
primary key | underlined attributes |
foreign-key constraint | a single-head arrow from |
referential-integrity constraint | a double-head arrow from |
类型 | 特点 | 代表 |
---|---|---|
imperative | 用户直接给出操作序列;改变状态变量 | |
functional | 函数式操作;不改变状态变量 | relational algebra |
declarative | 用户不直接给出操作步骤 | tuple/domain relational calculus |
若两个关系
名称 | 符号 | 示例 |
---|---|---|
union | ||
intersect | ||
set-difference |
更一般的关系运算:
名称 | 符号 | 示例或备注 |
---|---|---|
select | ||
project |
|
|
Cartesian product | ||
join | ||
natural join | 相当于 |
|
assignment |
|
|
rename |
|
将 关系 |
基本数据类型:
- int
- real
- string
- array:以
[]
表示,成员为基本数据类型 - object:以
{}
表示,成员为key : value
对,其中key
为 attribute name,value
为对应的值。
{
"ID": 22222,
"name": { "firstname": "Albert", "lastname": "Einstein" },
"deptname": "Physics",
"children": [
{"firstname": "Hans", "lastname": "Einstein" },
{"firstname": "Eduard", "lastname": "Einstein" }
]
}
以成对的标签表示数据,支持嵌套。
<course>
<course_id> CS-101 </course_id>
<title> Intro. to Computer Science </title>
<dept_name> Comp. Sci. </dept_name>
<credits> 4 </credits>
</course>
以 triples 表示数据,每个 triple 是形如 (subject, predicate, object)
的三元组,具体地可以是以下两种形式之一:
(id, attribute_name, value)
(id1, relationship_name, id2)
Knowledge graph:以 subject/object
为 node,predicate
为 edge。
增加了面向对象特性的关系型数据库系统。
create type Person (
ID varchar(20) primary key, name varchar(20), address varchar(20)
) ref from(ID);
create table people of Person;
insert into people (ID, name, address) values ('12345', 'Srinivasan', '23 Coyote Run');
create type Student under Person (degree varchar(20));
create type Teacher under Person (salary integer);
In PostgreSQL:
create table students (degree varchar(20)) inherits people;
create table teachers (salary integer) inherits people;
In SQL-1999:
create table people of Person;
create table students of Student under people;
create table teachers of Teacher under people;
In either case:
insert into student values ('00128', 'Zhang', '235 Coyote Run', 'Ph.D.');
在面向对象编程语言的类型系统与关系型数据库之间自动完成数据转换。
允许面向对象编程语言直接访问数据的数据库系统。
两大缺陷:
- imperative 编程语言不支持 declarative query。
- 指针错误带来数据库破坏风险。