Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
“PHZ” committed Dec 20, 2024
1 parent 9b7de37 commit c6a55dc
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 23 deletions.
19 changes: 0 additions & 19 deletions source/_posts/SLAM-2.md

This file was deleted.

81 changes: 81 additions & 0 deletions source/_posts/数据库-4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
---
title: 数据库-4
date: 2024-12-20 09:55:54
tags:
- 学习笔记
---

## 关系型数据库的结构(语法)

### 关系型数据库基础介绍

关系型数据库由一系列表的集合组成。对于关系模型:

- $A_1, A_2,..., A_n$为模型中的属性
- $D_1, D_2,..., D_n$为模型中属性的域,即对于每个属性允许的取值。
- 属性的域是一系列允许的值的集合
- 属性值通常是原子的,即不可再分的,符合第一范式(1NF)
- 特殊值`NULL`是每个域的成员,表示该值未知。但是`NULL`的操作可能会导致一些未知错误,比如索引失败
- $R=(A_1, A_2,..., A_n)$是关系模式(relation schema)
- 关系实例`r`在模式`R`上的定义表示为$r(R)$
- 其当前的值由表指定
- 对于关系实例`r`的的一个元素`t`被称为元组(tuple),用表中的一行表示

或许感觉对于`r``R``t`的关系有一定的不明确。简单的来说,`R`定义了一个表的结构,`r`是对于表结构`R`的具体实现,而`t``r`中的一个元素,也就是表中的一条数据。

对于关系顺序一般是无关的,这个无关体现在两个方面:

1. 对于表中存储的**属性**,其排列顺序无关。即$(A_1, A_2,..., A_n) = (A_2, A_1,..., A_n)$
2. 对于表中存储的**数据**,其排列顺序无关。

**数据库架构**(Database schema)是数据库的逻辑结构
**数据库实例**(Database instance)是数据库中某一特定时刻的数据快照(snapshot)。

举例如下:

- 数据库架构:instructor (ID, name, dept_name, salary)
- 数据库示例:![数据库实例](/img/数据库(4)/数据库实例.png)


### 关系型数据库的键

关系型数据库中存在一些特殊的键,包括有主键、侯选键和外键

- **主键**是用于唯一标识表中每一条记录的一个或多个属性(列)的组合。主键的值必须是唯一的,并且不能为空(即 NOT NULL)
- **唯一性**:每个主键值在表中必须是唯一的,不能重复。
- **非空性**:主键列不能包含 NULL 值,确保每条记录都有一个有效的标识。
- **稳定性**:主键的值应尽量保持不变,以避免数据引用混乱。
- **候选键**是能够唯一标识表中每一条记录的一组最小属性(列)。换句话说,候选键是没有冗余属性的候选集,每个候选键都是一个潜在的主键。
- **最小性**:候选键中的每个属性都是必需的,去掉任何一个属性后,该组合就不再具有唯一性。
- **多样性**:一个表中可能存在多个候选键,但最终只能选择其中一个作为主键。

- **外键**是依附于其他表的键,其本身会根据其他表中相应键的变化产生变化
- **参照完整性**:外键的值必须存在于被引用表的主键或唯一键中,或者可以是 NULL(如果允许)。
- **约束行为**:当被引用表中的数据发生变化(如删除或更新)时,可以通过定义外键约束的行为(如级联删除、级联更新)来自动处理相关联的数据。
- 数据库表之间存在外键关系,导入数据时,先导入被参照关系 r2 (department) 中的数据,再导入参照关系 r1 (instructor) 中的数据。
- 任何在参照关系 r1(instructor)中的外键属性(dept_name)出现的值,必须至少在被参照关系 r2(department)的某个元组的属性中存在。

参考数据库模式图
![模式图](/img/数据库(4)/模式图.png)

外键在模式图中的表示如下图所示
![外键模式图](/img/数据库(4)/外键模式图.png)

## 关系模型操作(关系代数)

### Pure Languages

在关系型数据库中,有几种语言其在表达能力上是等价的,其中包括:

1. 关系代数(Relational Algebra)
2. 元组关系演算(Tuple Relational Calculus)
3. 域关系演算(Domain Relational Calculus)
上述纯粹的语言具有相同的表达能力,能够完成相同类型的数据查询操作。其中关系代数是关系数据库查询和操作的基础。

### 关系代数的基本操作

系代数作为一种过程式语言,包含以下六个基本操作。这些操作是构建复杂查询的基础。

1. 选择(Selection): 选择满足特定条件的元组。
- 符号:
2.
8 changes: 4 additions & 4 deletions source/_posts/远程连接X11VNC+SSH.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ yay -S x11vnc
```
在WIKI中,提供了Xinetd和systemd两种方法来管理X11VNC,经过个人实验,使用Xinetd管理X11VNC进程可能会在Windows上显示`not RFB server`,不清楚其中具体问题,所以直接将X11VNC嵌入为一个systemd来进行管理和开机自启。

首先需要确定当前桌面的授权文件是什么,这是关键中的关键。当其作为一个服务时,其必须确定其授权文件的具体位置,注意,不要使用`-auth guess`。在WIKI中指出授权文件地址一般为`/home/user/.Xauthority`但是实际上在我使用的KDE+SDDM桌面环境中,授权文件并非如此,其位置在
`/run/sddm/xauth_twJiKL`中,具体如何推荐各位具体去寻找
首先需要确定当前桌面的授权文件是什么,这是关键中的关键。当其作为一个服务时,其必须确定其授权文件的具体位置,注意,不要使用`-auth guess`。在WIKI中指出授权文件地址一般为`/home/user/.Xauthority`但是实际上在我使用的KDE6桌面环境中,授权文件并非如此,其位置在
`/run/sddm/xauth_twJiKL`中,实际上该文件是随机生成的
继续参考WIKI给出的使用方法,稍微进行修改进行实践。
先使用`vncpasswd`工具生成密码文件
```shell
Expand Down Expand Up @@ -42,7 +42,7 @@ sudo systemctl status x11vnc
```shell
ip a
```
很多时候电脑可能只会被分配一个局域网地址,这说明你目前只可以在同一局域网中连接上该电脑。在刚刚的文件编写中已经确定服务器端电脑的服务端口在 `5901`,所以在连接框中键入`ip::port`,就可以实现连接啦
很多时候电脑可能只会被分配一个局域网地址,这说明你目前只可以在同一局域网中连接上该电脑。在刚刚的文件编写中已经确定服务器端电脑的服务端口在 `5901`,所以在连接框中键入`ip::port`,就可以实现连接

但在实际使用中,一直开启X11VNC服务会可能产生轻微的资源占用同时不够安全,而且本质目的是远程控制个人计算机,所以使用SSH也是重要的一个工具,所以推荐使用SSH来首先进行服务器端主机连接,然后启动服务来再来使用`X11VNC`远程控制桌面,当然也可以使用
```shell
Expand Down Expand Up @@ -74,7 +74,7 @@ systemctl stop sshd
于是乎,在ssh客户端电脑上使用ssh服务(个人会使用万能编辑器VSCODE),键入 `user@IP`
其中,作为个人PC使用,所以我的`user`选择了超级用户(本身也就只创了一个用户)。键入后输入密码,即电脑该用户密码,就可以实现访问了。

在一般使用中,通过ssh连接上电脑,然后使用
在一般使用中,通过ssh连接上电脑
```shell
systemctl start x11vnc
```
Expand Down
Binary file added source/img/数据库(4)/外键模式图.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added source/img/数据库(4)/数据库实例.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added source/img/数据库(4)/模式图.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit c6a55dc

Please sign in to comment.