Blog

sub:xfce4

Content #

xfce4的相关配置文件在用户目录的位置:

~/.config/xfce4/desktop/*

Thunar技巧

Tips #

丢失所有窗口的标题栏 #

这是由于Xfce的窗口管理器崩溃导致的,重启系统并不能解决问题。解决方案是在终端中运行命令:

xfwm4

清除保存的会话信息 #

rm -f .cache/sessions/*

Thunar启动慢的问题 #

使用Xubuntu 或者其它安装了Xfce 桌面环境的朋友可能会发现,开机后第一次打开文件夹的时候要等很久。出现这个情况的原因是Xfce 的文件管理器thunar 在初次启动的时候会扫描网络,只需要把这个步骤关闭即可。

/usr/share/gvfs/mounts/network.mount
AutoMount=true ==> AutoMount=false

清除打开文件窗口中“最近使用的“内容 #

~/.local/share/revently-used.xbel

endl与换行符的区别

Content #

endl的效果相当于calling os.put(os.widen(’\n’)) followed by os.flush(). 做算法题时使用endl,会导致每次刷缓存,输入输出性能会受到影响。这时以换成输出’\n’为好。

From #

基于日志的延迟修改技术(deferred-modification technique)

Content #

该技术通过在日志中记录所有对数据库的修改操作,将一个事务的所有写操作延迟到事务提交后才执行,日志中需要记录“事务开始”和“事务提交”时间,还需要记录数据项被事务修改后的新值,无需记录数据项被事务修改前的原始值。

当系统发生故障时,如果某个事务已经开始,但没有提交,则该事务对数据项的修改尚未体现在数据库中,因此无需做任何恢复动作。

如果事务已经提交则进行重做处理,而对尚未完成的事务进行撤销处理。

From #

BCNF(Boyce Codd Normal Form)

BCNF(Boyce Codd Normal Form) #

关系模式 \(R \in 1NF\) ,若 \(X \rightarrow Y\) 且 \(Y \nsubseteq X\) 时,X必含有码,则 \(R \in BCNF\).

当3NF消除了主属性对码的部分函数依赖和传递函数依赖,则称为BCNF。

一个满足BCNF的关系模式,有如下性质:

  1. 所有非主属性对每一个码都是完全函数依赖。
  2. 所有非主属性对每一个不包含它的码,也是完全函数依赖。
  3. 没有任何属性完全函数依赖于非码的任何一组属性。

设R(Pno,Pname,Mname)的属性分别表示零件号、零件名和厂商名,如果约定,每种零件号只有一个零件名,但不同的零件号可以有相同的零件名;每种零件可以有多个厂商生产,但每家厂商生产的零件应有不同的零件名。这样我们可以得到如下一组函数依赖:

Pno → Pname,(Pname,Mname)→Pno

由于该关系模式R中的候选码为(Pname,Mname)或(Pno,Mname),因而关系模式R 的属性都是主属性,不存在非主属性对码的传递依赖,所以R是3NF的。但是,主属性Pname传递依赖于码(Pname,Mname),因此R不是BCNF的。

当一种零件由多个生产厂家生产时,零件名与零件号间的联系将多次重复,带来冗余和操作异常现象。若将R分解成:

R1(Pno,Pname)
R2(Pno,Mname)

就可以解决上述问题,并且分解后的关系模式R1、R2都属于BCNF。

规范化理论(NormalizationTheory)

关系模式实例 #

供应者与它所提供的零件信息,关系模式FIRST与函数依赖集F如下:

FIRST(Sno, Sname, Status, City, Pno, Qty)
F={Sno->Sname, Sno->Status, Status->City, (Sno, Pno)->Qty}

1NF #

若关系模式R的每一个分量都是不可再分的数据项,则关系模式R属于第一范式。记为 \(R \in 1NF\).

2NF #

若关系模式 \(R \in 1NF\) ,且每一个非主属性完全依赖于码,则关系模式 \(R \in 2NF\)。换句话说,当1NF消除了非主属性对码的部分函数依赖,则称为2NF.

FIRST中, Sno->Status,非主属性Status部分函数依赖于码,非2NF。满足2NF的分解如下:

FIRST_1(Sno, Sname, Status, City)
FIRST_2(Sno, Pno, Qty)

3NF #

不存在这样的码X,属性组Y,非主属性\(Z(Z \nsubseteq Y)\),使得 \(X \rightarrow Y, (Y \nrightarrow X) Y \rightarrow Z\) 成立,则关系 \(R \in 3NF\).

当2NF消除了非主属性对码的传递函数依赖,则称为3NF。

FIRST_1不满足3NF,因为非主属性City传递依赖于码 Sno(Sno->Status,Status->City). 满中3NF的分解如下:

FIRST_11(Sno, Sname, Status)
FIRST_12(Status, City)

BCNF(Boyce Codd Normal Form) #

4NF #

若关系模式 \(R \in 1NF\) ,若对于R的每个非平凡多值依赖 \(X \rightarrow \rightarrow Y\) 且 \(Y \nsubseteq X\) 时, X必含有码,则关系 \(R \in 4NF\).

...

函数依赖

Content #

设R(U)是属性集U上的关系模式,X,Y是U的子集。若对R(U)的任何一个可能的关系r,r中不可能存在两个元组在X上的属性相等,而在Y上的属性不等,则称X函数决定Y,或Y函数依赖于X,记作: \(X \rightarrow Y\)

非平凡函数依赖:\(X \rightarrow Y\),但 \(Y \nsubseteq X\) . 平凡函数依赖:\(X \rightarrow Y\),但 \(Y \subseteq X\) .

Y对X的完全函数依赖: \(X \stackrel{f}{\longrightarrow} Y\) \(X \rightarrow Y\),对于X的任意一个真子集X’,都有X’不能决定Y。

Y对X的部分函数依赖: \(X \stackrel{p}{\longrightarrow} Y\) \(X \rightarrow Y\),但Y不完全函数依赖于X。

传递依赖: \(X \rightarrow Y, Y \nsubseteq X, Y \nrightarrow X, Y \rightarrow Z\), 则称X对X传递依赖。

多值依赖 #

设R(U)是属性集U上的关系模式,X,Y,Z是U的子集,并且Z=U-X-Y。当且仅当对 R(U)的任何一个关系r,给定一对(x,z)的值,有一组Y的值,这组值只由x值决定而与z值无关,则称X多值决定Y,或Y多值依赖于X。记作: \(X\rightarrow \rightarrow Y\)

在一个关系模型中,如果一个属性集合中的某些属性值决定了另外一些属性的值,但是这些属性之间又存在多对多的关系,那么这个属性集合就存在多值依赖。

假设有一个关系模式,包含三个属性:学生编号(SID)、课程编号(CID)和所选课程(Course)。在这个系统中,每个学生可以选择多门课程,同时每门课程也可以被多个学生选择。这种情况下,多值依赖存在于属性SID和Course之间。也就是说,一个学生的选课情况依赖于其学生编号,而与具体的课程编号无关。

sub:RelationalDatabase

术语 #

  1. 候选码(Candidate Key) 若关系中的某一属性或属性组的值能唯一的标识一个元组,则该属性或属性组为候选码。
  2. 主码(Primary Key) 若一个关系有多个候选码,则选定其中一个作为主码。
  3. 主属性(Prime Attribute) 包含在任何候选码中的属性称为主属性。
  4. 非主属性(Non-Prime Attribute) 不包含在任何候选码中的属性称为非主属性。
  5. 外码(Foreign Key) 如果关系R中的属性或属性组不是该关系的码,但它是其他关系的码,那么该属性集对关系R而言是外码。

函数依赖

sub:RelationalAlgebra

垂直式重用和水平式重用

Content #

垂直式重用是指局限于某一垂直领域的重用,如只在电力系统中用到的构件;而水平式重用是指通用领域的重用,如标准函数库,任何软件都能用,所以是水平式重用。

From #

软件设计的四个部分

Content #

  1. 结构设计定义软件系统各主要部件之间的关系。

  2. 数据设计将模型转换成数据结构的定义。好的数据设计将改善程序结构和模块划分,降低过程复杂性。

  3. 接口设计(人机界面设计)软件内部,软件和操作系统间以及软件和人之间如何通信。

  4. 过程设计系统结构部件转换成软件的过程描述。

From #