Datenbank 笔记
Datenbank 笔记
1. Datenbankentwurf / ER-Modellierung
Entity-relationship diagram
Funktionalitäten:
1:1, 1:N, N:1, N:M
Min-Max: (min,max)
Multiplizität
2. Das Relationale Modell
Schlüssel, Primärschlüssel
Relationen mit gleichem Schlüssel kann man zusammenfassen.
Anomalie: 异常
Die Relationale Algebra
- Selektion
- Projektion (会自动去重)
- Kreuzprodukt
- Join (Verbund)
- Umbenennung
- Mengendifferenz
- Division
- Vereinigung
- Mengendurchschnitt
- Semi-Join (linkes Argument wird gefiltert) (筛选左表,仅保留在右表中有匹配记录的左表行。)
- Semi-Join (rechtes Argument wird gefiltert)
- Anti-Semi-join
- ⟕ linker äußerer Join (会保留左表中的所有记录,即使在右表中没有匹配的记录时,右表对应的位置会以 NULL 填充。)
- ⟖ rechter äußerer Join
- ⟗ (voller) äußerer Join
Der Relationenkalkül (relationaler Tupelkalkül)
Bsp.:
Der Domänenkalkül
Bsp.:
Diese 3 Sprachen sind gleich mächtig
3. SQL
standadisierte
-Datendefinitions (DDL)-
-Datenmanipulations (DML)-
-Anfrage (Query)-Sprache
Datendefinition (DDL)
Datentypen:
-
character(n), char(n)
-
character varying(n), varchar(n)
-
numeric(p,s), integer, decimal
p(precision,精度):数值的总位数(包含小数点前后的所有数字)。
s(scale,小数位数):小数部分的位数(小数点后的位数)。
-
blob oder raw – für sehr große binäre Daten
-
clob – für sehr große String-Attribute
-
date – für Datumsangaben
-
xml – für XML-Dokumente
Datenmanipulation
Einfügen von Tupeln
Löschen von Tupeln
Verändern von Tupeln
Anfrage
Sortieren:
Mengenoperation:
比较:
Aggregationsfunktion:
Gruppierung:
Alle in der select-Klausel aufgeführten Attribute - außer den aggregierten - auch in der group by-Klausel aufgeführt werden.
比如说下面这里的gelesenVon, Name:
Casting:
Allquantor und Implikation:
Auswertung bei NULL-Werten
and, between, in (1,2,3,4)
like mit Platzhalter:
"%" (für beliebig biele Zeichen)
"_" (für genau ein Zeichen)
case
left/right/full outer join
Rekursion
Vorgänger des „Wiener Kreises“ der Tiefe n:
Mit Rekursion:
4. Datenintegrität
Integritätsbedingungen:
-Schlüssel
-Beziehungskardinalitäten
-Attributdomänen
-Inklusion bei Generalisierung
Referentielle Integrität
Fremdschlüssel
Änderung von referenzierten Daten:
- Default 会拒绝执行主键的更改操作
- cascade (Kaskadieren): 级联,外键会随着主键的更改一起更改
- set NULL
Statische Integritätsbedingungen:
Konsistenzbedingung:
Trigger:
- create trigger Anweisung, gefolgt von einem Namen,
- der Definition des Auslösers, in diesem Fall bevor eine Änderungsoperation (before update on) auf einer Zeile (for each row) der Tabelle Professoren ausgeführt werden kann,
- einer einschränkenden Bedingung (when) und
- einer Prozedurdefinition in der Oracle-proprietären Syntax.
Temporale Daten
5. Relationale Entwurfstheorie
Funktionale Abhängigkeiten
Functional Dependency (FD)
A | B | C | D |
---|---|---|---|
a4 | b2 | c4 | d3 |
a1 | b1 | c1 | d1 |
a1 | b1 | c1 | d2 |
a2 | b2 | c3 | d2 |
a3 | b2 | c4 | d3 |
R:= {A,B,C,D}
假设
:
(可以理解成函数的 rechtseindeutig)
Super-Schlüssel :
( 生成元)
voll funktional abhängig von () :
-
-
kann nicht mehr verkleinert werden
()
Kandidaten-Schlüssel:
( 最小生成元)
Armstrong-Axiome
FD-Hülle einer Attributmenge
Kanonische Überdeckung
没有冗余的属性(Attribute)和依赖(Abhängigkeit)
Berechnung:
- 消除右部冗余属性 (, 时仅保留 和 )
- 消除左部冗余属性
- 删除冗余的函数依赖 (,, 时仅保留 和 )
R = R1 R2
2 Korrektheitskriterien für die Zerlegung von Relationenschemata:
- Verlustlosigkeit
- Abhängigkeitserhaltung
verlustlose Zerlegung:
( R = R1 R2 )
Hinreichende Bedingung für die Verlustlosigkeit einer Zerlegung:
oder
Normalformen
Erste Normalform (1NF):
Nur atomare Domäne.
都要是singleton,不能出现集合或者重复行
反例:
Vater | Mutter | Kinder |
---|---|---|
Johann | Martha | |
Johann | Maria | |
Heinz | Martha |
正例:
Vater | Mutter | Kind |
---|---|---|
Johann | Martha | Else |
Johann | Martha | Lucie |
Johann | Maria | Theo |
Johann | Maria | Josef |
Heinz | Martha | Cleo |
Zweite Normalform (2NF):
falls jedes Nicht(kandidat)schlüssel-Attribut voll funktional abhängig ist von jedem Kandidatenschlüssel der Relation.
假设R:= {A,B,C,D}的Kandidaten-Schlüssel是{A,B},那么需要满足C,D sind voll funktional abhängig von {A,B}。
只要出现类似{A} {C}之类的就不行了。
可以理解成不能有多余列。
Remark: 如果Kandidaten-Schlüssel只有一个元素,那么一定满足2NF。
反例(1非2):
A | B | C |
---|---|---|
x | a | 1 |
x | b | 1 |
y | c | 2 |
{A,B}为Kandidaten-Schlüssel。有{A} {C}。
Dritte Normalform (3NF):
wenn für jede für geltende funktionale Abhängigkeit der Form mit und mindestens eine von drei Bedingungen gilt:
- , d.h., die FD ist trivial
- Das Attribut ist in einem Kandidatenschlüssel von enthalten – also ist prim
- ist Superschlüssel von
反例(2非3):
A | B | C | D |
---|---|---|---|
x | a | 1 | n |
x | b | 2 | m |
y | c | 2 | m |
满足{A,B} {C}, {A,B} {D} voll,所以满足2NF;
有{C} {D},所以不满足3NF。
Synthesealgorighmus:
zerlegen R in R1,...,Rn, sodass:
- R1,...,Rn verlustlos
- R1,...,Rn abhägigkeitserhaltend
- Alle R1,...,Rn in 3NF
Boyce-Codd-Normalform (BCNF):
wenn für jede für geltende funktionale Abhängigkeit der Form (FDs) und mindestens eine von drei Bedingungen gilt:
- , d.h., die FD ist trivial
- ist Superschlüssel von
反例(3非BCNF):
A | B | C | D |
---|---|---|---|
x | a | 1 | 1 |
x | b | 2 | 1 |
y | a | 3 | 2 |
y | b | 2 | 1 |
有
AB CD
C B
因为B属于Kandidatschlüssel,所以满足3NF,但是不满足BCNF。
Man kann jede Relation verlustlos in BCNF-Relationen zerlegen, aber nicht unbedingt abhägigkeitserhaltend.
Dekompositions-Algorithmus
Mehrwertige Abhägigkeit (Multivalued Dependency, MVD):
2行对上,2行交叉对应
Jede FD is auch eine MVD:
Eine MVD ist trivial iff:
- oder
Vierte Normalform (4NF):
falls für jede MVD eine der folgenden gilt:
- Die MVD ist trivial oder
- ist Superschlüssel von R
6. Physische Datenorganisation
Speicherhierarchie
Register
Cache
Hauptspeicher
Plattenspeicher
Archivspeicher
RAID
Redundant Arrays of Independent Disks
MTTF, MTTR, MTTDL
RAID 0: Striping
RAID 1: Spiegelung
RAID 0+1(10): Striping und Spiegelung
RAID 2: Striping auf Bit-Ebene
RAID 3: Striping auf Bit-Ebene mit Paritätsinfo
RAID 4: Striping von Blöcken
RAID 5: Striping von Blöcken, Verteilung der Paritätsblöcke
Indexstrukturen
B-Bäume
B+-Bäume
Erweiterbares Hashing
Dynamisches Wachsen möglich
Beispiel: gespiegelte binäre PersNr
- h(004) = 00100000... (4=0...0100)
- h(006) = 01100000... (6=0...0110)
- h(048) = 00001100... (48=0...0110000)
Globale Tiefe
Lokale Tiefe
R-Baum
mehrdimensionalen Zugriffsstrukturen
7. Anfragebearbeitung
Logische Optimierung
Kanonische Übersetzung:
SQL Relationale Algebra
Äquivalenzerhaltende Transformationsregeln
一共12条
Dependent Join
Physische Optimierung
Nested Loop Join
foreach :
foreach :
if s.a=r.a then Res:= Res (r s)
O(N*M)
Block-Nested Loop Algorithmus
foreach Block
foreach
foreach
if s.b = r.a then Res:= Res (r s)
O(N * M/B)
(M/B: Anzahl der Blöcke)
Index-Join
Voraussetzung: 其中一个表是sortiert的且有B-Baum
O(N * log(M))
Merge-Join
Voraus.: 2个表都是sortiert的
O(N+M)
Hash-Join
选定一个哈希函数h(),计算R.A的值,分配到hash buckets里,然后再计算S.B的值,在哈希桶里匹配。
不需要预先排序
Partitionieren und Hashing的话需要2个哈希函数。
Join mit Hashfilter (Bloom-Filter)
需要很多个(k个)不同的哈希函数
forall : 计算h_i(a) forall
0覆盖1。
会出现False Positive,但是不会出现False Negative
Externes Sortieren
Selektivität
Dynamische Programmierung:
- Phase: Zugriffspläne ermitteln
- Phase: Join-Pläne ermittel (2-fach, ..., n-fach)
- Phase: Finalisierung
8. Transaktionsverwaltung
Begin of Transaction (BOT):转账开始的标志
read:读存款
write:写入(修改存款,出账入账)
commit:转账结束,所有操作festschreiben
abort:取消转账,所有状态复原
define savepoint
backup transaction: Auf den jüngsten Sicherungspunkt zurücksetzen.
commit work
rollback work: Alle Änderungen sollen zurückgesetzt werden.
ACID:
-
Atomicity (Atomarität):原子性。
Alles oder Nichts.
-
Consistency:一致性。
-
Isolation:隔离性。
-
Durability (Dauerhaftigkeit):持久性。
所有更改都必须永久存储。Änderungen erfolgreicher Transaktionen dürfen nie verloren gehen.
9. Fehlerbehandlung (Recovery)
Fehlerklassifikation
-
Lokaler Fhler in einer noch nicht festgeschriebenen Transaktion
- Wirkung zurücksetzten
R1-Recovery
- Wirkung zurücksetzten
-
Fehler mit Hauptspeicherverlust
-
Abgeschlossene TAs erhalten bleiben
R2-Recovery redo
-
Noch nicht abgeschlossene TAs zurücksetzten
R3-Recovery undo
-
-
Fehler mit Hintergrundspeicherverlust
- R4-Recovery
steal:未提交的事务修改的页面不会被替换。
steal:允许替换缓存中的任何非固定页面。
force:事务提交时立即将数据写入磁盘。
force:修改的数据仍可保留在缓存中,提高性能。
Auswirkung auf Recovery:
force | force | |
---|---|---|
steal | - Kein Undo - Kein Redo |
- Kein Undo - Redo |
steal | - Undo - Kein Redo |
- Undo - Redo |
Einbringungsstrategie(数据提交策略):
- Update in Place:直接覆盖
- Twin-Block-Verfahren:复制整个数据块
- Schattenspeicherkonzept:复制修改的页面
Log-Einträge:
- LSN (Log Sequence Number):日志序列号
- Transaktionskennung(TA_ID)
- PageID
- Redo:纪录当前操作(比如说+=50)
- Undo:当前操作的逆向(比如-=50)
- PrevLSN:上一个日志记录的指针
[LSN, TransaktionsID, PageID, Redo, Undo, PrevLSN]
(中括号)
Protokollierung:
- Physische Protokollierung
- before-image:修改前的Zustand
- after-image
- Logische Protokollierung
- Undo-Code
- Redo-Code
Log-Information会记录2次以上:
-
Log-Datei
R1,R2,R3
-
Log-Archiv
R4
WAL-Prinzip (Write Ahead Log):
-
Commit前,确保所有相关的日志记录已写入日志文件。
-
modifizierte Seite auslagern前,确保相关日志记录已写入日志存档(Log-Archiv)。
Winner:在崩溃前已经完成,需要Redo
Loser:在崩溃时仍然处于未提交状态,需要Undo
Wiederanlauf:
-
Analyse
- Log-Datei analysieren
- Winner-Menge ermitteln
- Loser-Menge ermitteln
-
Redo
-
Undo
CLR: Compensating Log Record
用于记录撤销的操作。(给undo的)
简单来说就是为了预防恢复崩溃时发生的其他崩溃。
CLR-Einträge:
- LSN (Log Sequence Number):日志序列号
- Transaktionskennung(TA_ID)
- PageID
- Redo:
- PrevLSN:上一个日志记录的指针
- UndoNxtLSN:Verweis auf die nächste rückgängig zu machende Änderung
<LSN, TransaktionsID, PageID, Redo, PrevLSN, UndoNxtLSN>
(尖括号)
注意:CLR没有undo信息。
3种Sicherungspunkte(-Qualitäten):
-
transaktionskonsistent (事务一致)
所有已提交的事务都被完全存储,未提交的都没有被写入磁盘。(只在所有活跃事务完成后进行检查点记录)
-
aktionskonsistent (操作一致)
可能包含未提交的事务,但是所有操作都是完整的。
-
unscharf (fuzzy)
修改的页面不会立即写入磁盘,只记录“脏页”的信息,而不是数据本身
DirtyPages (Menge der modifizierten Seiten, 尚未写入磁盘), MinDirtyPageLSN, MinLSN
R4-Recovery
10. Mehrbenutzersynchronisation
Fehler (bei unkontroliertem Mehrbenutzerbetrieb):
-
Lost Update:
Verlorengegangene Änderungen
-
Dirty Read:
Abhängigkeit von nicht freigegebenen Änderungen
-
Phantomproblem
Historie
Seiralisierbarkeit
2 Historien äquivalent: wenn sie die Konfliktoperationen der nicht abgebrochenen Transaktionen in derselben Reihenfolge ausführen.
SR:
Eine Historie ist serialisierbar wenn sie äquivalent zu einer seriellen Historie Hs ist.
Eine Historie H serialisierbar der zugehörige Serialisierbarkeitsgraph SG(H) azyklisch ist.
liest von in der Historie H
RC: rücksetzbare Historie
kaskadierendes Rücksetzen (Cascading Rollback):
假如T2读取了T1里被修改过但是还未被提交(commit)的数据,那么当T1 abort的时候,也需要abort T2。
ACA: Historien ohne kaskadierendes Rücksetzen (avoiding cascading abort)
ST: Strikte Historien
想要对一个被修改过的对象进行操作前,必须要确保其已经被commit或者abort了。
Sperrbasierte Synchronisation (锁)
Sperrmodi:
-
S (shared, read lock)
允许多个事务(Transaktion)同时读取数据,但不能进行写操作。
-
X (exclusive, write lock)
允许事务对数据进行读取和写入,但其他事务不能同时访问该数据。
Verträglichkeitsmatrix / Kompatibilitätsmatrix:
NL | S | X | |
---|---|---|---|
S | ✅(兼容) | ✅ | ❌ |
X | ✅ | ❌(不兼容) | ❌ |
Zwei-Phasen-Sperrprotokoll:
- Wachstumsphase:只获取锁
- Schrumpfphase:只释放锁
Strenges Zwei-Phasen-Sperrprotokoll:
所有锁直到事务提交(commit)或回滚(abort)后才释放,避免级联回滚。
Verklemmungen (Deadlocks)
Erkennung:
- Wartegraph
Vermeidung:
- Preclaiming
- durch Zeitstempel
- Wound-Wait Strategie
- Wait-Die Strategie
Multi-Granularity Locking (MGL)
Phantomproblem:
Zugriffsweg sperren
Zeitstempel-basierende Synchronisation
readTS(A):上次读取 A的时间戳。
writeTS(A):上次写入 A 的时间戳。
Synchronisationsverfahren:
- 当 Ti 试图读取数据 A (ri(A)):
- 若 TS(Ti)<writeTS(A),则 Ti必须被回滚(因为 AAA 可能已被更新)。
- 否则,Ti可以继续读取,并更新 readTS(A) = max(TS(Ti), readTS(A))。
- 当 Ti 试图写入数据 A (wi(A)):
- 若 TS(Ti)<readTS(A),说明在 Ti之前已经有其他事务读取了 A,则 Ti 必须回滚。
- 若 TS(Ti)<writeTS(A),说明 Ti 试图覆盖一个更新的值,必须回滚。
- 否则,Ti可以写入,并更新 writeTS(A) = TS(Ti)。
Optimistische Synchronisation
- Lesephase
- Validierungsphase(验证)
- Schreibphase
Snapshot Isolation
Synchronisation von Indexstrukturen:
zu aufwendig, redundante
Transaktionsverwaltung in SQL92
isolation level:
- read uncommited
- read commited
- repeatable read
- serializable
__EOF__

本文链接:https://www.cnblogs.com/bimohuixinghe/p/18727565.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效