Professional Documents
Culture Documents
ÁÈÇÍÁ
Óôïõò ãïíåßò ìáò:
Åõáããåëßá Ìáíùëïðïýëïõ
Íéêüëáï Ðáðáäüðïõëï
Óôáõñïýëá Ðáðáäïðïýëïõ
5
Óôç ìíÞìç ôïõ Ðáíáãéþôç Ìáíùëüðïõëïõ
Ç íåêñþóéìç ðïìðÞ ïäåýåé ðñïò ôïí ôÜöï. ÁíÜìåóá óôá ãíùóôÜ êáé áãá-
ðçìÝíá ðñüóùðá, ï ¢ããåëïò îå÷ùñßæåé êÜðïéïõò ìáêñéíïýò óõããåíåßò ðïõ ïýôå
êáí èõìÜôáé ôá ïíüìáôÜ ôïõò. Ìßá èåßá, êÜôé äåýôåñá îáäÝëöéá. Ìßá ãõíáßêá
ôõëéãìÝíç ó’ Ýíá ìáíôÞëé óáí íá õðïöÝñåé áðü ìáãïõëÜäåò, ðáëéÜ ðáñáäïõëåý-
ôñá óôï óðßôé ôùí Æáöåéñßäçäùí. Äåí èõìÜôáé ôï üíïìÜ ôçò ìá äéáôçñåß æùíôáíÞ
ôç ìõñùäéÜ ôçò ðáñêåôßíçò, ôçò áëéóßâáò êáé ôïõ ðñÜóéíïõ óáðïõíéïý. Ôé íá
ãõñåýåé óÞìåñá åäþ; Åßíáé ìåñéêïß Üíèñùðïé ðïõ üôáí Ý÷ïõí äïõëÝøåé óå óðß-
ôéá ðïõ ôïõò óåâÜóôçêáí, îáíáãõñßæïõí ó’ áõôÜ ìå ôç íïóôáëãßá ôçò íåüôçôáò,
ôçò áèùüôçôáò, ôçò áöïóßùóçò ðïõ ôåßíåé íá åßíáé Ýííïéá îåðåñáóìÝíç. Ôüôå ïé
Üíèñùðïé áõôïß ãßíïíôáé ðéï óõããåíéêïß êáé áðü ôïõò ßäéïõò ôïõò óõããåíåßò. Êé
áêüìá îå÷ùñßæåé êÜðïéïõò áíèñþðïõò, öéãïýñåò áìõäñÜ ãíùóôÝò áðü Ýíá ðá-
ñåëèüí áìõäñü êé áõôü. Ðñüóùðá ôçò ÁñéóôåñÜò, ðáëéïß óõíáãùíéóôÝò Þ áðëÜ
óõìðáèïýíôåò. ¢íèñùðïé ÷ùñßò ïößêéá, íáõáãéóìÝíïé. Êé áò Ý÷åé ðñï ðïëëïý
îåðåñÜóåé ôï óýíäñïìï ôïõ áñéóôåñïý äéáíïïýìåíïõ ðïõ êÜðïôå ôáëáéðþñçóå
áñêåôÜ ôç ëïãïôå÷íßá − üôáí äåí ôçí äüîáóå óå óôéãìÝò ìåãÜëçò Ýîáñóçò −, ï
¢ããåëïò íïéþèåé ìéá óõìðÜèåéá ãé’áõôÜ ôá ðñüóùðá êáé ìßá ëýðç. ¼ðùò ëõðÜ-
ôáé üëïõò áõôïýò ôïõò ðïëßôåò ôçò ÁíáôïëéêÞò Åõñþðçò ðïõ áðü ôçí ìéá ìÝñá
óôçí Üëëç Ýìåéíáí ü÷é ìüíï ÷ùñßò éäåïëïãéêÞ êÜëõøç êáé ðßóôç áëëÜ êáé ÷ùñßò
äïõëåéÜ. ËõðÜôáé ðïõ ï äõôéêüò êïìðáóìüò êáé ç ñçôïñåßá ôïõ ÷ñÞìáôïò Ýìåé-
íáí ÷ùñßò áíôßðáëï äÝïò. ËõðÜôáé ðïõ üëá ôåëåßùóáí ôüóï Üäïîá. ÅâäïìÞíôá
÷ñüíéá ëÜèïò æùÞ. Äåí åßíáé ëßãï. ÊáçìÝíç ÌÜ÷ç! Ãé’ áõôü êáé ï êüóìïò ðïõ
áêïëïõèåß ôïõ öáßíåôáé åëÜ÷éóôïò óõãêñéôéêÜ ì’ áõôü ðïõ áíôéðñïóùðåýåé ôïýôï
ôï îüäé. ÓÞìåñá äåí êçäåýåôáé ç ÌÜ÷ç Æáöåéñßäç. Åßíáé ìßá éäÝá êáé ìßá åðï÷Þ
ðïõ îåðñïâïäßæïõí óÞìåñá. ¸íá üñáìá ðïõ ìðïñåß íá åß÷å óôñáâÞ åöáñìïãÞ,
ðïõ ßóùò íá ðñïäüèçêå, áëëÜ ôï ïðïßï óôéãìÞ äåí Ýðáøå íá åßíáé ðÜèïò, Ýíá
ðÜèïò ðïõ ÷ñüíéá ôþñá óéãïêáßåé óôéò êáñäéÝò ôùí áíèñþðùí. Áõôü êçäåýïõí
óÞìåñá.
ÌÝíçò ÊïõìáíôáñÝáò
Äýï öïñÝò ¸ëëçíáò, 2001
7
Äõï ëüãéá ãéá ôïõò óõããñáöåßò...
9
Ðñüëïãïò
Ç Ýñåõíá êáé áíÜðôõîç óôï ÷þñï ôùí ÂÜóåùí ÄåäïìÝíùí åßíáé åíåñãÞ åäþ
êáé áñêåôÝò äåêáåôßåò, áðü ôç óôéãìÞ ðïõ ç áõôïìáôïðïéçìÝíç áðïèÞêåõóç êáé
äéá÷åßñéóç ìåãÜëïõ üãêïõ ðëçñïöïñéþí Ýãéíå áíáãêáßá. Óôï âéâëßï áõôü ðåñé-
ãñÜöïíôáé êáé áíáëýïíôáé ôá óçìáíôéêüôåñá èÝìáôá ðïõ áöïñïýí óôéò ÂÜóåéò
ÄåäïìÝíùí. Åßíáé åõíüçôï, üôé ëüãù ôçò ôåñÜóôéáò Ýêôáóçò ôçò ðåñéï÷Þò äåí åßíáé
äõíáôüí íá êáëõöèïýí óå âÜèïò üëá ôá èÝìáôá. Ùóôüóï, Ýãéíå ðñïóðÜèåéá þóôå
íá êáëõöèåß ôï ìåãáëýôåñï ôìÞìá ôçò ðåñéï÷Þò áõôÞò, äßíïíôáò Ýìöáóç ôüóï óôç
èåùñßá üóï êáé óôçí ðñáêôéêÞ åöáñìïãÞ. Óôü÷ïò ìáò åßíáé ôï âéâëßï íá áðïôåëÝ-
óåé ðïëýôéìï âïÞèçìá óå öïéôçôÝò ÐëçñïöïñéêÞò, óå åñåõíçôÝò ìå åíäéáöÝñïí
ãéá ôï ÷þñï ôùí ÂÜóåùí ÄåäïìÝíùí êáé óå åðáããåëìáôßåò ðïõ åíäéáöÝñïíôáé
ãéá ôç èåùñßá êáé ôçí ðñáêôéêÞ åöáñìïãÞ ôùí ÂÜóåùí ÄåäïìÝíùí.
Ãéá ôçí åðßôåõîç ôïõ óôü÷ïõ êñßèçêå áðáñáßôçôç ç ÷ñÞóç åíüò óýã÷ñïíïõ
ÓõóôÞìáôïò Äéá÷åßñéóçò ÂÜóåùí ÄåäïìÝíùí Ýôóé þóôå íá ãßíåôáé êáôáíïçôüò ï
ôñüðïò ÷ñÞóçò ôùí åêÜóôïôå ìåèüäùí óå Ýíá ðñáãìáôéêü óýóôçìá. ÅðéëÝîáìå
ôç ÷ñÞóç ôïõ óõóôÞìáôïò Microsoft SQL Server 2000, ðïõ áðïôåëåß Ýíá ïëïêëç-
ñùìÝíï êáé äéáñêþò åîåëéóóüìåíï óýóôçìá äéá÷åßñéóçò ìå ðïëëÝò äõíáôüôçôåò.
Óå êÜèå ôìÞìá ôïõ âéâëßïõ êáé ìåôÜ ôçí áíÜëõóç ôçò áíôßóôïé÷çò èåùñßáò, ðå-
ñéãñÜöåôáé ï ôñüðïò åöáñìïãÞò ôçò óôï óýóôçìá Microsoft SQL Server 2000.
¸ôóé ðñïóöÝñåôáé Ýíá óçìáíôéêü âïÞèçìá ãéá ôçí êáôáíüçóç êáé åöáñìïãÞ ôùí
èåùñçôéêþí åííïéþí, êáé äßíåôáé ç äõíáôüôçôá óôïí áíáãíþóôç íá ãåöõñþóåé ôï
ìåãÜëï ÷Üóìá ðïõ óõíÞèùò õðÜñ÷åé ìåôáîý èåùñßáò êáé ðñáêôéêÞò åöáñìïãÞò.
11
12 Ðñüëïãïò
áõôÜ äåí êáëýðôïõí üëåò ôéò äõíáôüôçôåò ôïõ åñãáëåßïõ, ùóôüóï ðñïóöÝñïõí Ýíá
óçìáíôéêü ðñáêôéêü âïÞèçìá.
Åõ÷áñéóôßåò
Ôï âéâëßï áõôü äåí èá ãéíüôáí ðñáãìáôéêüôçôá ÷ùñßò ôç óõìðáñÜóôáóç ìåñéêþí
áíèñþðùí. ÂáóéêÜ ïé èåñìüôåñåò åõ÷áñéóôßåò ìáò áðåõèýíïíôáé óôï Öþôç Äñá-
ãáíßäç ôçò Microsoft Hellas ðïõ ìáò âïÞèçóå ðïëýðëåõñá ãéá ôï óêïðü áõôü.
Åõ÷áñéóôïýìå èåñìÜ ôï ößëï êáé óõíÜäåëöï Èåüäùñï ÔæïõñáìÜíç, ËÝêôïñá
óôï ÐáíåðéóôÞìéï Áéãáßïõ, ãéá ôçí êáßñéá óõìâïëÞ ôïõ óôá èÝìáôá áóöÜëåéáò
ÂÜóåùí ÄåäïìÝíùí. Åõ÷áñéóôïýìå èåñìÜ ôïõò: Óïößá Âáúïõ, Ôñýöùíá ÃåñãÞ,
Åõôõ÷ßá Éùáêåéìßäïõ êáé ¸öç ÔåñæÞ ãéá ôá ëÜèç ðïõ õðÝäåéîáí ýóôåñá áðü
ðñïóåêôéêÞ áíÜãíùóç ôïõ âéâëßïõ. Åðßóçò, åõ÷áñéóôïýìå êáé ôïí óõíÜäåëöï ê.
×ñÞóôï Êïßëéá ôùí Åêäüóåùí ÍÝùí Ôå÷íïëïãéþí ãéá ôçí áðïäï÷Þ ôçò Ýêäïóçò
áõôÞò. ÔÝëïò, åõ÷áñéóôßåò ðñÝðåé íá áðïäïèïýí êáé óôéò ïéêïãÝíåéÝò ìáò êáé
ôïõò ößëïõò ìáò, ðïõ ôïõò óôåñçèÞêáìå.
Èåóóáëïíßêç,
ÖåâñïõÜñéïò 2006
ÉùÜííçò Ìáíùëüðïõëïò
Áðüóôïëïò Í. Ðáðáäüðïõëïò
Ðåñéå÷üìåíá
Ðñüëïãïò 11
ÊáôÜëïãïò Ó÷çìÜôùí 26
ÊáôÜëïãïò ÐéíÜêùí 33
I ÂÁÓÉÊÅÓ ÅÍÍÏÉÅÓ 35
1 ÅéóáãùãÞ óôéò ÂÜóåéò ÄåäïìÝíùí 37
1.1 ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí . . . . . . . . . . . . . . . . . . . . . . 40
1.2 ÊëáóéêÝò êáé Óýã÷ñïíåò ÅöáñìïãÝò . . . . . . . . . . . . . . . . . . . 44
1.3 Óýíïøç . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
ÁóêÞóåéò êáé ÅñùôÞóåéò ÅðáíÜëçøçò . . . . . . . . . . . . . . . . . . . . 48
3 Áñ÷éôåêôïíéêÞ ÓõóôçìÜôùí 79
3.1 Ç Áñ÷éôåêôïíéêÞ ANSI-SPARC . . . . . . . . . . . . . . . . . . . . . 80
3.2 Ãëþóóåò ÂÜóåùí ÄåäïìÝíùí . . . . . . . . . . . . . . . . . . . . . . . 85
3.2.1 Ãëþóóá Ïñéóìïý ÄåäïìÝíùí . . . . . . . . . . . . . . . . . . . 86
3.2.2 Ãëþóóá ×åéñéóìïý ÄåäïìÝíùí . . . . . . . . . . . . . . . . . . 87
17
18 Ðåñéå÷üìåíá
4 ÌïíôÝëï ÏíôïôÞôùí-Óõó÷åôßóåùí 99
4.1 ÄéáãñÜììá ÏíôïôÞôùí-Óõó÷åôßóåùí . . . . . . . . . . . . . . . . . . . 99
4.2 Óýíïëá ÏíôïôÞôùí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4.2.1 Ôýðïé ×áñáêôçñéóôéêþí . . . . . . . . . . . . . . . . . . . . . . 101
4.2.2 ÊëåéäéÜ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.3 Óýíïëá Óõó÷åôßóåùí . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
4.3.1 Ôýðïé Áðåéêüíéóçò . . . . . . . . . . . . . . . . . . . . . . . . . 105
4.3.2 ×áñáêôçñéóôéêÜ Óõíüëïõ Óõó÷åôßóåùí . . . . . . . . . . . . . . 107
4.3.3 Ôýðïé Óõììåôï÷Þò Ïíôüôçôáò óå Óõó÷Ýôéóç . . . . . . . . . . . 108
4.3.4 ÅîáñôÞóåéò ¾ðáñîçò . . . . . . . . . . . . . . . . . . . . . . . . 109
4.3.5 Áäýíáìá Óýíïëá ÏíôïôÞôùí . . . . . . . . . . . . . . . . . . . . 110
4.4 ÅðåêôÜóåéò ôïõ Âáóéêïý ÌïíôÝëïõ ÏÓ . . . . . . . . . . . . . . . . . 111
4.4.1 Åîåéäßêåõóç êáé Ãåíßêåõóç . . . . . . . . . . . . . . . . . . . . . 111
4.4.2 Êëçñïíïìéêüôçôá ×áñáêôçñéóôéêþí . . . . . . . . . . . . . . . . 113
4.4.3 ÓõóóùìÜôùóç . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
4.5 Óýíïøç . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
ÁóêÞóåéò êáé ÅñùôÞóåéò ÅðáíÜëçøçò . . . . . . . . . . . . . . . . . . . . 115
13 Êáôáêåñìáôéóìüò 323
13.1 ÓõíáñôÞóåéò Êáôáêåñìáôéóìïý . . . . . . . . . . . . . . . . . . . . . . 325
13.2 Äõíáìéêüò Êáôáêåñìáôéóìüò . . . . . . . . . . . . . . . . . . . . . . . 330
13.3 Åðåêôáôüò Êáôáêåñìáôéóìüò . . . . . . . . . . . . . . . . . . . . . . . 333
13.4 Åêèåôéêüò Êáôáêåñìáôéóìüò ìå ÐåñéïñéóìÝíï ÊáôÜëïãï . . . . . . . 338
13.5 Ãñáììéêüò Êáôáêåñìáôéóìüò . . . . . . . . . . . . . . . . . . . . . . . 342
13.5.1 ÐñïóðÝëáóç ÅããñáöÞò . . . . . . . . . . . . . . . . . . . . . . . 343
13.5.2 ÅéóáãùãÞ ÅããñáöÞò . . . . . . . . . . . . . . . . . . . . . . . . 344
13.5.3 ÄéáãñáöÞ ÅããñáöÞò . . . . . . . . . . . . . . . . . . . . . . . . 346
13.5.4 ÅîáíôëçôéêÞ ÁíÜãíùóç Áñ÷åßïõ . . . . . . . . . . . . . . . . . . 348
13.5.5 Âåëôéþóåéò Ãñáììéêïý Êáôáêåñìáôéóìïý . . . . . . . . . . . . . 348
22 Ðåñéå÷üìåíá
Âéâëéïãñáößá 541
ÅõñåôÞñéï 551
ÊáôÜëïãïò Ó÷çìÜôùí
27
28 ÊáôÜëïãïò Ó÷çìÜôùí
9.1 Ó÷åóéáêü ó÷Þìá ôçò ÂÄ ôïõ Ó÷Þìáôïò 4.1 ìåôÜ ôç ìåôáôñïðÞ. . . . . 207
9.2 ÁðïôÝëåóìá åýñåóçò ôïõ ðëÞèïõò ôùí Üñèñùí áíÜ óõããñáöÝá. . . 223
33
34 ÊáôÜëïãïò ÐéíÜêùí
ÂÁÓÉÊÅÓ ÅÍÍÏÉÅÓ
Ôï õëéêü ôïõ ðñþôïõ ìÝñïõò ôïõ âéâëßïõ Ý÷åé åéóáãùãéêü ÷áñáêôÞñá êáé óôï-
÷åýåé óôçí ïìáëÞ åéóáãùãÞ ôïõ áíáãíþóôç óôç ãíùóôéêÞ ðåñéï÷Þ ôùí ÂÜóåùí
ÄåäïìÝíùí. Åäþ äßíïíôáé ïé âáóéêÝò Ýííïéåò ôùí ÂÜóåùí ÄåäïìÝíùí, ç êáôá-
íüçóç ôùí ïðïßùí êñßíåôáé áðáñáßôçôç. Áñ÷éêÜ, óôï ÊåöÜëáéï 1, ðáñïõóéÜæåôáé
ìßá åéóáãùãÞ óôéò ÂÜóåéò ÄåäïìÝíùí, ðáñáèÝôïíôáò üëá ôá óôïé÷åßá ðïõ óõíèÝ-
ôïõí ôç ãíùóôéêÞ ðåñéï÷Þ. ÐåñéãñÜöåôáé ç áíáãêáéüôçôá ôùí ÂÜóåùí ÄåäïìÝíùí
êáé ç óçìáíôéêÞ âïÞèåéá ðïõ ðñïóöÝñïõí óôéò óýã÷ñïíåò åöáñìïãÝò, ïé áðáéôÞ-
óåéò ôùí ïðïßùí áõîÜíïíôáé äéáñêþò. Ç ðåñéãñáöÞ ôùí åííïéþí åßíáé óõíïðôéêÞ,
äéüôé óôá åðüìåíá êåöÜëáéá áêïëïõèåß áíáëõôéêÞ ðåñéãñáöÞ. Óôï ÊåöÜëáéï 2
ðåñéãñÜöåôáé ç ãåíéêÞ áñ÷éôåêôïíéêÞ åíüò ôõðéêïý óõóôÞìáôïò, êáé áíáëýïíôáé
ôá ôìÞìáôá (õðïóõóôÞìáôá) áðü ôá ïðïßá áðïôåëåßôáé. Åðßóçò, ðñïóäéïñßæåôáé
ç ëåéôïõñãßá ôïõ êÜèå õðïóõóôÞìáôïò êáé ï ôñüðïò óõíåñãáóßáò ôùí õðïóõ-
óôçìÜôùí ìåôáîý ôïõò ãéá ôçí åðßôåõîç ôïõ óôü÷ïõ, ðïõ äåí åßíáé Üëëïò áðü ôçí
áðïôåëåóìáôéêÞ êáé áðïäïôéêÞ äéá÷åßñéóç ôùí äåäïìÝíùí. Óôï ÊåöÜëáéï 3 ðá-
ñïõóéÜæåôáé ôï ìïíôÝëï ÏíôïôÞôùí-Óõó÷åôßóåùí, ôï ïðïßï áðïôåëåß ìßá ðñþôç
ðñïóÝããéóç ãéá ôç ìïíôåëïðïßçóç åíüò óõíüëïõ äåäïìÝíùí. ÊáôÜ ôï ó÷åäéáóìü
ìßáò åöáñìïãÞò, áñ÷éêÜ êáôáóêåõÜæåôáé ôï ìïíôÝëï ÏíôïôÞôùí-Óõó÷åôßóåùí êáé
óôç óõíÝ÷åéá ðñáãìáôïðïéåßôáé ç ìåôáôñïðÞ óôï áíôßóôïé÷ï ìïíôÝëï ðïõ õðï-
óôçñßæåôáé áðü ôï åêÜóôïôå óýóôçìá äéá÷åßñéóçò. ÔÝëïò, óôï ÊåöÜëáéï 5 ãßíåôáé
ìßá åéóáãùãÞ óôï Óýóôçìá Äéïßêçóçò ÂÜóåùí ÄåäïìÝíùí Microsoft SQL Server
2000, ðáñïõóéÜæïíôáò ôá âáóéêüôåñá ÷áñáêôçñéóôéêÜ ôïõ óõóôÞìáôïò êáé ðåñé-
ãñÜöïíôáò óõíïðôéêÜ ôá õðïóõóôÞìáôÜ ôïõ êáé ôç ëåéôïõñãéêüôçôá ôïõ êáèåíüò.
ÅéóáãùãÞ óôéò ÂÜóåéò ÄåäïìÝíùí
1
Ôï âáóéêü ÷áñáêôçñéóôéêü ôùí óýã÷ñïíùí åöáñìïãþí åßíáé ç áðáßôçóç ãéá ôçí
áðïôåëåóìáôéêÞ êáé áðïäïôéêÞ äéá÷åßñéóç ôçò áðïèçêåõìÝíçò ðëçñïöïñßáò. Áñ-
÷éêÜ, ç äéá÷åßñéóç ôçò ðëçñïöïñßáò ãéíüôáí áðü ôéò ßäéåò ôéò åöáñìïãÝò, ÷ñçóé-
ìïðïéþíôáò ôï óýóôçìá áñ÷åßùí (file system) ôïõ ëåéôïõñãéêïý óõóôÞìáôïò, åíþ
ïé ìÝèïäïé åðåîåñãáóßáò êáé áíÜêôçóçò ôùí äåäïìÝíùí Þôáí åíóùìáôùìÝíåò
óôïí êþäéêá ôçò åêÜóôïôå åöáñìïãÞò. Ï ôñüðïò áõôüò äéá÷åßñéóçò, áí êáé äßíåé
óôïí ðñïãñáììáôéóôÞ ôçí åõåëéîßá íá õëïðïéÞóåé ôéò ìåèüäïõò åðåîåñãáóßáò ðïõ
áõôüò åðéèõìåß, ùóôüóï äçìéïõñãåß ðñïâëÞìáôá êáèþò áõîÜíåôáé ï üãêïò ôùí
äåäïìÝíùí êáé ç ðïëõðëïêüôçôá ôçò ðëçñïöïñßáò. Ãéá ðáñÜäåéãìá, áí óôü÷ïò
ôçò åöáñìïãÞò åßíáé ç äéá÷åßñéóç áñéèìçôéêþí äåäïìÝíùí êáé õðÜñ÷åé ç áíÜãêç
ãéá áðïèÞêåõóç êáé äéá÷åßñéóç ìåñéêþí åêáôïíôÜäùí áñéèìþí, ôüôå áõôü ìðïñåß
íá õëïðïéçèåß åýêïëá áðïèçêåýïíôáò ôïõò áñéèìïýò óå Ýíá áñ÷åßï ôïõ ëåéôïõñãé-
êïý óõóôÞìáôïò, êáé õëïðïéþíôáò ôéò áðáñáßôçôåò ëåéôïõñãßåò õðïëïãéóìþí (ð.÷.,
ìÝóïò üñïò, åëÜ÷éóôç ôéìÞ, ìÝãéóôç ôéìÞ) óôç ëïãéêÞ ôçò åöáñìïãÞò. Áò èåùñÞ-
óïõìå üìùò ìßá ðïëõðëïêüôåñç åöáñìïãÞ ðïõ óôü÷ï Ý÷åé ôçí ïñãÜíùóç ìßáò
çëåêôñïíéêÞò âéâëéïèÞêçò, üðïõ áðáéôåßôáé ç áíáæÞôçóç Üñèñùí Þ âéâëßùí ìå
âÜóç ôï óõããñáöÝá, ôïí ôßôëï, ôçí çìåñïìçíßá Ýêäïóçò, åíþ áêüìç áðáéôåßôáé ç
áíáæÞôçóç Üñèñùí ìå âÜóç ëÝîåéò-êëåéäéÜ (keywords) áðü üëï ôï êåßìåíï. Åßíáé
37
38 ÊåöÜëáéï 1. ÅéóáãùãÞ óôéò ÂÜóåéò ÄåäïìÝíùí
ðñïöáíÝò üôé èá áðáéôçèåß áñêåôÞ ðñïóðÜèåéá áðü ôïí ðñïãñáììáôéóôÞ ãéá ôçí
õëïðïßçóç ôçò åöáñìïãÞò ëáìâÜíïíôáò õð’ üøç üôé:
• Ç äïìÞ ôïõ êÜèå áñ÷åßïõ êáèïñßæåôáé áðü ôçí ßäéá ôçí åöáñìïãÞ. Áõôü Ý÷åé
ùò áðïôÝëåóìá íá åßíáé äýóêïëç ç áëëáãÞ ôçò äïìÞò åíüò áñ÷åßïõ. ÐïëëÝò
öïñÝò ðáñïõóéÜæåôáé ç áíÜãêç íá ðñïóôåèåß Ýíá íÝï ÷áñáêôçñéóôéêü óôá
äåäïìÝíá. Ãéá ðáñÜäåéãìá, ìðïñåß íá áðáéôçèåß ç ðñïóèÞêç óôï áñ÷åßï
Á1 åíüò áêüìç ðåäßïõ ðïõ íá ðåñéÝ÷åé ôï ðëÞèïò ôùí âéâëéïãñáöéêþí áíá-
öïñþí (citations) ðïõ ðåñéÝ÷ïíôáé óôï Üñèñï. Óå ìßá ôÝôïéá ðåñßðôùóç
ðñÝðåé áö’ åíüò íá ìåôáâëçèåß ç äïìÞ ôïõ áñ÷åßïõ Á1, Ýôóé þóôå íá äç-
ìéïõñãçèåß ÷þñïò ãéá ôï íÝï ðåäßï, êáé áö’ åôÝñïõ íá ìåôáâëçèåß ç ëïãéêÞ
ôçò åöáñìïãÞò þóôå íá ëçöèåß ôï íÝï ðåäßï õð’ üøç êáôÜ ôçí áíáæÞôçóç,
åéóáãùãÞ êáé äéáãñáöÞ äåäïìÝíùí. Ïé áëëáãÝò áõôÝò åßíáé ÷ñïíïâüñåò
êáé åðéêßíäõíåò ãéá ôçí áêåñáéüôçôá ôùí áðïèçêåõìÝíùí äåäïìÝíùí.
• Åö’ üóïí ï ôñüðïò äçìéïõñãßáò ôùí áñ÷åßùí êáèïñßæåôáé áðü ôçí åöáñ-
ìïãÞ, ç ìïñöïðïßçóç ôùí áñ÷åßùí åîáñôÜôáé áðü ôçí åêÜóôïôå ãëþóóá
ðñïãñáììáôéóìïý ðïõ ÷ñçóéìïðïéåß ï ðñïãñáììáôéóôÞò (üðùò C, C++,
Java, Visual Basic). Ôï ãåãïíüò áõôü äçìéïõñãåß äõóêïëßåò üôáí áðáéôåß-
ôáé ç ÷ñÞóç ôùí áñ÷åßùí áðü äéáöïñåôéêÝò åöáñìïãÝò Þ üôáí áðáéôåßôáé ç
êáôáóêåõÞ ôùí áñ÷åßùí áðü äéáöïñåôéêïýò ðñïãñáììáôéóôÝò ðïõ ÷ñçóéìï-
ðïéïýí äéáöïñåôéêÝò ãëþóóåò ðñïãñáììáôéóìïý óå äéáöïñåôéêÜ ëåéôïõñ-
ãéêÜ óõóôÞìáôá (üðùò Linux, Windows, MacOS). Ôï ðñüâëçìá åßíáé éäéáß-
ôåñá Ýíôïíï üôáí ôá äåäïìÝíá áðïèçêåýïíôáé óå äõáäéêÞ (binary) ìïñöÞ
êáé ü÷é óå áëöáñéèìçôéêÞ (alphanumeric, text) ìïñöÞ.
Χ ρ ή σ τ ε ς
Σ ύ σ τ η # α Β ά σ η ς ( ε δ ο # έ ν ω ν
Σ ύ σ τ η # α ( ι α χ ε ί ρ ι σ η ς Β ά σ η ς ( ε δ ο # έ ν ω ν
Ε ν η έ ρ ω σ η
α ξ ι ν ό η σ η
Τ
Α ν α ζ ή τ η σ η
… … . .
Ε π ε ξ ε ρ γ α σ ί α
Α σ φ ά λ ε ι α
… … . .
Β ά σ η ε δ ο έ ν ω ν
Β ά σ η ε δ ο έ ν ω ν
Β ά σ η ε δ ο έ ν ω ν
I I Ι Ι Ι
Óôï Ó÷Þìá 1.1 ðáñïõóéÜæåôáé ç ó÷Ýóç ìåôáîý ôçò ÂÄ êáé ôïõ ÓÄÂÄ. Ðáñáôç-
ñïýìå üôé ïé ÷ñÞóôåò äåí Ý÷ïõí Üìåóç ðñüóâáóç óôá äåäïìÝíá. Ç ðñïóðÝëáóç
ôùí äåäïìÝíùí åðéôõã÷Üíåôáé ìÝóù ôùí ìç÷áíéóìþí ðïõ Ý÷ïõí õëïðïéçèåß óôï
ÓÄÂÄ. Ìå ôïí ôñüðï áõôüí, ï Ýëåã÷ïò ôùí äåäïìÝíùí áíÞêåé óôï ÓÄÂÄ êáé ìüíï
áõôü åßíáé õðåýèõíï ãéá ôç äéá÷åßñéóç êáé ôçí ðñïóôáóßá ôïõò.
Áò ðñïóÝîïõìå áíáëõôéêÜ ôá ðëåïíåêôÞìáôá ðïõ ðñïóöÝñåé ç äïìÞ áõôÞ
óå ó÷Ýóç ôüóï ìå ôéò äõíáôüôçôåò äéá÷åßñéóçò ôùí äåäïìÝíùí üóï êáé ìå ôçí
õðïóôÞñéîç ôùí ôåëéêþí ÷ñçóôþí (end-users).
42 ÊåöÜëáéï 1. ÅéóáãùãÞ óôéò ÂÜóåéò ÄåäïìÝíùí
Áðü ôçí ðñïçãïýìåíç áíÜëõóç öáßíåôáé êáèáñÜ üôé ç ÷ñÞóç åíüò ÓÄÂÄ ðëå-
ïíåêôåß ùò ðñïò ôçí ðñïóÝããéóç ìå õëïðïßçóç ôùí áñ÷åßùí. Äéêáßùò ëïéðüí ôá
ÓÄÂÄ Ý÷ïõí õéïèåôçèåß áðü ìåãÜëåò åôáéñåßåò êáé ïñãáíéóìïýò ãéá ôçí áðïèÞ-
êåõóç ôùí äåäïìÝíùí ôïõò. Åðßóçò, óÞìåñá êÜèå ìåãÜëç åöáñìïãÞ óõíïäåýåôáé
áðü õðïóôÞñéîç ôçò ÂÜóçò ÄåäïìÝíùí ãéá ãñÞãïñç ðñïóðÝëáóç êáé ðñïóôáóßá
ôùí äåäïìÝíùí.
äéåñãáóßåò ôçò åôáéñåßáò, ïé ïðïßåò ðïëëÝò öïñÝò åßíáé ðïëýðëïêåò êáé ÷ñï-
íïâüñåò. Ç ìåèïäéêÞ ïñãÜíùóç ôùí äåäïìÝíùí åðéäñÜ óå üëá ôá ôìÞìáôá
ôçò åôáéñåßáò (üðùò ôìÞìá ðùëÞóåùí, ôìÞìá áíÜðôõîçò, ôìÞìá áíèñþðéíïõ
äõíáìéêïý, ê.ë.ð.). Ôá äåäïìÝíá ó÷åôßæïíôáé ìå ôá ðñïóùðéêÜ óôïé÷åßá ôùí
õðáëëÞëùí, üðùò üíïìá, äéåýèõíóç, ìéóèüò, åðéäüìáôá áäåßáò. Ç äïìçìÝíç
ïñãÜíùóç ôçò ðëçñïöïñßáò åðéôñÝðåé ôç ãñÞãïñç áíáæÞôçóç óôïé÷åßùí ðïõ
ó÷åôßæïíôáé ìå Ýíáí õðÜëëçëï êáé ôçí åýêïëç åíçìÝñùóç ôùí óôïé÷åßùí óå
ðåñßðôùóç ìåôáâïëþí (ð.÷., áëëáãÞ èÝóçò åíüò õðáëëÞëïõ).
Óôç óõíÝ÷åéá ôïõ âéâëßïõ áíáëýïíôáé ôüóï ôá âáóéêÜ èÝìáôá ðïõ áöïñïýí óôá
êëáóéêÜ óõóôÞìáôá, üóï êáé ðñï÷ùñçìÝíá èÝìáôá ðïõ áöïñïýí óôá óýã÷ñïíá
óõóôÞìáôá, ðïõ Ý÷ïõí éäéáßôåñï åñåõíçôéêü åíäéáöÝñïí.
1.3 Óýíïøç
Ïé óýã÷ñïíåò áíÜãêåò ãéá áðïèÞêåõóç êáé äéá÷åßñéóç äåäïìÝíùí åßíáé ðïëëá-
ðëÝò óå ó÷Ýóç ìå ôï ðáñåëèüí, ëáìâÜíïíôáò õð’ üøç ôï óçìåñéíü ñõèìü ðáñá-
ãùãÞò äåäïìÝíùí. Ç áðïèÞêåõóç, ïñãÜíùóç êáé äéá÷åßñéóç ôïõ ìåãÜëïõ áõôïý
üãêïõ äåäïìÝíùí áðáéôåß ôç ÷ñÞóç áõôïìáôïðïéçìÝíùí ìåèüäùí åðéôñÝðïíôáò
óôïõò ÷ñÞóôåò åýêïëç ðñüóâáóç óôá äåäïìÝíá. Óôï ðáñåëèüí, ç äéá÷åßñéóç ôùí
äåäïìÝíùí ãéíüôáí áðü ôá ßäéá ôá ðñïãñÜììáôá åöáñìïãÞò ìÝóù ôïõ óõóôÞìáôïò
áñ÷åßùí ôïõ ëåéôïõñãéêïý óõóôÞìáôïò. Ç ðñïóÝããéóç áõôÞ äçìéïõñãåß ðïëëá-
ðëÜ ðñïâëÞìáôá êáèþò ï ïñéóìüò ôùí äåäïìÝíùí Þôáí óôåíÜ óõíäåäåìÝíïò ìå
ôéò ëåéôïõñãßåò. ÏðïéáäÞðïôå áëëáãÞ óôïí ôñüðï áðïèÞêåõóçò ôùí äåäïìÝíùí
áðáéôïýóå áíôßóôïé÷åò áëëáãÝò óôá ðñïãñÜììáôá åöáñìïãÞò.
Ç ÷ñÞóç ôùí ÓÄÂÄ Ýëõóå ðïëëÜ áðü ôá ðñïâëÞìáôá ðïõ åß÷å ç ðñïçãïýìåíç
ðñïóÝããéóç. Ç áðïèÞêåõóç, ïñãÜíùóç êáé äéá÷åßñéóç ôùí äåäïìÝíùí ðñáã-
ìáôïðïéåßôáé áðïêëåéóôéêÜ áðü ôï ÓÄÂÄ. Ç ðñïóðÝëáóç óôá äåäïìÝíá ãßíåôáé
óôÝëíïíôáò ôéò êáôÜëëçëåò åíôïëÝò óôï ÓÄÂÄ ðïõ áíáëáìâÜíåé íá åîõðçñåôÞóåé
ôá åñùôÞìáôá ôùí ÷ñçóôþí.
1.8. Ç ëßóôá ôùí êëáóéêþí êáé óýã÷ñïíùí åöáñìïãþí äåí åßíáé åîáíôëçôéêÞ.
Ìðïñåßôå íá áíáöÝñåôå êáé íá ðåñéãñÜøåôå Üëëåò åöáñìïãÝò, ôüóï êëáóéêÝò
üóï êáé óýã÷ñïíåò;
1.9. ÐïéÝò êáôÜ ôç ãíþìç óáò åßíáé ïé áíÜãêåò ðñïóôáóßáò äåäïìÝíùí ðïõ èá
ðñÝðåé íá éêáíïðïéïýíôáé áðü Ýíá ÓÄÂÄ;
1.10. Ãéá ðïéïýò ëüãïõò ç åðåêôáóéìüôçôá èåùñåßôáé óçìáíôéêÞ éäéüôçôá ãéá Ýíá
ÓÄÂÄ;
ÖõóéêÜ ÌÝóá ÁðïèÞêåõóçò
2
Ôï âáóéêü ÷áñáêôçñéóôéêü åíüò ÓÄÂÄ åßíáé ç äõíáôüôçôá áðïèÞêåõóçò ìåãÜëïõ
üãêïõ äåäïìÝíùí. Ç áðïèÞêåõóç ôùí äåäïìÝíùí ðñáãìáôïðïéåßôáé óå öõóéêÜ
ìÝóá áðïèÞêåõóçò (physical storage media). Ôá ìÝóá áõôÜ åßíáé óõóêåõÝò ðïõ
ðáñÝ÷ïõí äõíáôüôçôåò áðïèÞêåõóçò êáé ðñïóðÝëáóçò ôùí äåäïìÝíùí. Ôá äýï
âáóéêÜ ÷áñáêôçñéóôéêÜ ôùí ìÝóùí áðïèÞêåõóçò åßíáé ç óõíïëéêÞ ÷ùñçôéêüôçôá
(capacity) ôïõ ìÝóïõ êáé ï ÷ñüíïò ðñïóðÝëáóçò (access time) ôùí äåäïìÝíùí.
ÂÝâáéá, üóï áõîÜíåôáé ç ôá÷ýôçôá ðñïóðÝëáóçò êáé ç ÷ùñçôéêüôçôá, ôüóï áõîÜ-
íåôáé êáé ôï áíôßóôïé÷ï êüóôïò. ¸íáò Üëëïò óçìáíôéêüò ðáñÜãïíôáò åßíáé ç
áîéïðéóôßá (reliability) ôïõ ìÝóïõ, ç ïðïßá ìåôñÜôáé ìå ôç óõ÷íüôçôá åìöÜíéóçò
âëáâþí óôï ìÝóï áðïèÞêåõóçò.
Óôç óõíÝ÷åéá äßíåôáé ìßá óõíïðôéêÞ ðåñéãñáöÞ ôùí óõíçèÝóôåñùí ìÝóùí
áðïèÞêåõóçò ðïõ ÷ñçóéìïðïéïýíôáé óôá óýã÷ñïíá õðïëïãéóôéêÜ óõóôÞìáôá êáé
ðïõ áðáñôßæïõí ôç ëåãüìåíç éåñáñ÷ßá ìíÞìçò (storage hierarchy). Ùóôüóï, ìå-
ñéêÜ ìüíï áðü áõôÜ ôá ìÝóá åßíáé åêìåôáëëåýóéìá áðü ôï ÓÄÂÄ êáé áõôÜ åßíáé
ðïõ èá áíáëõèïýí óôç ëåðôïìÝñåéÜ ôïõò óå åðüìåíåò ðáñáãñÜöïõò.
51
52 ÊåöÜëáéï 2. ÖõóéêÜ ÌÝóá ÁðïèÞêåõóçò
• Êýñéá ÌíÞìç (main memory). Åßíáé ìßá äõíáìéêÞ ìíÞìç ôõ÷áßáò ðñïóðÝ-
ëáóçò (DRAM). Ðñüêåéôáé ãéá äéáôÜîåéò ðïõ åßíáé éêáíÝò íá áðïèçêåýïõí
áñêåôÝò äåêÜäåò GBytes, áíáëüãùò ìå ôï ðëÞèïò ôùí ïëïêëçñùìÝíùí êõ-
êëùìÜôùí ðïõ ÷ñçóéìïðïéïýíôáé. Ç ÷ùñçôéêüôçôá ôçò êýñéáò ìíÞìçò óôïõò
óýã÷ñïíïõò ðñïóùðéêïýò õðïëïãéóôÝò (PC) åßíáé óõíÞèùò áðü 512 MBytes
ìÝ÷ñé 2 GBytes, åíþ ãéá ôçí ðåñßðôùóç õðïëïãéóôéêþí óõóôçìÜôùí ðïõ ÷ñç-
óéìïðïéïýíôáé ùò åîõðçñÝôåò (servers) ôï ìÝãåèïò ìðïñåß íá åßíáé áñêåôÜ
ìåãáëýôåñï. Âáóéêü ìåéïíÝêôçìá ôçò êýñéáò ìíÞìçò åßíáé üôé óå ðåñßðôùóç
äéáêïðÞò ôçò ôñïöïäïóßáò ôá äåäïìÝíá äéáãñÜöïíôáé.
ôåñá. Óôï Ó÷Þìá 2.1 ðáñïõóéÜæåôáé Ýíá ó÷åäéÜãñáììá ðïõ ðåñéãñÜöåé ôá óç-
ìáíôéêüôåñá ôìÞìáôá åíüò óêëçñïý ìáãíçôéêïý äßóêïõ. ÕðÜñ÷ïõí åðéöÜíåéåò
äßóêùí (platters) ðïõ ðåñéóôñÝöïíôáé ìå óôáèåñÞ ãùíéáêÞ ôá÷ýôçôá (Constant
Angular Velocity, CLV) ãýñù áðü Ýíáí Üîïíá ðåñéóôñïöÞò (spindle). Ï êÜèå
äßóêïò Ý÷åé ìáãíçôéêÞ åðßóôñùóç êáé ç åðéöÜíåéÜ ôïõ ÷ùñßæåôáé óå êõêëéêÝò
áôñÜêôïõò Þ ôñï÷éÝò (tracks).
Κ τ έ ν ι
ρ α χ ί ο ν α ς
Π ρ ο σ π έ λ α σ η ς Β
Κ ε φ α λ ή Ά τ ρ α κ τ ο ς
ί σ κ ο ς
Τ ο έ α ς Ά τ ρ α κ τ ο ς
Κ ύ λ ι ν δ ρ ο ς
Ά ξ ο ν α ς
Π ε ρ ι σ τ ρ ο φ ή ς
Ïé Üôñáêôïé üëùí ôùí äßóêùí ìå ßóç áêôßíá ó÷çìáôßæïõí Ýíá íïåñü êýëéí-
äñï (cylinder). ÊáôÜ ôç äéÜñêåéá ôçò ìïñöïðïßçóçò ôïõ äßóêïõ áðü ôïí êáôá-
óêåõáóôÞ, ïé Üôñáêôïé õðïäéáéñïýíôáé óå óôáèåñü áñéèìü ôïìÝùí (sectors)1 ìå ôç
âïÞèåéá ôùí êåíþí (interblock gap) ðïõ Ý÷ïõí óôáèåñü ìÝãåèïò. Ï ôïìÝáò áíôé-
óôïé÷åß óôç ìéêñüôåñç ìïíÜäá ðëçñïöïñßáò ðïõ ìðïñåß íá ðñïóðåëáóèåß ãéá áíÜ-
ãíùóç/áðïèÞêåõóç. Ôï ìÝãåèïò åíüò ôïìÝá óå óõóôÞìáôá PC (ð.÷., óå óõóôÞìáôá
MS-Windows êáé ðáëáéüôåñá óõóôÞìáôá MS-DOS) åßíáé 512 bytes, áëëÜ óå ìå-
ãáëýôåñá óõóôÞìáôá (ð.÷., ôýðïõ UNIX) åßíáé áñêåôÜ ìåãáëýôåñï êáé öèÜíåé ôá
4-8 kbytes. Ëüãù ôçò óôáèåñÞò ãùíéáêÞò ôá÷ýôçôáò êáé ôïõ äéáöïñåôéêïý ìÞêïõò
ôùí ôïìÝùí, ôá äåäïìÝíá áðïèçêåýïíôáé ìå äéáöïñåôéêÞ ðõêíüôçôá (recording
density) óôéò äéÜöïñåò èÝóåéò ôïõ äßóêïõ. Ðéï óõãêåêñéìÝíá, ç ðõêíüôçôá åß-
íáé ìåãáëýôåñç (áíôéóôïß÷ùò, ìéêñüôåñç) óôéò åóþôåñåò (áíôéóôïß÷ùò, åîþôåñåò)
áôñÜêôïõò. Óå êÜèå åðéöÜíåéá äßóêïõ ìå ìáãíçôéêÞ åðßóôñùóç áíôéóôïé÷åß ìßá
ìáãíçôéêÞ êåöáëÞ (head), ðïõ âñßóêåôáé ôïðïèåôçìÝíç óå Ýíá âñá÷ßïíá (arm).
Ïé êåöáëÝò ìåôáêéíïýíôáé üëåò ìáæß ðñïò ôá äåîéÜ Þ ôá áñéóôåñÜ, üðùò äåß÷íïõí
1
Éóïäýíáìá ÷ñçóéìïðïéåßôáé ï üñïò óåëßäá (page) Þ êáé block.
56 ÊåöÜëáéï 2. ÖõóéêÜ ÌÝóá ÁðïèÞêåõóçò
Ç öÜóç áíáæÞôçóçò åßíáé ç ðéï ÷ñïíïâüñá áðü ôéò ôñåéò êáé áðïôåëåß óõíÞèùò
ôï áäýíáôï óçìåßï ôùí äßóêùí. Ï Ðßíáêáò 2.2 ðáñïõóéÜæåé ôá âáóéêÜ ôå÷íéêÜ
÷áñáêôçñéóôéêÜ ìåñéêþí óýã÷ñïíùí ìáãíçôéêþí äßóêùí.
Óçìáíôéêü ñüëï ãéá ôçí áðüäïóç åíüò óõóôÞìáôïò óêëçñïý äßóêïõ ðáßæåé ç
áðïìïíùôéêÞ ìíÞìç (buffer Þ cache). Ðñüêåéôáé ãéá äéÜôáîç ìíÞìçò ç ïðïßá
÷ñçóéìïðïéåßôáé ãéá ôçí ðñïóùñéíÞ áðïèÞêåõóç äåäïìÝíùí ôïõ äßóêïõ. Ôïíßæå-
ôáé üôé ç ìíÞìç áõôÞ åßíáé åíóùìáôùìÝíç óôï óýóôçìá ôïõ óêëçñïý äßóêïõ êáé
äåí áðïôåëåß ìÝñïò ôçò ìíÞìçò RAM ôïõ õðïëïãéóôéêïý óõóôÞìáôïò. Ðñéí áðü
êÜèå ðñïóðÝëáóç, ðñáãìáôïðïéåßôáé Ýëåã÷ïò ãéá ôï áí ôá äåäïìÝíá âñßóêïíôáé Þ
ü÷é óôçí áðïìïíùôéêÞ ìíÞìç. Áí íáé, ôüôå äåí áðáéôåßôáé ðñïóðÝëáóç óôï äßóêï.
Ìå ôïí ôñüðï áõôü åðéôá÷ýíåôáé ç äéáäéêáóßá ôçò ìåôáöïñÜò äåäïìÝíùí áðü ôï
äßóêï óôçí êåíôñéêÞ ìïíÜäá åðåîåñãáóßáò. Ðåñéóóüôåñá óôïé÷åßá ãéá ôïí ôñüðï
ðñïóðÝëáóçò ôùí äåäïìÝíùí èá ðáñïõóéÜóïõìå óôï ÊåöÜëáéï 11.
¸íá Üëëï óçìáíôéêü óôïé÷åßï ôçò åðßäïóçò ôùí ìáãíçôéêþí äßóêùí åßíáé
ç áîéïðéóôßá, ç ïðïßá ìåôñÜôáé ìå ôï ìÝóï ÷ñüíï ìåôáîý âëáâþí (Mean Time
Between Failures, MTBF), Ýíá ìÝôñï ðïõ áíôéðñïóùðåýåé ôï ÷ñïíéêü äéÜóôçìá
ðïõ ìåóïëáâåß ìåôáîý äýï äéáäï÷éêþí äõóëåéôïõñãéþí åíüò äßóêïõ. Áðü ôïõò
êáôáóêåõáóôÝò áíáöÝñïíôáé üôé ôõðéêÝò ôéìÝò ôïõ ÷ñüíïõ áõôïý áðü 300.000 ìÝ÷ñé
êáé 1.500.000 þñåò. Ìßá Üëëç ðáñÜìåôñïò ãéá ôç ìÝôñçóç ôçò áîéïðéóôßáò åßíáé
ï ìÝóïò ÷ñüíïò ãéá áðïêáôÜóôáóç (Mean Time to Repair, MTTR), ï ïðïßïò
õðïäçëþíåé ôï ìÝóï ÷ñüíï ðïõ áðáéôåßôáé ãéá ôçí áíôéêáôÜóôáóç ôçò óõóêåõÞò
êáé ôçí åðáíáöïñÜ ôùí äåäïìÝíùí. Ìå ôçí ðñüïäï ôçò ôå÷íïëïãßáò ôùí ìÝóùí
áðïèÞêåõóçò ðáñáôçñïýìå üôé, ç áîéïðéóôßá âåëôéþíåôáé, ï ìÝóïò ÷ñüíïò ìåôáîý
58 ÊåöÜëáéï 2. ÖõóéêÜ ÌÝóá ÁðïèÞêåõóçò
• RAID 0. Ðñüêåéôáé ãéá ôçí áðëïýóôåñç ìïñöÞ üðïõ äåí õðÜñ÷åé åðáíÜ-
ëçøç ôùí äåäïìÝíùí. Ôá äåäïìÝíá äéá÷ùñßæïíôáé óå ìïíÜäåò ðïõ ïíïìÜ-
æïíôáé blocks, êáé ôá ïðïßá äéáìïéñÜæïíôáé óôïõò äéáèÝóéìïõò äßóêïõò. Ôï
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 59
• RAID 3. Êáé áõôü ôï åðßðåäï õéïèåôåß ôçí ôå÷íéêÞ ôïõ data stripping ãéá ôï
äéáìïéñáóìü ôùí äåäïìÝíùí óôïõò áíôßóôïé÷ïõò äßóêïõò. Ïé äéáöïñÝò ìå ôï
åðßðåäï RAID 2 åßíáé äýï: á) ç ôå÷íéêÞ data stripping åöáñìüæåôáé óå åðß-
ðåäï byte êáé ü÷é óå åðßðåäï bit êáé â) ôï åðßðåäï áõôü ÷ñçóéìïðïéåß ìüíï
Ýíá äßóêï ãéá ôçí áðïèÞêåõóç ôçò ðëçñïöïñßáò éóïôéìßáò. Ç ðëçñïöïñßá
éóïôéìßáò ðáñÜãåôáé êáôÜ ôçí áðïèÞêåõóç óôç óõóôïé÷ßá êáé åëÝã÷åôáé ìå
êÜèå áíÜãíùóç. Óå ðåñßðôùóç âëÜâçò ìßáò óõóêåõÞò äßóêïõ äåäïìÝíùí,
ôá êáôåóôñáììÝíá äåäïìÝíá ìðïñïýí íá åðáíáêôçèïýí ìå ôç âïÞèåéá ôùí
õðïëïßðùí äåäïìÝíùí êáé ôùí äåäïìÝíùí áðü ôï äßóêï éóïôéìßáò. Åßíáé
60 ÊåöÜëáéï 2. ÖõóéêÜ ÌÝóá ÁðïèÞêåõóçò
A B C D
E F G H RAID 0
I J K L
M N O P
A A B B C C D D
E E F F G G H H RAID 1
I I J J K K L L
M M N N O O P P
A0 A1 A2 A3 Ισοτιµία Α
B0 B1 B2 B3 Ισοτιµία Β RAID 3
C0 C1 C2 C3 Ισοτιµία C
D0 D1 D2 D3 Ισοτιµία D
A0 A1 A2 A3 Ισοτιµία Α
B0 B1 B2 B3 Ισοτιµία Β RAID 4
C0 C1 C2 C3 Ισοτιµία C
D0 D1 D2 D3 Ισοτιµία D
A0 B0 C0 D0 Ισοτιµία 0
A1 B1 C1 Ισοτιµία 1 E1
RAID 5
A2 B2 Ισοτιµία 2 D2 E2
A3 Ισοτιµία 3 C3 D3 E3
Ισοτιµία 4 B4 C4 D4 E4
A0 B0 C0 D0 Ισοτιµία 0
A1 B1 C1 Ισοτιµία 1 Ισοτιµία 5
RAID 6
A2 B2 Ισοτιµία 2 Ισοτιµία 6 E1
A3 Ισοτιµία 3 Ισοτιµία 7 D2 E2
Ισοτιµία 4 Ισοτιµία 8 C3 D3 E3
Ισοτιµία 9 B4 C4 D4 E4
ìüíï äßóêï ãéá ôéò ðëçñïöïñßåò éóïôéìßáò. ÁíôéèÝôùò, üìùò, äåí ÷ñçóéìï-
ðïéåß ôçí ôå÷íéêÞ ôïõ data stripping óå åðßðåäï byte áëëÜ óå åðßðåäï block.
ÄçëáäÞ, äéáìïéñÜæåé ôá block åíüò áñ÷åßïõ óå üëïõò ôïõò äéáèÝóéìïõò äß-
óêïõò äåäïìÝíùí ìå êõêëéêü ôñüðï. Åðßóçò, áðü ôá block ôùí äßóêùí äå-
äïìÝíùí åîÜãåé Ýíá block éóïôéìßáò, ôï ïðïßï áðïèçêåýåé óôïí áíôßóôïé÷ï
äßóêï éóïôéìßáò. ¸ôóé, óå ðåñßðôùóç âëÜâçò åíüò äßóêïõ äåäïìÝíùí, ÷ñç-
óéìïðïéåßôáé ôï block éóïôéìßáò êáé ôá õðüëïéðá blocks äåäïìÝíùí ãéá ôçí
åðáíÜêôçóç ôùí ìç ðñïóðåëÜóéìùí äåäïìÝíùí. Ãéá ôçí åîõðçñÝôçóç ìßáò
áßôçóçò áíÜãíùóçò åíüò block ÷ñçóéìïðïéåßôáé ìüíï Ýíáò äßóêïò. Ïé õðü-
ëïéðïé äßóêïé åßíáé äéáèÝóéìïé ãéá ôçí åîõðçñÝôçóç Üëëùí áéôÞóåùí. Áõôü
óçìáßíåé üôé ï ñõèìüò ìåôáöïñÜò äåäïìÝíùí êáôÜ ôçí åîõðçñÝôçóç åíüò
óõãêåêñéìÝíïõ åñùôÞìáôïò åßíáé ìéêñüôåñïò, ùóôüóï ðïëëÝò áéôÞóåéò ìðï-
ñïýí íá åîõðçñåôçèïýí ðáñÜëëçëá êáèþò áíáöÝñïíôáé óå äéáöïñåôéêïýò
äßóêïõò. Ïé áéôÞóåéò áðïèÞêåõóçò äåí ìðïñïýí íá åîõðçñåôçèïýí ðáñÜë-
ëçëá, äéüôé ìåôÜ áðü êÜèå áðïèÞêåõóç åíüò block äåäïìÝíùí ðñÝðåé íá
åíçìåñùèïýí ïé ðëçñïöïñßåò éóïôéìßáò, ïé ïðïßåò âñßóêïíôáé áðïèçêåõìÝ-
íåò óôïí Ýíá êáé ìïíáäéêü äßóêï éóïôéìßáò.
ε δ ώ η δ έ σ η l a s e r δ ε ν α ν α κ λ ά τ α ι α ν ά κ λ α σ η δ έ σ η ς l a s e r
ε τ ι κ έ τ τ α
α λ ο υ ί ν ι ο
χ ρ ω σ τ ι κ ή
ο υ σ ί α
π ο λ υ α ν θ ρ α κ ι κ ό
π λ α σ τ ι κ ό
Óå Ýíáí êåíü ïðôéêü äßóêï ç óõíïëéêÞ åðéöÜíåéá ôçò ÷ñùóôéêÞò ïõóßáò åßíáé
çìéäéáöáíÞò. Ç áðïèÞêåõóç ôùí äåäïìÝíùí ðñáãìáôïðïéåßôáé ìå ôç âïÞèåéá äÝ-
óìçò laser, ç ïðïßá ìåôáôñÝðåé ôç ÷ñùóôéêÞ ïõóßá óå áäéáöáíÞ óå óõãêåêñéìÝíá
óçìåßá. Ìå ôçí ôå÷íéêÞ áõôÞ ìðïñïýìå íá áðïèçêåýóïõìå øçöéáêÜ äåäïìÝíá
óå Ýíáí ïðôéêü äßóêï. Ç áíÜãíùóç ôùí äåäïìÝíùí ðñáãìáôïðïéåßôáé ðÜëé ìå
ôç âïÞèåéá äÝóìçò laser ÷áìçëüôåñçò éó÷ýïò. ¼ôáí ç äÝóìç ðåñÜóåé áðü óç-
ìåßï ôçò ÷ñùóôéêÞò ïõóßáò ôï ïðïßï åßíáé çìéäéáöáíÝò, ç äÝóìç èá áíáêëáóèåß
ìÝóù ôçò åðßóôñùóçò áëïõìéíßïõ. ÄéáöïñåôéêÜ, äåí èá õðÜñ÷åé áíÜêëáóç. ¸ôóé,
ìðïñïýìå íá äéá÷ùñßóïõìå ôá bits ôçò ðëçñïöïñßáò ðïõ âñßóêïíôáé óôïí ïðôéêü
äßóêï. Ïé åðáíåããñÜøéìïé ïðôéêïß äßóêïé (CD-RW) êáôáóêåõÜæïíôáé ìå äéá-
öïñåôéêÝò ôå÷íéêÝò ðïõ åðéôñÝðïõí ôç äéáãñáöÞ êáé åðáíá-áðïèÞêåõóç íÝùí
äåäïìÝíùí.
Ï ïðôéêüò äßóêïò ëåéôïõñãåß äéáöïñåôéêÜ áðü ôï ìáãíçôéêü. Ïé óçìáíôéêüôå-
ñåò äéáöïñÝò åßíáé åîÞò äýï:
• óôïõò ïðôéêïýò äßóêïõò ç ðõêíüôçôá áðïèÞêåõóçò åßíáé óôáèåñÞ êáé
Ôï ðëåïíÝêôçìá ôùí óõóêåõþí CLV åßíáé ç êáëýôåñç ÷ñÞóç ôïõ ÷þñïõ ëüãù
ïìïéüìïñöçò ðõêíüôçôáò áðïèÞêåõóçò óå üëï ôï äßóêï. Ôï ìåéïíÝêôçìá åßíáé
üôé ç êåöáëÞ óå Ýíá ôÝôïéï äßóêï äåí ìðïñåß íá ìåôñÞóåé ôéò áôñÜêôïõò ðïõ ðñï-
óðåñíÜ, êáèþò êéíåßôáé ìå ìåãÜëç ôá÷ýôçôá. ¸ôóé, ç ãùíéáêÞ ôá÷ýôçôá áõîÜíåôáé
êáèþò ïé êåöáëÝò êéíïýíôáé ðñïò ôïí Üîïíá ðåñéóôñïöÞò, þóôå üëåò ïé åããñáöÝò
íá ðåñíïýí êÜôù áðü ôï ìç÷áíéóìü áíÜãíùóçò ìå ôïí ßäéï ñõèìü, áíåîÜñôçôá ôçò
èÝóçò ôïõò óôçí åðéöÜíåéá ôïõ äßóêïõ. Ìå ôïí ôñüðï áõôüí üìùò, åßíáé äõíáôüí
íá ÷ñåéáóèïýí ðåñéóóüôåñåò ôçò ìßáò ðñïóðÜèåéåò ìÝ÷ñé íá åíôïðéóèåß ç áíáæç-
ôïýìåíç Üôñáêôïò, ìå áðïôÝëåóìá ç ìåôáêßíçóç ôïõ ìç÷áíéóìïý êáé óõíåðþò ç
áíáæÞôçóç íá åßíáé ó÷åôéêÜ âñáäýôåñåò óå óõóêåõÝò CLV áðü üôé óå óõóêåõÝò
CAV.
Ìßá Üëëç äéáöïñÜ ìåôáîý ôùí äýï ôýðùí äßóêùí åßíáé üôé óôïõò äßóêïõò CLV
äåí õðÜñ÷ïõí ïé ãíùóôïß ïìüêåíôñïé Üôñáêôïé ôùí äßóêùí CAV, áëëÜ ìßá Þ ðå-
ñéóóüôåñåò óðåéñïåéäåßò Üôñáêôïé. Ç ìïñöïðïßçóç èåùñåßôáé ìå âÜóç ìßá áêôßíá
ôïõ äßóêïõ, ïðüôå ìßá íïåñÞ Üôñáêôïò âñßóêåôáé ìåôáîý äýï äéáäï÷éêþí ôïìþí
ôçò áêôßíáò êáé ìßáò óðåéñïåéäïýò áôñÜêôïõ. ¸ôóé, ôï óýíïëï ôùí äéáäï÷éêþí
íïåñþí áôñÜêôùí ßäéáò ÷ùñçôéêüôçôáò ìðïñåß íá èåùñçèåß üôé áðïôåëïýí ìßá
æþíç (zone). Ç äéáìüñöùóç áõôÞ ïíïìÜæåôáé ðïëõæùíéêÞ (multizone) (äßóêïé
ôýðïõ MCLV).
Óå ó÷Ýóç ìå ôïõò ôñåéò ðáñÜãïíôåò êüóôïõò ðïõ áíáöÝñèçêáí óôçí ðåñßðôùóç
ôùí ìáãíçôéêþí äßóêùí, óôïõò ïðôéêïýò äßóêïõò õðÜñ÷åé ìßá äéáöïñïðïßçóç ðïõ
áöïñÜ óôï ÷ñüíï áíáæÞôçóçò. Ðéï óõãêåêñéìÝíá, äåäïìÝíçò ôçò èÝóçò ôïõ ìç-
÷áíéóìïý ôçò êåöáëÞò, õðÜñ÷åé ìßá ìéêñÞ ãåéôïíéÜ áôñÜêôùí ðïõ åíôïðßæïíôáé
÷ùñßò êÜðïéá ÷ñïíïâüñá ðáëéíäñïìéêÞ ìåôáêßíçóç ôïõ âñá÷ßïíá. ÄçëáäÞ, ìå
ìßá áðëÞ ðåñéóôñïöéêÞ êßíçóç åíüò öáêïý óôï ìç÷áíéóìü ôçò êåöáëÞò ðñïóåã-
ãßæïíôáé ìåñéêÝò Üôñáêôïé ðñïò ôá áñéóôåñÜ êáé äåîéÜ ôçò ôñÝ÷ïõóáò èÝóçò ôçò
êåöáëÞò ìå áìåëçôÝï êüóôïò. Ôï óýíïëï ôùí áôñÜêôùí áõôþí ïíïìÜæåôáé åã-
ãýò ðáñÜèõñï (proximal window). Ùóôüóï, ç ðåñéóôñïöÞ áõôÞ ìðïñåß íá ãßíåé
ìÝ÷ñé ìßá ìÝãéóôç ãùíßá, ïðüôå ôï ìÝãåèïò ôïõ åããýò ðáñáèýñïõ åßíáé ó÷åôéêÜ
ðåñéïñéóìÝíï.
Ôá äýï âáóéêÜ ÷áñáêôçñéóôéêÜ ìÝôñçóçò ôçò áðüäïóçò åíüò ïäçãïý ïðôéêþí
äßóêùí åßíáé ç ôá÷ýôçôá ìåôáöïñÜò äåäïìÝíùí êáé ï ÷ñüíïò ðñïóðÝëáóçò ôùí
äåäïìÝíùí. Ç åðßäïóç ôùí ïäçãþí äçëþíåôáé ìå Ýíáí áñéèìü ðïõ ðñïóäéïñßæåé
ðüóåò öïñÝò ãñçãïñüôåñïò åßíáé ï ïäçãüò óå ó÷Ýóç ìå Ýíáí ïäçãü áíáöïñÜò.
Ãéá ðáñÜäåéãìá, ãéá Ýíáí ïäçãü ìå ôïí ðñïóäéïñéóìü 52x, áíáìÝíïõìå íá åßíáé
52 öïñÝò ãñçãïñüôåñïò áðü Ýíáí ïäçãü 1x. Óôïí Ðßíáêá 2.3 áíáöÝñïíôáé ïé ñõè-
ìïß ìåôáöïñÜò äåäïìÝíùí êáé ïé ôá÷ýôçôåò ðñïóðÝëáóçò ãéá ìåñéêïýò ïäçãïýò
ïðôéêþí äßóêùí ðïõ êõêëïöïñïýí óôï åìðüñéï.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 65
#
#
##
##
#
##
##
##
##
##
##
#
##
##
#
##
##
##
##
##
##
#
##
##
#
##
##
##
##
##
##
#
##
##
#
#
(â) #
#########
#########
#########
###
#
#########
#########
#########
###
(ã)
¼ðùò êáé óôçí ðåñßðôùóç ôùí ïðôéêþí äßóêùí, Ýôóé êáé ãéá ôéò ìáãíçôéêÝò
ôáéíßåò, õðÜñ÷ïõí óõóêåõÝò ôýðïõ jukeboxes, ïé ïðïßåò Ý÷ïõí ôç äõíáôüôçôá íá
åíáëëÜóóïõí ôéò ìáãíçôéêÝò ôáéíßåò ìå ñïìðïôéêü ìç÷áíéóìü áíáëüãùò ìå ôá äå-
äïìÝíá ðïõ ðñÝðåé íá ðñïóðåëáóèïýí. Ðñïöáíþò, ï ÷ñüíïò åíáëëáãÞò ôùí
ôáéíéþí åßíáé óçìáíôéêüò êáé åðïìÝíùò, ïé óõóêåõÝò áõôÝò ÷ñçóéìïðïéïýíôáé ãéá
åéäéêÝò åöáñìïãÝò (ð.÷., ãéá äåäïìÝíá ôçëåðéóêüðçóçò ôá ïðïßá óõëëÝãïíôáé áðü
äïñõöüñïõò). Ôï ìåãÜëï ðëåïíÝêôçìá ôùí óõóêåõþí áõôþí åßíáé ç ôåñÜóôéá ÷ù-
ñçôéêüôçôÜ ôïõò ðïõ áñ÷ßæåé áðü ôçí ôÜîç ôùí terabytes. Ãéá ðáñÜäåéãìá, ìßá
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 69
óýã÷ñïíç óõóêåõÞ áõôïý ôïõ ôýðïõ åßíáé ç óåéñÜ MSL6060 ôçò Hewlett Packard,
ç ïðïßá óôçí ðëÝïí áíáâáèìéóìÝíç äéáìüñöùóç (configuration) ðåñéëáìâÜíåé 4
ïäçãïýò ôáéíéþí ãéá 60 èÝóåéò ôáéíéþí ìå ÷ùñçôéêüôçôá 600 GBytes áíÜ ôáéíßá ðñï
óõìðßåóçò êáé ôåëéêÞ óõíïëéêÞ êáèáñÞ ÷ùñçôéêüôçôá 192 ÔÂytes. ¢ëëá ÷áñáêôç-
ñéóôéêÜ ôçò óõóêåõÞò áõôÞò åßíáé üôé áðáéôåß 240 äåõôåñüëåðôá ãéá ÷ñüíï áñ÷é-
êïðïßçóçò êáé 15 äåõôåñüëåðôá ãéá ìÝóï ÷ñüíï åíáëëáãÞò ôáéíéþí óôïí ïäçãü,
åíþ ï ìÝóïò ÷ñüíïò ìåôáöïñÜò äåäïìÝíùí åßíáé 30 MBytes/sec. ÔÝëïò, ï ìÝ-
óïò ÷ñüíïò ìåôáîý âëáâþí (MTBF) åßíáé 250.000 þñåò, äçëáäÞ 28,5 Ýôç ðåñßðïõ
êáé ìÝóç ôéìÞ ëåéôïõñãéþí ìåôáîý âëáâþí (MSBF) 2.000.000 åíáëëáãÝò ôáéíéþí.
ÐåñáéôÝñù, ôÝóóåñéò ôÝôïéåò óõóêåõÝò ìðïñïýí íá äéáóõíäåèïýí ãéá áíþôåñåò
åðéäüóåéò áðïèÞêåõóçò.
Åðß ôïõ ðáñüíôïò, óôá ðñïúüíôá ðïõ äéáôßèåíôáé óôï åìðüñéï ÷ñçóéìïðïéåßôáé ï
ãñáììéêüò ôñüðïò ïñãÜíùóçò ôùí äåäïìÝíùí óôçí ôáéíßá, õðïóôçñßæïíôáò ìüíï
ôå÷íïëïãßá WORM.
Ìßá Üëëç êáôåýèõíóç åßíáé ç áîéïðïßçóç ôçò ïëïãñáößáò (holography) ãéá ôçí
áíÜðôõîç åéäéêþí óõóêåõþí, ìå óêïðü ôçí åêìåôÜëëåõóç ôùí ôñéþí äéáóôÜóåùí
ôïõ ÷þñïõ ãéá ôçí áðïèÞêåõóç äåäïìÝíùí. Ãéá ðáñÜäåéãìá, ðåéñáìáôéêÜ Ý÷åé
åðéôåõ÷èåß ç áðïèÞêåõóç 1000 åéêüíùí óå êñýóôáëëï ïîåéäßïõ ëéèßïõ-íéïâßïõ
ìÞêïõò 1 cm, åíþ åêôéìÜôáé üôé ìðïñåß íá åðéôåõ÷èåß áðïèÞêåõóç äåäïìÝíùí 10
TBytes óå 1 cm3 . ÂÝâáéá, ðáñÜ ôçí õøçëÞ áðïèçêåõôéêÞ éêáíüôçôá, ðñüâëçìá
ðáñáìÝíåé ç ôá÷ýôçôá ìåôáöïñÜò äåäïìÝíùí.
ÔÝëïò, ìßá Üëëç êáôåýèõíóç åßíáé ðñïò ôçí áíÜðôõîç äßóêùí ðïõ óôçñßæï-
íôáé óôï öáéíüìåíï ôçò ðáãßäåõóçò çëåêôñïíßùí (electron trapping). Ìå áðëÜ
ëüãéá, óå ðåñßðôùóç áðïèÞêåõóçò Ýíá óôñþìá õëéêïý ôýðïõ öùóöüñïõ äÝ÷å-
ôáé áêôßíá öùôüò êáé åêðÝìðåé çëåêôñüíéá, ðïõ áðïññïöþíôáé áðü ìßá áãþãéìç
æþíç. Ãéá ôçí áíÜãíùóç äåäïìÝíùí, ï äßóêïò óáñþíåôáé áðü öùò äéáöïñåôéêÞò
óõ÷íüôçôáò ðïõ áíáãêÜæåé ôá çëåêôñüíéá íá åîÝëèïõí áðü ôçí áãþãéìç æþíç êáé
íá åêðÝìøïõí öùôüíéá. Áíáëüãùò ìå ôçí Ýíôáóç ôçò áêôßíáò öùôüò êáôÜ ôçí
áðïèÞêåõóç, åîÜãïíôáé ðåñéóóüôåñá Þ ëéãüôåñá çëåêôñüíéá, êáé êáôÜ óõíÝðåéá
öùôüíéá êáôÜ ôçí ôåëéêÞ öÜóç. Áõôü éóïäõíáìåß ìå ôçí áðïèÞêåõóç ðåñéóóüôå-
ñùí áðü Ýíá bit óå êÜèå èÝóç. ¸ôóé, åêôéìÜôáé üôé ìå ôç ìÝèïäï áõôÞ èá åðéôåõ-
÷èïýí õøçëÝò áðïèçêåõôéêÝò åðéäüóåéò êáé ôá÷ýôçôåò ìåôáöïñÜò äåäïìÝíùí óôï
ìÝëëïí. ÌåéïíÝêôçìá åßíáé üôé ìåôÜ áðü êÜèå áíÜãíùóç ðñÝðåé íá áêïëïõèÞóåé
åðáíá-áðïèÞêåõóç ìå ôçí ßäéá áñ÷éêÞ äéáäéêáóßá. Ï Ðßíáêáò 2.5 óõíïøßæåé ôá
ìÝ÷ñé óôéãìÞò äåäïìÝíá ãéá ôéò óõóêåõÝò ðïõ óôçñßæïíôáé óôçí ïðôéêÞ ôå÷íïëïãßá.
72 ÊåöÜëáéï 2. ÖõóéêÜ ÌÝóá ÁðïèÞêåõóçò
LAN
IDC
IDC
IDC
IDC
LAN
IDC
SCSI
2.7 Óýíïøç
Ôï âáóéêü ÷áñáêôçñéóôéêü åíüò ÓÄÂÄ åßíáé ç äõíáôüôçôá áðïèÞêåõóçò ìåãÜëïõ
üãêïõ äåäïìÝíùí. Ç áðïèÞêåõóç ôùí äåäïìÝíùí ðñáãìáôïðïéåßôáé óå öõóéêÜ
74 ÊåöÜëáéï 2. ÖõóéêÜ ÌÝóá ÁðïèÞêåõóçò
2.3. ¸óôù C ôï óýíïëï ôùí êõëßíäñùí åíüò ìáãíçôéêïý äßóêïõ, åíþ èåùñåßôáé
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 75
üôé êÜèå êýëéíäñïò ðñïóðåëÜæåôáé éóïðßèáíá. Íá âñåèåß ç ìÝóç ôéìÞ ôïõ ðëÞ-
èïõò ôùí êõëßíäñùí ðïõ óáñþíïíôáé áðü ôéò êéíïýìåíåò êåöáëÝò óå ìßá ôõ÷áßá
ðñïóðÝëáóç èåùñþíôáò üôé åêêéíïýí áðü ôõ÷áßá èÝóç êáé êáôåõèýíïíôáé åðß-
óçò óå ôõ÷áßá èÝóç. Áí õðïôåèåß üôé ïé êýëéíäñïé åíüò óõóôÞìáôïò áñ÷åßùí äåí
ðñïóðåëÜæïíôáé éóïðßèáíá, ôüôå ðïéüò åßíáé ï êáëýôåñïò ôñüðïò äéÜôáîçò ôùí
äåäïìÝíùí þóôå íá åëá÷éóôïðïéçèåß ï ÷ñüíïò áíáæÞôçóçò;
2.11. ÌáãíçôéêÞ ôáéíßá ìå ãñáììéêÞ äéáìüñöùóç Ý÷åé ìÞêïò 2.400 ðüäéá, ç ðõ-
êíüôçôá áðïèÞêåõóçò åßíáé 1.600 bpi êáé ç ôá÷ýôçôá áíÜãíùóçò/áðïèÞêåõóçò
åßíáé 50 ßíôóåò/sec. Ôï êåíü ìåôáîý ôùí öõóéêþí åããñáöþí åßíáé 0,5 ßíôóá, åíþ
ï ÷ñüíïò åêêßíçóçò/óôÜóçò åßíáé 0,01 sec. Áí ôï ìÞêïò ôçò ëïãéêÞò åããñáöÞò
åßíáé 200 bytes, ðïéüò åßíáé ï âÝëôéóôïò ðáñÜãïíôáò ïìáäïðïßçóçò þóôå X% ôçò
ôáéíßáò íá êáôáëáìâÜíåôáé áðü öõóéêÝò åããñáöÝò; Ðüóï ìÞêïò ôáéíßáò ÷ñåéÜæå-
ôáé ãéá íá áðïèçêåõèïýí Y öõóéêÝò åããñáöÝò ìåãÝèïõò B bytes;
2.14. Áò õðïôåèåß üôé ãéá ôçí ðñïçãïýìåíç Üóêçóç ç áíÜãíùóç ôùí ôïìÝùí
áðü ôï äßóêï ãßíåôáé êáôÜ äéáäï÷éêïýò êõëßíäñïõò. Ôá äåäïìÝíá âñßóêïíôáé óå
30.000 ôïìåßò ðïõ ìïéñÜæïíôáé åîßóïõ óå 500 êõëßíäñïõò. Ôï óýóôçìá äßóêùí
áðïôåëåßôáé áðü ôÝóóåñéò ÷ñÞóéìåò åðéöÜíåéåò êáé ïé ôïìåßò ðïõ áíôéóôïé÷ïýí
óå Ýíá êýëéíäñï ìïéñÜæïíôáé åîßóïõ óå áõôÝò. Ï åëÜ÷éóôïò ÷ñüíïò áíáæÞôçóçò
åßíáé ßóïò ìå 7 ms, ï ìÝóïò ÷ñüíïò ðåñéóôñïöéêÞò êáèõóôÝñçóçò åßíáé 8,3 ms,
åíþ ï ÷ñüíïò ìåôáöïñÜò äåí ëáìâÜíåôáé õð’ üøç. Íá õðïëïãéóèåß êáé ðÜëé ï
áðáéôïýìåíïò óõíïëéêüò ÷ñüíïò.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 77
79
80 ÊåöÜëáéï 3. Áñ÷éôåêôïíéêÞ ÓõóôçìÜôùí
Χ ρ ή σ τ η ς Α Χ ρ ή σ τ η ς Β Χ ρ ή σ τ η ς Γ
Ε ξ ω τ ε ρ ι κ ή Ό ψ η Α Ε ξ ω τ ε ρ ι κ ή Ό ψ η Β Ε ξ ω τ ε ρ ι κ ή Ό ψ η Γ
Ε ξ ω τ ε ρ ι κ ό Ε π ί π ε δ ο
Μ ε τ α τ ρ ο π ή ε τ α ξ ύ
ε ξ ω τ ε ρ ι κ ο ύ κ α ι ε ν ν ο ι ο λ ο γ ι κ ο ύ
Ε ν ν ο ι ο λ ο γ ι κ ό Σ χ ή , α
Ε ν ν ο ι ο λ ο γ ι κ ό Ε π ί π ε δ ο
Μ ε τ α τ ρ ο π ή ε τ α ξ ύ
ε σ ω τ ε ρ ι κ ο ύ κ α ι ε ν ν ο ι ο λ ο γ ι κ ο ύ
Ε σ ω τ ε ρ ι κ ό Σ χ ή , α
Ε σ ω τ ε ρ ι κ ό Ε π ί π ε δ ο
Α π ο θ η κ ε υ , έ ν α
3 ε δ ο , έ ν α
Áêïëïõèåß Ýíá áðëü ðáñÜäåéãìá ãéá ôçí êáôáíüçóç ôùí ðñïçãïýìåíùí åí-
íïéþí. Áò èåùñÞóïõìå Ýíáí åêäïôéêü ïßêï ðïõ äéáôçñåß ìßá çëåêôñïíéêÞ âé-
âëéïèÞêç üðïõ áðïèçêåýåé Ýíá õðïóýíïëï ôùí åêäüóåþí ôïõ óå çëåêôñïíéêÞ
ìïñöÞ (ð.÷., óå ìïñöÞ PDF). ¸ôóé, äßíåôáé ç äõíáôüôçôá óå ÷ñÞóôåò íá ðñáãìá-
ôïðïéïýí áíáæçôÞóåéò óôç âéâëéïèÞêç êáé íá áíáêôïýí äéÜöïñá âéâëßá êáôüðéí
óõíäñïìÞò. Èåùñïýìå üôé ôá âéâëßá åßíáé äéá÷ùñéóìÝíá ìå âÜóç ôï ãíùóôéêü
áíôéêåßìåíï, åíþ ôï ðïóü ôçò óõíäñïìÞò åßíáé áíÜëïãï ôïõ ðëÞèïõò ôùí ãíùóôé-
êþí áíôéêåéìÝíùí ðïõ Ý÷åé åðéëÝîåé êÜèå ÷ñÞóôçò. Èåùñïýìå üôé Ý÷ïõìå ôïõò
÷ñÞóôåò X1 , X2 êáé X3 . Ï ÷ñÞóôçò X1 Ý÷åé äéêáßùìá ðñüóâáóçò óôç ãíùóôéêÞ
ðåñéï÷Þ ÉáôñéêÞ ÐëçñïöïñéêÞ, ï ÷ñÞóôçò X2 óôéò ãíùóôéêÝò ðåñéï÷Ýò ÉáôñéêÞ
ÐëçñïöïñéêÞ êáé Äßêôõá Åðéêïéíùíßáò, åíþ ï ÷ñÞóôçò X3 äåí åßíáé áêüìç óõí-
äñïìçôÞò óå êÜðïéá ãíùóôéêÞ ðåñéï÷Þ. ¸óôù üôé õðÜñ÷ïõí áðïèçêåõìÝíåò ïé
ðëçñïöïñßåò ðïõ åìöáíßæïíôáé óôïí Ðßíáêá 3.1.
• Ôï ðåäßï Áñ÷åßï PDF åßíáé ðñïóðåëÜóéìï ìüíï áðü ôïõò ÷ñÞóôåò ðïõ åßíáé
óõíäñïìçôÝò ãéá ôç óõãêåêñéìÝíç ãíùóôéêÞ ðåñéï÷Þ. ¸ôóé, ï ÷ñÞóôçò X1
ìðïñåß íá ðñïóðåëÜóåé ôï ðåäßï áõôü ìüíï ãéá ôá âéâëßá ìå êùäéêïýò 1001
êáé 1002. Ï ÷ñÞóôçò X2 ìðïñåß íá ðñïóðåëÜóåé ôï ðåäßï ãéá ôá âéâëßá ìå
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 85
êùäéêïýò 1001, 1002, 2099 êáé 2100. ÔÝëïò ï ÷ñÞóôçò X3 , ðïõ äåí åßíáé
áêüìç óõíäñïìçôÞò, äåí Ý÷åé ðñïóðÝëáóç óôï ðåäßï áõôü ãéá üëá ôá âéâëßá.
Óýìöùíá ìå ôá ðñïçãïýìåíá, Ý÷ïõìå ôñßá åîùôåñéêÜ ó÷Þìáôá (Ýíá ãéá êÜèå
÷ñÞóôç), Ýíá åííïéïëïãéêü ó÷Þìá êáé Ýíá åóùôåñéêü ó÷Þìá, ðïõ äéáìïñöþíïíôáé
ùò åîÞò:
• Åîùôåñéêü Ó÷Þìá X1 : ðåñéëáìâÜíåé ôá ðåäßá Êùäéêüò, Ôßôëïò, ÃíùóôéêÞ
Ðåñéï÷Þ, Óåëßäåò, ÔéìÞ ãéá üëåò ôéò ãíùóôéêÝò ðåñéï÷Ýò. ÅðéðëÝïí ãéá ôç
ãíùóôéêÞ ðåñéï÷Þ ÉáôñéêÞ ÐëçñïöïñéêÞ ðåñéëáìâÜíåôáé êáé ôï ðåäßï Áñ-
÷åßï PDF.
• Åîùôåñéêü Ó÷Þìá X2 : ðåñéëáìâÜíåé ôá ðåäßá Êùäéêüò, Ôßôëïò, ÃíùóôéêÞ
Ðåñéï÷Þ, Óåëßäåò, ÔéìÞ ãéá üëåò ôéò ãíùóôéêÝò ðåñéï÷Ýò. Ãéá ôéò ãíùóôéêÝò
ðåñéï÷Ýò ÉáôñéêÞ ÐëçñïöïñéêÞ êáé Äßêôõá Åðéêïéíùíßáò ðåñéëáìâÜíåôáé
êáé ôï ðåäßï Áñ÷åßï PDF.
• Åîùôåñéêü Ó÷Þìá X3 : ðåñéëáìâÜíåé ôá ðåäßá Êùäéêüò, Ôßôëïò, ÃíùóôéêÞ
Ðåñéï÷Þ, Óåëßäåò, ÔéìÞ ãéá üëåò ôéò ãíùóôéêÝò ðåñéï÷Ýò.
• Åííïéïëïãéêü Ó÷Þìá: ðåñéëáìâÜíåé ôá ðåäßá Êùäéêüò, Ôßôëïò, ÃíùóôéêÞ
Ðåñéï÷Þ, Óåëßäåò, ÔéìÞ, Áñ÷åßï PDF, Áíôßôõðá ãéá üëåò ôéò ãíùóôéêÝò ðå-
ñéï÷Ýò.
• Åóùôåñéêü Ó÷Þìá: ðåñéëáìâÜíåé ôá ðåäßá Êùäéêüò, Ôßôëïò, ÃíùóôéêÞ Ðå-
ñéï÷Þ, Óåëßäåò, ÔéìÞ, Áñ÷åßï PDF, Áíôßôõðá êáé åðéðëÝïí ôéò áðáñáßôçôåò
ðëçñïöïñßåò ãéá ôïí ôñüðï áðïèÞêåõóçò ôùí ðåäßùí áõôþí. Ãéá ðáñÜ-
äåéãìá, ôï ðåäßï Óåëßäåò ìðïñåß íá êùäéêïðïéçèåß ùò èåôéêüò áêÝñáéïò
áñéèìüò, åíþ ôï ðåäßï Ôßôëïò ìðïñåß íá áíáðáñáóôáèåß ùò óåéñÜ ÷áñáêôÞ-
ñùí.
Ðáñáôçñïýìå üôé äéáöïñåôéêïß ÷ñÞóôåò Ý÷ïõí ðñïóðÝëáóç óå äéáöïñåôéêÜ
äåäïìÝíá ôçò ÂÄ, áíáëüãùò ìå ôïõò ðåñéïñéóìïýò êáé ôïõò êáíüíåò ðñïóðÝëáóçò
ðïõ åöáñìüæåé ï åêäïôéêüò ïßêïò. Ôá äéêáéþìáôá ðñïóðÝëáóçò ìåôáâÜëëïíôáé
áíáëüãùò ìå ôéò åêÜóôïôå óõíèÞêåò. Ãéá ðáñÜäåéãìá, áí Ýíáò ÷ñÞóôçò ðëçñþóåé
óõíäñïìÞ ãéá ìßá ãíùóôéêÞ ðåñéï÷Þ, áõôïìÜôùò áðïêôÜ äéêáßùìá ðñïóðÝëáóçò
ôùí áíôßóôïé÷ùí áñ÷åßùí PDF.
ÌåôÜ ôçí åêôÝëåóç ôçò åíôïëÞò áõôÞò óõìâáßíïõí ôá åîÞò: á) ôï ÓÄÂÄ åíçìå-
ñþíåé ôïí êáôÜëïãï äåäïìÝíùí ó÷åôéêÜ ìå ôç äçìéïõñãßá ìßáò íÝáò ïíôüôçôáò
(Áõôïêßíçôï) ìå ôá áíôßóôïé÷á ÷áñáêôçñéóôéêÜ, â) äåóìåýåôáé ìßá ðåñéï÷Þ óôï
÷þñï áðïèÞêåõóçò ôçò ÂÄ êáé ã) êáôáóêåõÜæåôáé ï ðßíáêáò ðïõ áñ÷éêÜ äåí
ðåñéÝ÷åé äåäïìÝíá.
¸óôù ôþñá üôé Ýíáò ÷ñÞóôçò åðéèõìåß íá áíáæçôÞóåé áðü ôá áðïèçêåõìÝíá ìï-
íôÝëá áõôÜ ðïõ Ý÷ïõí éððïäýíáìç ìåãáëýôåñç áðü 115 ßððïõò. Áõôü åðéôõã÷Ü-
íåôáé ìå ôçí åêôÝëåóç ôçò åîÞò åíôïëÞò ôçò ãëþóóáò åñùôçìÜôùí:
SELECT *
FROM Áõôïêßíçôï
WHERE éððïäýíáìç > 115;
Ό ν ο α Ε π ί θ ε τ ο ι ε ύ θ υ ν σ η Τ ί τ λ ο ς Σ ε λ ί δ ε ς
Σ υ γ γ ρ α φ έ α ς Έ χ ε ι γ ρ ά ψ ε ι Β ι β λ ί ο
Μ ε τ α γ λ ω τ τ ι σ τ ή ς Χ ρ ή σ τ ε ς κ α ι
Ε ρ ω τ η ά τ ω ν D M L Ε φ α ρ ο γ έ ς
Π ί ν α κ α ς Κ λ ε ι δ α ρ ι ώ ν
Έ λ ε γ χ ο ς Μ ε τ α γ λ ω τ τ ι σ τ ή ς
Μ η χ α ν ή Ε κ τ έ λ ε σ η ς
Τ α υ τ ο χ ρ ο ν ι σ ο ύ Ε ν τ ο λ ώ ν D D L
ι α χ ε ι ρ ι σ τ ή ς Σ υ ν α λ λ α γ ώ ν
ι α χ ε ι ρ ι σ τ ή ς Α ρ χ ε ί ω ν
ι α χ ε ι ρ ι σ τ ή ς
ι α χ ε ι ρ ι σ τ ή ς
Ε π α ν ά κ τ η σ η ς κ α ι
Α π ο ο ν ω τ ι κ ή ς Μ ν ή η ς
Η ε ρ ο λ ο γ ί ο υ
ι α χ ε ι ρ ι σ τ ή ς Α π ο θ ή κ η ς
Α π ο ο ν ω τ ι κ ή Μ ν ή η
Β ά σ η ε δ ο έ ν ω ν
Σ τ α τ ι σ τ ι κ ά Λ ε ξ ι κ ό
Κ α τ ά λ ο γ ο ι
Σ τ ο ι χ ε ί α ε δ ο έ ν ω ν
Α ρ χ ε ί α ε δ ο έ ν ω ν
3.5 Óýíïøç
Ç áñ÷éôåêôïíéêÞ ôñéþí åðéðÝäùí ANSI-SPARC áðïôåëåß ìßá áðü ôéò ðñþôåò ðñï-
óðÜèåéåò ãéá ôç ìåëÝôç ôçò äïìÞò åíüò ÓÄÂÄ. Ç áñ÷éôåêôïíéêÞ áõôÞ äéá÷ùñßæåé
Ýíá ÓÄÂÄ óå ôñßá åðßðåäá: ôï åîùôåñéêü, ôï åóùôåñéêü êáé ôï åííïéïëïãéêü.
ÊÜèå åðßðåäï ÷áñáêôçñßæåôáé áðü ôï äéêü ôïõ ó÷Þìá.
Ï âáóéêüò ôñüðïò åðéêïéíùíßáò ÷ñçóôþí êáé ÓÄÂÄ åßíáé ç ÷ñÞóç ìßáò ãëþó-
óáò ÂÜóåùí ÄåäïìÝíùí ðïõ áðïôåëåßôáé áðü äýï âáóéêÜ ôìÞìáôá: á) ôç ãëþóóá
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 97
ïñéóìïý äåäïìÝíùí, ìå ôçí ïðïßá ïñßæïíôáé ïé ôýðïé ôùí äåäïìÝíùí êáé äçìéïõñ-
ãåßôáé ç äïìÞ ôçò âÜóçò êáé â) ôç ãëþóóá ÷åéñéóìïý äåäïìÝíùí, ìå ôçí ïðïßá
ìðïñïýìå íá äéáôõðþíïõìå åñùôÞìáôá áíÜêôçóçò, åéóáãùãÞò, äéáãñáöÞò êáé
åíçìÝñùóçò óôï ÓÄÂÄ.
Ç äçìéïõñãßá åíüò ìïíôÝëïõ áíáðáñÜóôáóçò ôïõ ðñáãìáôéêïý êüóìïõ áðï-
ôåëåß óçìáíôéêü óôÜäéï ãéá ôçí êáôáóêåõÞ ìßáò ÂÜóçò ÄåäïìÝíùí. Äéáêñßíïíôáé
äýï âáóéêÝò êáôçãïñßåò ìïíôÝëùí: á) ìïíôÝëá âáóéóìÝíá óå åããñáöÝò êáé â)
ìïíôÝëá âáóéóìÝíá óå áíôéêåßìåíá. Áðü ôçí ðñþôç êáôçãïñßá îå÷ùñßæïõìå ôï
ó÷åóéáêü ìïíôÝëï ðïõ Ý÷åé ãíùñßóåé åõñåßá áðïäï÷Þ ëüãù ôçò áðëüôçôáò êáé
ôçò ìáèçìáôéêÞò ðåñéãñáöÞò ôïõ, åíþ áðü ôç äåýôåñç êáôçãïñßá ôá ðëÝïí äéá-
äåäïìÝíá åßíáé ôï ìïíôÝëï ïíôïôÞôùí-óõó÷åôßóåùí êáé ôï áíôéêåéìåíïóôñåöÝò
ìïíôÝëï äåäïìÝíùí.
¸íá ÓÄÂÄ áðïôåëåßôáé áðü ðïëëÜ õðïóõóôÞìáôá êÜèå Ýíá áðü ôá ïðïßá
åßíáé õðåýèõíï ãéá ìßá îå÷ùñéóôÞ ëåéôïõñãßá. Óôá åðüìåíá êåöÜëáéá èá åîåôÜ-
óïõìå ëåðôïìåñþò ôá ðåñéóóüôåñá áðü ôá õðïóõóôÞìáôá áõôÜ.
3.5. Áíáëýóôå ôïõò üñïõò ëïãéêÞ êáé öõóéêÞ áíåîáñôçóßá äåäïìÝíùí. Ãéá ðïéïýò
ëüãïõò êáôÜ ôç ãíþìç óáò ïé äýï áõôÝò ìïñöÝò áíåîáñôçóßáò åßíáé óçìáíôéêÝò;
3.7. ÐåñéãñÜøôå ôéò Ýííïéåò ó÷Þìá ÂÜóçò ÄåäïìÝíùí êáé óôéãìéüôõðï ÂÜóçò Äå-
äïìÝíùí. Íá äþóåôå Ýíá ðáñÜäåéãìá.
98 ÊåöÜëáéï 3. Áñ÷éôåêôïíéêÞ ÓõóôçìÜôùí
3.13. ÈåùñÞóôå ìßá áåñïðïñéêÞ åôáéñåßá ðïõ äéáôçñåß ìßá ÂÜóç ÄåäïìÝíùí ìå
üëá ôá óôïé÷åßá ôùí êñáôÞóåùí ãéá ôéò ðôÞóåéò. ÐñïóðáèÞóôå íá äéáêñßíåôå ôïõò
äéáöïñåôéêïýò ÷ñÞóôåò ôçò âÜóçò êáé íá ðñïóäéïñßóåôå ôá äåäïìÝíá ôçò âÜóçò
ðïõ ðéèáíþò íá ÷ñåéáóèåß ï êáèÝíáò áíáëüãùò ìå ôéò áíÜãêåò ôïõ. Ãéá ðáñÜ-
äåéãìá, Ýíáò ðïëßôçò åðéèõìåß íá ãíùñßæåé ôéò áêñéâåßò þñåò ôùí ðôÞóåùí áðü
ôçí áöåôçñßá óôïí ðñïïñéóìü.
99
100 ÊåöÜëáéï 4. ÌïíôÝëï ÏíôïôÞôùí-Óõó÷åôßóåùí
Ýíáí áðëü êáé êáôáíïçôü ôñüðï ðåñéãñáöÞò ôçò äïìÞò ôùí äåäïìÝíùí ôçò ÂÄ,
ôùí ïíôïôÞôùí, ôùí óõó÷åôßóåùí êáé ôùí ÷áñáêôçñéóôéêþí. Óôï Ó÷Þìá 4.1 ðá-
ñïõóéÜæåôáé ôï äéÜãñáììá ÏÓ ãéá ìßá ÂÄ ðïõ õðïóôçñßæåé ìßá óõíäñïìçôéêÞ
çëåêôñïíéêÞ âéâëéïèÞêç.
ό ν ο α
τ η λ έ φ ω ν ο
τ ί τ λ ο ς
τ ί τ λ ο ς
α ρ ι θ ό ς _
κ ω δ ι κ ό ς
κ ω δ ι κ ό ς P D F
σ υ ν δ ρ ο η τ ώ ν
κ ω δ ι κ ό ς
Μ N N 1
Σ υ γ γ ρ α φ ή
ρ θ ρ ο ν ή κ ε ι Γ ν ω σ τ ι κ ή Π ε ρ ι ο χ ή
Σ υ γ γ ρ α φ έ α ς Ά
ρ θ ρ ο υ Α
Ά
χ ώ ρ α
δ ι ε ύ θ υ ν σ η
σ ύ ν ο λ ο _ ά ρ θ ρ ω ν
ό λ η
Τ Κ
ο δ ό ς
α ρ ι θ ό ς Μ
α ό
Σ υ ν δ ρ ο ή
α ρ χ ι κ ή _ σ ε λ ί δ α
N N
τ ε ύ χ ο ς
έ ω ς
τ ό ο ς
τ ε λ ι κ ή _ σ ε λ ί δ α
η ο σ ί ε υ σ η
η ο σ ί ε υ σ η
Π ρ α κ τ ι κ ώ ν
Π ε ρ ι ο δ ι κ ο ύ
α ρ χ ι κ ή _ σ ε λ ί δ α
Π Κ
1
τ ε λ ι κ ή _ σ ε λ ί δ α Α
1 κ ω δ ι κ ό ς
η ε ρ ο η ν ί α
Σ υ ν δ ρ ο η τ ή ς
κ ω δ ι κ ό ς
Π ρ α κ τ ι κ ά
σ υ ν έ δ ρ ι ο
Π ε ρ ι ο δ ι κ ό
Σ υ ν ε δ ρ ί ο υ
τ ό ο ς
π κ ω δ ι κ ό ς
τ ί τ λ ο ς
N N δ ι ε ύ θ υ ν σ η
ό ν ο α
τ η λ έ φ ω ν ο
Έ κ δ ο σ η
Έ κ δ ο σ η
Π ρ α κ τ ι κ ώ ν
Π ε ρ ι ο δ ι κ ο ύ
1 1
Ε κ δ ο τ ι κ ό ς Ο ί κ ο ς
κ ω δ ι κ ό ς
τ η λ έ φ ω ν ο
ό ν ο α δ ι ε ύ θ υ ν σ η
• Êåíü. Ôï êåíü (null) ÷ñçóéìïðïéåßôáé üôáí êÜðïéá ïíôüôçôá äåí Ý÷åé ôéìÞ óå
êÜðïéï óõãêåêñéìÝíï ÷áñáêôçñéóôéêü. Ãéá ðáñÜäåéãìá, áí êÜðïéïò ðåëÜ-
ôçò äçëþóåé üôé äåí Ý÷åé ôçëÝöùíï, ôüôå ç ôéìÞ ôïõ ÷áñáêôçñéóôéêïý ôçëÝ-
öùíï ãéá ôï óõãêåêñéìÝíï ðåëÜôç èá åßíáé êåíÞ. Ç êåíÞ ôéìÞ ìðïñåß åðßóçò
íá ðñïóäéïñßæåé üôé ç ôéìÞ åíüò ÷áñáêôçñéóôéêïý åßíáé Üãíùóôç. Ìßá Üãíù-
óôç ôéìÞ ìðïñåß åßôå íá ëåßðåé (äçëáäÞ, ãíùñßæïõìå üôé ç ôéìÞ õðÜñ÷åé áëëÜ
äåí îÝñïõìå ðïéÜ åßíáé áêñéâþò) åßôå íá ìçí åßíáé ãíùóôÞ (äçëáäÞ äåí
ãíùñßæïõìå áí õðÜñ÷åé Þ ü÷é). Ãéá ðáñÜäåéãìá, áí êÜðïéïò ðåëÜôçò äåí
äþóåé ôïí áñéèìü ôçëåöþíïõ ôïõ, ôüôå ç ôéìÞ ôïõ ÷áñáêôçñéóôéêïý ôçëÝ-
öùíï ãéá ôï óõãêåêñéìÝíï ðåëÜôç èá åßíáé êåíÞ, ãéáôß äåí ãíùñßóïõìå áí
Ý÷åé Þ ü÷é êÜðïéá ôçëåöùíéêÞ óýíäåóç.
ό ν ο
έ φ
τ η λ ω ν ο
κ ω δ ι κ ό
Σ υ γ γ ρ α φ έ α ς
ρ α
χ ώ
δ ι ε ύ θ ν σ η
ρ ρ
σ ύ ν ο λ ο _ ά θ ω ν
π ό λ η
Τ Κ
ο δ ό
α ρ ς
ι θ ό
4.2.2 ÊëåéäéÜ
Ôï ÷áñáêôçñéóôéêü ðïõ ðñïóäéïñßæåé ìïíáäéêÜ ìßá ïíôüôçôá êáëåßôáé êëåéäß (key)
êáé äéáêñßíåôáé áðü Ýíá ðåäßï ïñéóìïý (domain). Åßíáé äõíáôüí ðåñéóóüôåñá
ôïõ åíüò ÷áñáêôçñéóôéêÜ íá Ý÷ïõí ôçí éäéüôçôá ôïõ êëåéäéïý. Ãéá ðáñÜäåéãìá, ï
áñéèìüò áóôõíïìéêÞò ôáõôüôçôáò Þ ï áñéèìüò öïñïëïãéêïý ìçôñþïõ ðñïóäéïñßæåé
ìïíáäéêÜ ôïí êÜèå ðïëßôç. Ôá êëåéäéÜ áõôÜ ïíïìÜæïíôáé õðïøÞöéá (candidate).
¸íá áðü áõôÜ ôá êëåéäéÜ ÷áñáêôçñßæåôáé ùò ðñùôåýïí (primary) êëåéäß, åíþ ôá
õðüëïéðá ùò åíáëëáêôéêÜ (alternative) êëåéäéÜ. Ôï ðñùôåýïí êëåéäß êÜèå óõíüëïõ
ïíôïôÞôùí åìöáíßæåôáé õðïãñáììéóìÝíï óå Ýíá äéÜãñáììá ÏÓ.
Óõ÷íÜ äåí õðÜñ÷åé êÜðïéï ÷áñáêôçñéóôéêü ðïõ áðü ìüíï ôïõ íá áðïôåëåß
êëåéäß, Þ áí õðÜñ÷åé ôÝôïéï ÷áñáêôçñéóôéêü äåí áðïôõðþíåôáé óôï ó÷Þìá ôçò
ÂÄ, äéüôé äåí åßíáé áðáñáßôçôï. Óå ìßá ôÝôïéá ðåñßðôùóç, ëïéðüí, ìðïñïýìå íá
÷ñçóéìïðïéÞóïõìå äýï Þ ðåñéóóüôåñá ÷áñáêôçñéóôéêÜ (áí õðÜñ÷ïõí) Ýôóé þóôå
óôï óýíïëü ôïõò íá ðñïóäéïñßæïõí ìïíáäéêÜ ìßá ïíôüôçôá. ¸íá ôÝôïéï êëåéäß
êáëåßôáé óýíèåôï (composite) êëåéäß. ÂÝâáéá, ÷ñçóéìüôçôá Ý÷åé ôï óýíèåôï êëåéäß
áðü ôï ïðïßï äåí åßíáé äõíáôüí íá åîáéñåèåß êÜðïéï ÷áñáêôçñéóôéêü ôïõ ÷ùñßò
íá ÷áèåß ç âáóéêÞ éäéüôçôÜ ôïõ íá ðñïóäéïñßæåé ìïíáäéêÜ êÜèå ïíôüôçôá. ¼ôáí
äåí õðÜñ÷åé êÜðïéï ÷áñáêôçñéóôéêü ðïõ íá ìðïñåß íá ÷ñçóéìïðïéçèåß ùò êëåéäß,
ôüôå ìðïñïýìå íá ïñßóïõìå êÜðïéï ôå÷íçôü ÷áñáêôçñéóôéêü ðïõ íá ðñïóäéïñßæåé
ìïíáäéêÜ êÜèå ïíôüôçôá. Ôï ÷áñáêôçñéóôéêü áõôü óõíÞèùò ïíïìÜæåôáé êùäéêüò Þ
104 ÊåöÜëáéï 4. ÌïíôÝëï ÏíôïôÞôùí-Óõó÷åôßóåùí
ID Þ Ý÷åé êÜðïéï Üëëï ðñïóäéïñéóôéêü. Óôï ðáñÜäåéãìá ôïõ Ó÷Þìáôïò 4.1 Ý÷ïõìå
÷ñçóéìïðïéÞóåé ôçí ïíïìáóßá êùäéêüò ãéá ôï êëåéäß åíüò óõíüëïõ ïíôïôÞôùí.
Μ Ν
Φ ο ι τ η τ ή ς α ρ α κ ο λ ο υ θ ε ί Μ ά θ η
α
Π
α θ η γ η τ ή ς
Κ
ι ο α θ έ σ η
κ ω δ κ ό ς ό ν
Ε ρ γ α ζ ε ο
ό ν ς
ι ε υ θ υ τ ή υ π ά λ λ η λ ο
δ ν ς ς
1 Ν
Ε π ο π τ ε ύ ε ι
A B A B
Ένα-προς-ένα Ένα-προς-πολλά
A B A B
Πολλά-προς-ένα Πολλά-προς-πολλά
Ï ôýðïò ôçò óõó÷Ýôéóçò ðïõ ÷ñçóéìïðïéåßôáé êÜèå öïñÜ åîáñôÜôáé ôüóï áðü
ôéò éäéüôçôåò ôùí ïíôïôÞôùí ôïõ ðñáãìáôéêïý êüóìïõ, üóï êáé áðü ôéò ðáñáäï÷Ýò
êáé ôéò áðëïðïéÞóåéò ðïõ ãßíïíôáé óôç öÜóç ôçò ìïíôåëïðïßçóçò. Óôï ðáñÜäåéãìá
ôïõ Ó÷Þìáôïò 4.5, ôá óýíïëá óõó÷åôßóåùí ÓõããñáöÞ ¢ñèñïõ êáé ÓõíäñïìÞ åßíáé
Í:Ì, åíþ ôï óýíïëï óõó÷åôßóåùí Äçìïóßåõóç óå Ðåñéïäéêü åßíáé 1:Í Þ Í:1 áíá-
ëüãùò ìå ôç öïñÜ ðïõ åîåôÜæïõìå ôï óýíïëï óõó÷Ýôéóçò (áðü ôï ¢ñèñï ðñïò
ôï Ðåñéïäéêü Þ áíôéóôñüöùò). Åðßóçò, ôï óýíïëï óõó÷åôßóåùí ÁíÞêåé, ôï ïðïßï
óõó÷åôßæåé ôá óýíïëá ïíôïôÞôùí ¢ñèñï êáé ÃíùóôéêÞ Ðåñéï÷Þ åßíáé Í:1, äéüôé èå-
ùñïýìå üôé Ýíá Üñèñï áíÞêåé ìüíï óå ìßá ãíùóôéêÞ ðåñéï÷Þ 2 , åíþ ìßá ãíùóôéêÞ
ðåñéï÷Þ ìðïñåß íá Ý÷åé Ýíá Þ ðåñéóóüôåñá êáôá÷ùñéóìÝíá Üñèñá.
τ η λ έ φ ω ν ο
δ ι ε ύ θ υ ν σ η
τ ί τ λ ο ς
ό ν ο α
α ρ ι θ ό ς _
α π ό έ ω ς
κ ω δ ι κ ό ς
σ υ ν δ ρ ο η τ ώ ν
κ ω δ ι κ ό ς
M N
Σ υ ν δ ρ ο η τ ή ς Σ υ ν δ ρ ο ή Γ ν ω σ τ ι κ ή Π ε ρ ι ο χ ή
Α Π Κ
Áðáéôåßôáé éäéáßôåñç ðñïóï÷Þ êáôÜ ôçí êáôáóêåõÞ ôïõ ìïíôÝëïõ þóôå íá áðï-
öåýãïíôáé ôÝôïéïõ åßäïõò ó÷åäéáóôéêÜ ëÜèç ðïõ ìåôáâÜëëïõí êáé ðåñéïñßæïõí ôéò
2
Èá ìðïñïýóå ï ôýðïò ôçò áðåéêüíéóçò íá åßíáé Í:Ì, üìùò ãéá ëüãïõò áðëüôçôáò ïñßæåôáé óáí
Í:1.
108 ÊåöÜëáéï 4. ÌïíôÝëï ÏíôïôÞôùí-Óõó÷åôßóåùí
äõíáôüôçôåò ôçò ÂÄ. Óôïõò ôýðïõò óõó÷åôßóåùí Í:1 êáé 1:Í ôá ÷áñáêôçñéóôéêÜ
ðïõ õðÜñ÷ïõí óôï óýíïëï óõó÷Ýôéóçò ìðïñïýí íá èåùñçèïýí ÷áñáêôçñéóôéêÜ
ôïõ óõíüëïõ ïíôïôÞôùí, ôï ïðïßï óõììåôÝ÷åé ìå ðëçèéêü áñéèìü Ýíá. Ãéá ôïí
ôýðï 1:1 ôá ÷áñáêôçñéóôéêÜ ôïõ óõíüëïõ óõó÷åôßóåùí ìðïñïýí íá áíáôåèïýí óå
ïðïéáäÞðïôå áðü ôá äýï óõììåôÝ÷ïíôá óýíïëá ïíôïôÞôùí. Ùóôüóï, áõôü ðñáã-
ìáôïðïéåßôáé óå åðüìåíá óôÜäéá ôçò ó÷åäßáóçò ôçò ÂÄ þóôå ôï äéÜãñáììá ÏÓ íá
åßíáé óáöÝóôåñï.
κ ω δ ι κ ό ς
P D F
κ ω δ ι κ ό ς
ρ ο η
σ υ ν δ τ ώ ν
N 1
Α ρ ο χ
Ά ρ θ ρ ο ν ή κ ε ι Γ ν ω σ τ ι κ ή Π ε ι ή
ο α έ φ ο
ο ο _ ά ρ θ ρ
ό ν ω ν
ο ς
σ ύ ν ω ν
τ η λ
ς τ ί τ λ P D F
κ ω δ ι κ ό
κ ω δ ι κ ό
Μ N
Σ υ γ γ ρ α φ ή
ρ θ ρ ο
Σ υ γ γ ρ α φ έ α ς Ά
ρ θ ρ ο υ
Ά
θ υ
δ ι ε ύ ν σ
áðü ôéò äýï ðëåõñÝò ôïõ óõíüëïõ óõó÷åôßóåùí. Áõôü óçìáßíåé üôé êÜèå óõã-
ãñáöÝáò ðïõ åßíáé êáôá÷ùñéóìÝíïò óôç ÂÄ ðñÝðåé íá Ý÷åé óõããñÜøåé Ýíá ôïõëÜ-
÷éóôïí Üñèñï. Åðßóçò, êÜèå êáôá÷ùñéóìÝíï Üñèñï ðñÝðåé íá óõó÷åôßæåôáé ìå
ôïõëÜ÷éóôïí Ýíá óõããñáöÝá.
σ υ ν έ δ ρ ι ο
τ ί τ λ ο ς
α ρ χ ι κ ή _
τ ε λ ι κ ή _
κ ω δ ι κ ό ς
P D F
σ ε λ ί δ α
σ ε λ ί δ α
κ ω δ ι κ ό ς
η ε ρ ο η ν ί α
η ο σ ί ε υ σ η Π ρ α κ τ ι κ ά
Ά ρ θ ρ ο Ν 1
Π ρ α κ τ ι κ ώ ν Σ υ ν ε δ ρ ί ο υ
τ ό π ο ς
π ο σ _ π λ η ρ ω ή ς
ρ ι θ ς _ π λ η ρ ω ή ς
ω δ ι ς _ σ υ ν δ ρ ο ή ς α
κ κ ό
. . .
1 Ν
Σ υ ν δ ρ ο ή Π λ η ρ ω ή _ Σ υ ν δ ρ ο ή ς Π λ η ρ ω ή
η ε ρ ο η ν ί _ π λ η ρ ω ή ς
óôñïöï. ÄçëáäÞ, äåí åßíáé áðáñáßôçôá áäýíáìç ïíôüôçôá êÜèå õðáñîéáêÜ åîáñ-
ôþìåíç ïíôüôçôá.
α τ α ν ά λ η
κ ω σ
α τ α α τ ή
κ ω δ ι κ ό ς κ σ κ ε υ σ ς
Ό χ η α
α ν
ISA
ρ . θ υ ρ ώ
έ γ τ
ι σ ο ύ ψ ο ς
ρ .
α α ξ ν ν
ρ . ό ω
α α ν
ε ρ ό σ κ ω
Ε π α τ τ η γ
ι β ι κ ό Φ ο ρ ό
4.4.3 ÓõóóùìÜôùóç
¼ðùò öÜíçêå áðü ðëÞèïò ðáñáäåéãìÜôùí, ìßá óõó÷Ýôéóç áíáöÝñåôáé óå äýï Þ
ðåñéóóüôåñåò ïíôüôçôåò. ¼ìùò, óôçí ðñÜîç óõìâáßíåé ìßá óõó÷Ýôéóç íá óõììåôÝ-
÷åé óå ìßá Üëëç óõó÷Ýôéóç. Óå ìßá ôÝôïéá ðåñßðôùóç ÷ñåéÜæåôáé Ýíá íÝï åñãá-
ëåßï ìïíôåëïðïßçóçò ôïõ ðñáãìáôéêïý êüóìïõ, ôï ïðïßï êáëåßôáé óõóóùìÜôùóç
Þ óõíÜèñïéóç (aggregation).
τ ί τ λ ο ς α
ρ ι θ ό ς _ α
ό ν ο Α Π Κ
κ ω δ ι κ ό ς
α π
ό έ ω ς κ ω δ ι κ ό ς
σ υ ν δ ρ ο η τ ώ ν
δ ι ε ύ θ υ ν σ η
Μ Ν
τ η λ έ φ ω ν ο
Γ ν ω σ τ ι κ ή Π ε ρ ι ο χ ή Σ υ ν δ ρ ο ή Σ υ ν δ ρ ο η τ ή ς
Μ Ν
α α α γ
η ε ρ ο η ν ί _ σ υ ν λ λ ή ς
α α γ α
Κ τ ρ φ ή
κ ω δ ι κ ό ς
ό ν ο
π ά
Υ λ λ η λ ο ς
Ó÷Þìá 4.12: ÍÝá ôñéáäéêÞ óõó÷Ýôéóç ÊáôáãñáöÞ êáé óýíïëï ïíôïôÞôùí ÕðÜëëç-
ëïò.
114 ÊåöÜëáéï 4. ÌïíôÝëï ÏíôïôÞôùí-Óõó÷åôßóåùí
τ ί τ λ ο ς α
ρ ι θ ό ς _ α
ό ν ο Α Π Κ
κ ω δ ι κ ό ς
α π
ό έ ω ς κ ω δ ι κ ό ς
σ υ ν δ ρ ο η τ ώ ν
δ ι ε ύ θ υ ν σ η
Μ Ν
τ η λ έ φ ω ν ο
Γ ν ω σ τ ι κ ή Π ε ρ ι ο χ ή Σ υ ν δ ρ ο ή Σ υ ν δ ρ ο η τ ή ς
α α α γ
η ε ρ ο η ν ί _ σ υ ν λ λ ή ς
α α γ α
Κ τ ρ φ ή
κ ω δ ι κ ό ς
ό ν ο
π ά
Υ λ λ η λ ο ς
4.5 Óýíïøç
Ôï ìïíôÝëï ïíôïôÞôùí-óõó÷åôßóåùí (ÏÓ) áðïôåëåß Ýíáí áðëü ôñüðï áíáðáñÜóôá-
óçò ôïõ ðñáãìáôéêïý êüóìïõ. Ôá âáóéêÜ óôïé÷åßá ðïõ ÷áñáêôçñßæïõí ôï ìïíôÝëï
åßíáé ïé ïíôüôçôåò êáé ïé óõó÷åôßóåéò. Ïíôüôçôåò ìå ßäéá ÷áñáêôçñéóôéêÜ óõíèÝ-
ôïõí Ýíá óýíïëï ïíôïôÞôùí êáé óõó÷åôßóåéò ìå ßäéá ÷áñáêôçñéóôéêÜ äçìéïõñãïýí
Ýíá óýíïëï óõó÷åôßóåùí.
Ïé ïíôüôçôåò åíüò óõíüëïõ ïíôïôÞôùí äéáêñßíïíôáé ìåôáîý ôïõò ÷ñçóéìïðïéþ-
íôáò Ýíá êëåéäß, ðïõ áðïôåëåßôáé áðü Ýíá Þ ðåñéóóüôåñá ÷áñáêôçñéóôéêÜ (Þ éäéü-
ôçôåò). Äýï ïíôüôçôåò ìðïñïýí íá óõìöùíïýí óå üëá ôá ÷áñáêôçñéóôéêÜ åêôüò
áðü ôï êëåéäß. ¸íá óýíïëï ïíôïôÞôùí ìðïñåß íá Ý÷åé ðïëëÜ êëåéäéÜ, Ýíá üìùò
èåùñåßôáé ôï ðñùôåýïí êëåéäß. Ôá õðüëïéðá êáëïýíôáé åíáëëáêôéêÜ (Þ äåõôåñåýï-
íôá) êëåéäéÜ.
Ìßá óõó÷Ýôéóç ÷áñáêôçñßæåôáé áðü ôïí ôýðï ôçò áðåéêüíéóçò ðïõ ïñßæåé.
¸ôóé, äéáêñßíïõìå ôéò ðåñéðôþóåéò: 1:1, 1:Í, Í:1 êáé Í:Ì. Ïé áðåéêïíßóåéò áõôÝò
äçëþíïõí ôï ðëÞèïò ôùí ïíôïôÞôùí åíüò óõíüëïõ ðïõ ìðïñïýí íá óõó÷åôéóèïýí
ìå ïíôüôçôåò ôïõ Üëëïõ óõíüëïõ. Óýíïëá óõó÷åôßóåùí ìðïñïýí íá ïñéóèïýí êáé
ãéá ðåñéóóüôåñá ôùí äýï óõíüëùí ïíôïôÞôùí. Ç óõììåôï÷Þ ìßáò ïíôüôçôáò óå Ýíá
óýíïëï óõó÷åôßóåùí ìðïñåß íá åßíáé åßôå êáèïëéêÞ åßôå ìåñéêÞ. Áõôü åîáñôÜôáé
áðïêëåéóôéêÜ áðü ôïõò ðåñéïñéóìïýò ôïõ ðñïâëÞìáôïò êáé áðü ôïí ôñüðï ìï-
íôåëïðïßçóçò ôïõ ðñáãìáôéêïý êüóìïõ. ×ñÞóéìç åßíáé ç Ýííïéá ôçò áäýíáìçò
ïíôüôçôáò ðïõ õðáñîéáêÜ åîáñôÜôáé ðÜíôïôå áðü ìßá éó÷õñÞ ïíôüôçôá.
Ãéá ôç ãñáöéêÞ áíáðáñÜóôáóç åíüò ìïíôÝëïõ ÏÓ ÷ñçóéìïðïéïýíôáé ôá áíôß-
óôïé÷á äéáãñÜììáôá ÏÓ. Ôá äéáãñÜììáôá áõôÜ åßíáé ðïëý ÷ñÞóéìá ãéá ôçí ðå-
ñéãñáöÞ ôùí äåäïìÝíùí êáé ôùí ìåôáîý ôïõò óõó÷åôßóåùí êáé ÷ñçóéìïðïéïýíôáé
ùò ìÝóï åðéêïéíùíßáò ìåôáîý ôïõ ó÷åäéáóôÞ ôçò âÜóçò êáé ôïõ ðåëÜôç/÷ñÞóôç.
Ôï âáóéêü ìïíôÝëï ÏÓ Ý÷åé õðïóôåß åðåêôÜóåéò Ýôóé þóôå íá åìðëïõôéóèåß ìå
íÝá óôïé÷åßá ìå óôü÷ï ôçí êáëýôåñç ìïíôåëïðïßçóç ðïëýðëïêùí ïíôïôÞôùí êáé
óõó÷åôßóåùí. Ïé êõñéüôåñåò åðåêôÜóåéò ôïõ ìïíôÝëïõ ÏÓ åßíáé ç åîåéäßêåõóç, ç
ãåíßêåõóç, ç êëçñïíïìéêüôçôá êáé ç óõóóùìÜôùóç. Ï åíäéáöåñüìåíïò áíáãþ-
óôçò ðïõ åðéèõìåß ìßá åéò âÜèïò ìåëÝôç ôïõ ìïíôÝëïõ ÏÓ ìðïñåß íá ìåëåôÞóåé ôéò
áíáöïñÝò [Batini 1991] êáé [Thalheim 2000].
4.2. Ðüôå Ýíá ÷áñáêôçñéóôéêü êáëåßôáé óýíèåôï êáé ðüôå ðïëëáðëÞò ôéìÞò; Äþóôå
116 ÊåöÜëáéï 4. ÌïíôÝëï ÏíôïôÞôùí-Óõó÷åôßóåùí
4.5. Íá äþóåôå ðáñáäåßãìáôá áðåéêïíßóåùí 1:1, 1:Í êáé Í:Ì. ÁíáöÝñáôå óõ-
ãêåêñéìÝíåò ðñïûðïèÝóåéò õðü ôéò ïðïßåò ìßá óõó÷Ýôéóç èá ìðïñïýóå íá áíÞêåé
óå äéáöïñåôéêÝò áðåéêïíßóåéò.
• Íá ðñïóäéïñéóèåß ðïéü áðü ôá óýíïëá óõó÷åôßóåùí (á), (â) êáé (ã) äåí
áíôéóôïé÷åß óôï äéÜãñáììá ÏÓ. Íá äéêáéïëïãÞóåôå ôçí áðÜíôçóÞ óáò.
• Áí ôá óýíïëá ïíôïôÞôùí A, B êáé C ðåñéÝ÷ïõí áíôéóôïß÷ùò 100, 1000 êáé
10 óôïé÷åßá, ôüôå ðïéüò åßíáé ï ìÝãéóôïò áñéèìüò ôùí óôïé÷åßùí ôïõ óõíüëïõ
óõó÷åôßóåùí R;
M N
A R B
a1 b1 c1 a1 b1 c1 a1 b1 c1
a2 b1 c2 a2 b2 c1 a1 b1 c2
(á) (â) (ã)
• Ôï ÷ñïíéêü äéÜóôçìá åíïéêßáóçò ìßáò ôáéíßáò åßíáé ìßá çìÝñá, ôñåéò çìÝñåò
Þ ìßá åâäïìÜäá.
Óôï êåöÜëáéï áõôü ãßíåôáé ìßá óýíôïìç åéóáãùãÞ óôï ÓÄÂÄ ðïõ èá ÷ñçóéìïðïéÞ-
óïõìå óôç óõíÝ÷åéá ãéá ôçí ðñáêôéêÞ åöáñìïãÞ ôùí èåùñçôéêþí åííïéþí ðïõ èá
ìåëåôÞóïõìå. Ôï óýóôçìá Microsoft SQL Server 2000 (MSSQLS-2000)1 áðïôå-
ëåß Ýíá éó÷õñü ÓÄÂÄ ìå ðïëëÝò äõíáôüôçôåò, ôï ïðïßï ÷ñçóéìïðïéåßôáé åõñýôáôá
ãéá ôç äéá÷åßñéóç ìåãÜëùí ÂÜóåùí ÄåäïìÝíùí. Óçìåéþíåôáé üôé ç ôñÝ÷ïõóá Ýê-
äïóç ôïõ ðñïúüíôïò (SQL Server 2005) Ý÷åé áêüìç ðåñéóóüôåñåò äõíáôüôçôåò.
Ùóôüóï, ç Ýêäïóç SQL Server 2000 êáëýðôåé åðáñêþò ôá èÝìáôá ðïõ ìåëåôþ-
íôáé óôï ðáñüí âéâëßï. Ôïíßæåôáé, üôé äåí åßíáé äõíáôüí íá ðáñïõóéáóèïýí üëåò
ïé äõíáôüôçôåò êáé ëåéôïõñãßåò, äéüôé êÜôé ôÝôïéï åßíáé ðÝñá áðü ôïõò óêïðïýò
áõôïý ôïõ âéâëßïõ. Ùóôüóï, èá ìåëåôÞóïõìå ðïëëÝò áðü ôéò ëåéôïõñãßåò ôïõ óõ-
óôÞìáôïò óå âÜèïò, Ýôóé þóôå íá êáôáíïçèïýí áñêåôÝò ëåðôïìÝñåéåò õëïðïßçóçò
ìßáò ðñáãìáôéêÞò ÂÜóçò ÄåäïìÝíùí. Áõôü èá âïçèÞóåé ôïí áíáãíþóôç áö’ åíüò
íá áðïêôÞóåé ôçí áðáéôïýìåíç åìðåéñßá ÷ñÞóçò åíüò ÓÄÂÄ, êáé áö’ åôÝñïõ íá
ðåéñáìáôéóèåß óå ó÷Ýóç ìå üóá áíáöÝñåé ç áíôßóôïé÷ç èåùñßá, áðïêôþíôáò Ýôóé
1
Óôï åîÞò ÷ñçóéìïðïéïýìå ôç óõíïðôéêÞ ïíïìáóßá ãéá ëüãïõò åõêïëßáò.
119
120 ÊåöÜëáéï 5. ÅéóáãùãÞ óôï Óýóôçìá Microsoft SQL Server 2000
ìßá åéò âÜèïò ãíþóç ôïõ áíôéêåéìÝíïõ. Ãéá ðåñéóóüôåñç åìâÜèõíóç óôéò Ýííïéåò
ðïõ ðáñïõóéÜæïíôáé åäþ ðñïôåßíåôáé ç ìåëÝôç åîåéäéêåõìÝíùí âéâëßùí ãéá ôïí
SQL Server, üðùò ôá [Petkovic 2000, Riordan 2000, Sharma 2002, Rankins 2003,
Beauchemin 2004].
• SQL Server 2000 Enterprise Evaluation Edition. Ç Ýêäïóç áõôÞ Ý÷åé üëåò
ôéò äõíáôüôçôåò ìå ôç âáóéêÞ äéáöïñÜ üôé Ý÷åé ðåñéïñéóìü ÷ñÞóçò ãéá 120
çìÝñåò áðü ôçí çìåñïìçíßá åãêáôÜóôáóçò. ×ñçóéìïðïéåßôáé êõñßùò ãéá ôç
äïêéìáóôéêÞ ëåéôïõñãßá ôïõ MSSQLS-2000 êáé åßíáé äéáèÝóéìç óôï äéáäß-
êôõï.
• SQL Server 2000 Desktop Engine. Áðïôåëåß ìßá åöáñìïãÞ ìå ôçí ïðïßá ïé
ðñïãñáììáôéóôÝò åöáñìïãþí Ý÷ïõí ôç äõíáôüôçôá äéáíïìÞò åíüò áíôéãñÜ-
öïõ ôçò ìç÷áíÞò ÂÜóçò ÄåäïìÝíùí (database engine) ìáæß ìå ôéò åöáñìïãÝò
ôïõò.
• ÊáôáãñáöÞ ôùí åíôïëþí SQL ðïõ áðïóôÝëëïíôáé óôï óýóôçìá áðü Ýíá
ðñüãñáììá åöáñìïãÞò ãéá ôï ïðïßï ï ðçãáßïò êþäéêáò äåí åßíáé äéáèÝóé-
ìïò.
• ÊáôáãñáöÞ üëùí ôùí åñùôçìÜôùí ðïõ Ý÷ïõí áðïóôáëåß êáé äõíáôüôçôá
åðáíåêôÝëåóçò ôùí åñùôçìÜôùí ãéá ôç äéåíÝñãåéá åëÝã÷ùí.
• Óå ðåñéðôþóåéò ðïõ åìöáíßæïíôáé óöÜëìáôá ôýðïõ Access Violation, ìðï-
ñïýìå íá ÷ñçóéìïðïéÞóïõìå ôïí Profiler ãéá íá äéáðéóôþóïõìå ôï áßôéï ôïõ
ðñïâëÞìáôïò.
• Ï SQL Profiler Ý÷åé ôç äõíáôüôçôá íá êáôáãñÜøåé ðëçñïöïñßåò áðüäï-
óçò ó÷åôéêÜ ìå ôçí åêôÝëåóç ôùí åñùôçìÜôùí. Ìå ôïí ôñüðï áõôü ìðï-
ñïýìå åýêïëá íá áíáãíùñßóïõìå åñùôÞìáôá ðïõ åßíáé áñêåôÜ ðïëýðëïêá
êáé åðïìÝíùò åðéöÝñïõí êáèõóôÝñçóç óôç ëåéôïõñãßá ôïõ óõóôÞìáôïò. Ôï
ðñüâëçìá åßíáé åíôïíüôåñï áí õðÜñ÷ïõí ðïëëïß ÷ñÞóôåò ðïõ áðïóôÝëëïõí
åñùôÞìáôá ìå ìåãÜëåò áðáéôÞóåéò. Óå ìßá ôÝôïéá ðåñßðôùóç ìðïñïýìå åý-
êïëá íá äéáðéóôþóïõìå áí õðÜñ÷åé åóêåììÝíç ðñüèåóç ìåßùóçò ôçò áðü-
äïóçò ôïõ óõóôÞìáôïò.
5.2.6 Data Transformation Services (DTS)
Ôï åñãáëåßï DTS ÷ñçóéìïðïéåßôáé ãéá ôçí åéóáãùãÞ äåäïìÝíùí áðü áñ÷åßá êåéìÝ-
íïõ êáé ôç ìåôáêßíçóç äåäïìÝíùí áðü ìßá ðçãÞ óå Üëëç. ÌÝóù ôçò åöáñìïãÞò
DTS Designer, óôçí ïðïßá Ý÷ïõìå ðñüóâáóç áðü ôïí Enterprise Manager, üðùò
äåß÷íåé ôï Ó÷Þìá 5.2, ìðïñïýìå íá åêôåëÝóïõìå ôéò åîÞò ëåéôïõñãßåò:
• ÅéóáãùãÞ äåäïìÝíùí óôïí MSSQLS-2000 áðü áñ÷åßá êåéìÝíïõ,
• Äéáóýíäåóç ìå ÓÄÂÄ Üëëùí êáôáóêåõáóôþí (üðùò Oracle, DB2 ê.ë.ð.)
ìÝóù ôùí äéåðáöþí OLEDB êáé ODBC,
• ÓõããñáöÞ ìéêñþí ðñïãñáììÜôùí (scripts) ìåôáôñïðÞò äåäïìÝíùí áðü ìßá
ìïñöÞ óå Üëëç,
• Óýíäåóç ìå ftp servers êáé äõíáôüôçôá áíÜãíùóçò áñ÷åßùí êáé ìåôáöïñÜ
áõôþí (download) óôï ôïðéêü óýóôçìá,
• ÁðïóôïëÞ ìçíýìáôïò e-mail ìå ôçí ðåñéãñáöÞ åíüò óöÜëìáôïò Þ ôá áðï-
ôåëÝóìáôá åíüò åñùôÞìáôïò,
• Äéáóýíäåóç ìå ôçí ïõñÜ ìçíõìÜôùí MS Message Queue êáé äõíáôüôçôá
ëÞøçò, áðïóôïëÞò êáé åðåîåñãáóßáò ìçíõìÜôùí.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 125
Ó÷Þìá 5.2: Ðñüóâáóç óôï åñãáëåßï DTS áðü ôïí Enterprise Manager.
• Ôçí áíÜëõóç ôùí äåäïìÝíùí ìå óôü÷ï ôçí áíß÷íåõóç ôÜóåùí ðïõ åìöáíßæï-
íôáé, äéåõêïëýíïíôáò ôçí ðñüâëåøç (ð.÷., ðñüâëåøç åóüäùí áðü ðùëÞóåéò
ôçí åðüìåíç ÷ñïíéÜ),
• msdb: Ç âÜóç áõôÞ ÷ñçóéìïðïéåßôáé áðü ôïí SQL Server Agent ãéá ôçí
áðïèÞêåõóç ðëçñïöïñéþí ó÷åôéêÜ ìå ôï ÷ñïíïðñïãñáììáôéóìü ëåéôïõñ-
ãéþí êáé ôïí ðñïóäéïñéóìü óçìáíôéêþí ãåãïíüôùí ðïõ áí óõìâïýí, ôüôå
èá ðñÝðåé áõôüìáôá íá åêôåëåóèåß êÜðïéá åíÝñãåéá.
128 ÊåöÜëáéï 5. ÅéóáãùãÞ óôï Óýóôçìá Microsoft SQL Server 2000
Óôï Ó÷Þìá 5.4 äßíåôáé ìßá åéêüíá ôïõ Enterprise Manager üðïõ äåß÷íåôáé ç
åðéëïãÞ ãéá äçìéïõñãßá íÝáò âÜóçò. Óôç óõíÝ÷åéá åìöáíßæåôáé Ýíá íÝï ðáñÜèõñï
üðïõ ðñÝðåé íá óõìðëçñþóïõìå ôï üíïìá ôçò íÝáò âÜóçò, êáèþò êáé ìåñéêÝò
Üëëåò ðëçñïöïñßåò, üðùò ôï üíïìá ôïõ êáôáëüãïõ (directory) üðïõ èá áðïèç-
êåõèïýí ôá áñ÷åßá ðïõ áíôéóôïé÷ïýí óôç íÝá âÜóç (âë. Ó÷Þìá 5.5). ÌåôÜ ôçí
ïëïêëÞñùóç ôçò äéáäéêáóßáò, ç íÝá ÂÜóç ÄåäïìÝíùí åìöáíßæåôáé óôïí Enterprise
Manager, êÜôù áðü ôçí åðéëïãÞ Databases, üðùò äåß÷íåé ôï Ó÷Þìá 5.6.
Ç íÝá âÜóç ðïõ ìüëéò äçìéïõñãÞóáìå äåí ðåñéÝ÷åé äåäïìÝíá. Ãéá íá ìðïñÝ-
óïõìå íá áðïèçêåýóïõìå äåäïìÝíá óôç âÜóç ðñÝðåé ðñþôá íá êáôáóêåõÜóïõìå
êÜðïéïõò ðßíáêåò. ×ñçóéìïðïéþíôáò ôïõò ðßíáêåò óôç óõíÝ÷åéá Ý÷ïõìå ôç äõíá-
130 ÊåöÜëáéï 5. ÅéóáãùãÞ óôï Óýóôçìá Microsoft SQL Server 2000
5.5 Óýíïøç
¸íá áðïôåëåóìáôéêü ÓÄÂÄ äåí ÷áñáêôçñßæåôáé ìüíï áðü ôçí éêáíüôçôá äéá÷åß-
ñéóçò ôùí áðïèçêåõìÝíùí äåäïìÝíùí áëëÜ êáé áðü ôï óýíïëï ôùí åñãáëåßùí
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 131
Ν έ α β ά σ η δ ε δ ο
έ ν ω ν
ðïõ ðáñÝ÷åé ãéá ôç ãåíéêüôåñç åðïðôåßá ôïõ óõóôÞìáôïò. Óôï êåöÜëáéï áõôü
åíôïðßóáìå ôá óçìáíôéêüôåñá õðïóõóôÞìáôá ôïõ MSSQLS-2000, ôá ïðïßá êáëý-
ðôïõí Ýíá ìåãÜëï åýñïò áðáéôçôéêþí åöáñìïãþí, êáé óõíïðôéêÜ ðåñéãñÜøáìå ôéò
äõíáôüôçôÝò ôïõò. ÌåñéêÝò áðü ôéò óçìáíôéêüôåñåò åñãáóßåò ìðïñïýí íá åêôå-
ëåóèïýí ìå ôç âïÞèåéá ôçò êïíóüëáò ôïõ Enterprise Manager, üðùò äçìéïõñãßá
íÝáò ÂÜóçò ÄåäïìÝíùí, äçìéïõñãßá ëïãáñéáóìþí ÷ñçóôþí, êáôáóêåõÞ ðéíÜêùí,
ê.ë.ð. Óå åðüìåíá êåöÜëáéá èá åìâáèýíïõìå óå ðåñéóóüôåñá ÷áñáêôçñéóôéêÜ ôïõ
MSSQLS-2000 êáé èá åîåôÜóïõìå ôïí ôñüðï ÷ñÞóçò ôïõ ãéá ôçí áðïôåëåóìáôéêÞ
êáé áðïäïôéêÞ äéá÷åßñéóç ÂÜóåùí ÄåäïìÝíùí.
5.3. Ìå ôç âïÞèåéá ôïõ Enterprise Manager íá êáôáóêåõÜóåôå ìßá íÝá ÂÜóç Äå-
132 ÊåöÜëáéï 5. ÅéóáãùãÞ óôï Óýóôçìá Microsoft SQL Server 2000
5.5. ÅðéëÝîôå ôç ÂÜóç ÄåäïìÝíùí northwind êáé ÷ñçóéìïðïéþíôáò ôïí Query An-
alyzer ðëçêôñïëïãÞóôå ôçí åíôïëÞ SELECT * FROM orders. ÐáñáôçñÞóôå ôá
áðïôåëÝóìáôá.
5.8. Ãéáôß êáôÜ ôç ãíþìç óáò åßíáé áðáñáßôçôç ç äéá÷åßñéóç ðïëëþí ÂÜóåùí
ÄåäïìÝíùí áðü Ýíá ÓÄÂÄ;
5.9. Ðïéü õðïóýóôçìá ôïõ MSSQLS-2000 åßíáé õðåýèõíï ãéá ôçí áðïóôïëÞ åñù-
ôçìÜôùí óå Üëëåò ÂÜóåéò ÄåäïìÝíùí; ÐåñéãñÜøôå ìßá ðåñßðôùóç üðïõ áðáéôåßôáé
ç äéá÷åßñéóç äåäïìÝíùí áðü ðïëëÜ ÓÄÂÄ ðïõ âñßóêïíôáé óå äéáöïñåôéêÝò ãåù-
ãñáöéêÝò ðåñéï÷Ýò.
Ó×ÅÓÉÁÊÅÓ ÂÁÓÅÉÓ
ÄÅÄÏÌÅÍÙÍ
135
136 ÊåöÜëáéï 6. Ó÷åóéáêü ÌïíôÝëï ÄåäïìÝíùí
• Ôçí ðáñáãùãÞ óôç äåêáåôßá ôïõ 1970 êáé 1980 äéáöüñùí åìðïñéêÜ äéáèÝóé-
ìùí ÓÄÂÄ, ôá ïðïßá óôçñß÷èçêáí óôï ó÷åóéáêü ìïíôÝëï äåäïìÝíùí, üðùò
ôá óõóôÞìáôá DB2 êáé SQL/DS ôçò åôáéñåßáò IBM êáé ôï óýóôçìá Oracle
ôçò åôáéñåßáò Oracle.
íéêÞ óôéãìÞ, êáé ðåñéãñÜöåôáé ùò Ýíá óýíïëï ðëåéÜäùí. Ôï óýíïëï ôùí ó÷çìÜôùí
üëùí ôùí ó÷Ýóåùí áðáñôßæåé ôï ó÷Þìá ôçò ÂÄ, åíþ ôï óýíïëï ôùí óôéãìéüôõðùí
ôùí ó÷Ýóåùí óõíèÝôåé ôï óôéãìéüôõðï ôçò ÂÄ. Ôïíßæåôáé üôé óå êÜèå ó÷Þìá ôçò
ÂÄ ìðïñåß íá áíôéóôïé÷ïýí ðïëëÜ óôéãìéüôõðá.
Óôç óõíÝ÷åéá óõíïøßæïíôáé ïé âáóéêüôåñåò éäéüôçôåò ôùí ó÷Ýóåùí:
• Ç êÜèå ó÷Ýóç Ý÷åé Ýíá ìïíáäéêü üíïìá ìåôáîý ôùí õðïëïßðùí ó÷Ýóåùí
ôçò ÂÄ.
• Ôï êÜèå ÷áñáêôçñéóôéêü Ý÷åé ìïíáäéêü üíïìá ìÝóá óôç ó÷Ýóç. Äýï ÷áñá-
êôçñéóôéêÜ ðïõ áíÞêïõí óå äéáöïñåôéêÝò ó÷Ýóåéò åðéôñÝðåôáé íá Ý÷ïõí ßäéï
üíïìá.
• Ç óåéñÜ äÞëùóçò ôùí ÷áñáêôçñéóôéêþí ìßáò ó÷Ýóçò äåí ðáßæåé êÜðïéï ñüëï.
• Óôï ó÷åóéáêü ìïíôÝëï äåí ìáò åíäéáöÝñåé ç óåéñÜ ôùí ðëåéÜäùí óôç ó÷Ýóç.
Ùóôüóï, ç óåéñÜ áðïèÞêåõóçò ôùí äåäïìÝíùí óõíÞèùò åðçñåÜæåé ôï ÷ñüíï
åðåîåñãáóßáò êáé åðïìÝíùò ëáìâÜíåôáé õð’ üøç.
Ó÷Þìá 6.3: Ðßíáêáò Åêäïôéêüò Ïßêïò êáé NULL ôéìÝò ãéá ìåñéêÜ ÷áñáêôçñéóôéêÜ.
Ìßá êåíÞ ôéìÞ óõíÞèùò äåí äçìéïõñãåß ðñüâëçìá. Ùóôüóï êáëü åßíáé êáôÜ
ôï äõíáôüí ïé ôéìÝò NULL íá áðïöåýãïíôáé, äéüôé äçìéïõñãïýíôáé äõóêïëßåò óôç
142 ÊåöÜëáéï 6. Ó÷åóéáêü ÌïíôÝëï ÄåäïìÝíùí
äéáôýðùóç åñùôçìÜôùí. Ôïíßæåôáé üôé äåí åðéôñÝðïíôáé êåíÝò ôéìÝò ãéá ôá êëåéäéÜ
åíüò ðßíáêá.
• Óõó÷åôßóåéò ôýðïõ 1:1. Áí ç óõó÷Ýôéóç åßíáé ôýðïõ 1:1, áëëÜ Ýíá áðü ôá
äýï óýíïëá ïíôïôÞôùí äåí óõììåôÝ÷åé õðï÷ñåùôéêÜ óôç óõó÷Ýôéóç, ôüôå åß-
íáé áðáñáßôçôïé äýï ðßíáêåò. Ïé äýï ðßíáêåò áõôïß áíôéóôïé÷ïýí óôéò äýï
144 ÊåöÜëáéï 6. Ó÷åóéáêü ÌïíôÝëï ÄåäïìÝíùí
• Óõó÷åôßóåéò ôýðïõ 1:Í. Áí ç óõó÷Ýôéóç åßíáé ôýðïõ 1:Í Þ Í:1, åíþ óõììåôÝ-
÷åé õðï÷ñåùôéêÜ ôï óýíïëï ïíôïôÞôùí áðü ôçí ðëåõñÜ Í ôçò óõó÷Ýôéóçò,
ôüôå åßíáé áðáñáßôçôïé äýï ðßíáêåò. ÊáôÜ ôá ðñïçãïýìåíá, ïé äýï ðßíáêåò
áõôïß áíôéóôïé÷ïýí óôéò äýï ïíôüôçôåò, êáé ðåñéÝ÷ïõí ùò óôÞëåò ôá áíôß-
óôïé÷á ÷áñáêôçñéóôéêÜ. ÅðéðëÝïí, ôï êëåéäß ôçò ïíôüôçôáò áðü ôçí ðëåõñÜ
1 ôçò óõó÷Ýôéóçò, èá ôåèåß êáé óôïí ðßíáêá ôçò Üëëçò ïíôüôçôáò (áðü ôçí
ðëåõñÜ Í) ìáæß ìå ôá ÷áñáêôçñéóôéêÜ ôçò óõó÷Ýôéóçò (áí õðÜñ÷ïõí).
Áí ç óõó÷Ýôéóç åßíáé ôýðïõ 1:Í Þ Í:1, áëëÜ äåí óõììåôÝ÷åé õðï÷ñåùôéêÜ
ôï óýíïëá ïíôïôÞôùí áðü ôçí ðëåõñÜ Í ôçò óõó÷Ýôéóçò, ôüôå ãéá íá áðï-
öýãïõìå ôç ÷ñÞóç êåíþí ôéìþí åßíáé áðáñáßôçôïé ôñåéò ðßíáêåò. ÊáôÜ ôá
ðñïçãïýìåíá, ïé äýï ðßíáêåò áíôéóôïé÷ïýí óôéò äýï ïíôüôçôåò, êáé ðåñéÝ-
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 145
κ ω δ ι κ ό ς κ ω δ ι κ ό ς α ρ χ ι κ ή τ ε λ ι κ ή α ρ χ ι κ ή τ ε λ ι κ ή
κ ω δ ι κ ό ς τ ε ύ χ ο ς τ ό ο ς
κ ω δ ι κ ό ς τ ί τ λ ο ς P D F γ ν ω σ τ ι κ ή ς π ρ α κ τ ι κ ω ν σ ε λ ί δ α σ ε λ ί δ α σ ε λ ί δ α σ ε λ ί δ α
π ε ρ ι ο δ ι κ ο ύ π ε ρ ι ο δ ι κ ο ύ π ε ρ ι ο δ ι κ ο ύ
π ε ρ ι ο χ ή ς σ υ ν ε δ ρ ί ο υ π ρ α κ τ ι κ ώ ν π ρ α κ τ ι κ ώ ν π ε ρ ι ο δ ι κ ο ύ π ε ρ ι ο δ ι κ ο ύ
Ξ έ ν α κ λ ε ι δ ι ά α π ό τ α σ ύ ν ο λ α Χ α ρ α κ τ η ρ ι σ τ ι κ ά
Χ α ρ α κ τ η ρ ι σ τ ι κ ά
Χ α ρ α κ τ η ρ ι σ τ ι κ ά σ υ ν ό λ ο υ σ υ σ χ ε τ ι σ < ώ ν
ο ν τ ο τ ή τ ω ν Γ σ υ ν ό λ ο υ σ υ σ χ ε τ ι σ < ώ ν
σ υ ν ό λ ο υ ο ν τ ο τ ή τ ω ν
ν ω σ τ ι κ ή Π ε ρ ι ο χ ή ,
> η η
ο σ ί ε υ σ σ ε Π ε ρ ι ο δ ι κ ό
κ α ι > η η
Π ρ α κ τ ι κ ά Σ υ ν ε δ ρ ί ο υ ο σ ί ε υ σ σ ε
ρ θ ρ ο
Π ε ρ ι ο δ ι κ ό Π ρ α κ τ ι κ ά
• Óõó÷åôßóåéò ôýðïõ Ì:Í. Áí ç óõó÷Ýôéóç åßíáé ôýðïõ Ì:Í, ôüôå åßíáé áðá-
ñáßôçôïé ôñåéò ðßíáêåò. ÊáôÜ ôá ðñïçãïýìåíá, ïé äýï ðßíáêåò áíôéóôïé÷ïýí
146 ÊåöÜëáéï 6. Ó÷åóéáêü ÌïíôÝëï ÄåäïìÝíùí
óôéò ïíôüôçôåò êáé ðåñéÝ÷ïõí ôéò ó÷åôéêÝò óôÞëåò, åíþ ï ôñßôïò ðßíáêáò
áíôéóôïé÷åß óôç óõó÷Ýôéóç êáé ðåñéÝ÷åé ùò óôÞëåò ôá ðñùôåýïíôá êëåéäéÜ
ôùí äýï ïíôïôÞôùí êáé ôá ÷áñáêôçñéóôéêÜ ôçò óõó÷Ýôéóçò (áí õðÜñ÷ïõí).
Ðáñáôçñïýìå, üôé óôçí ðåñßðôùóç áõôÞ, äåí ôßèåôáé èÝìá õðï÷ñåùôéêÞò Þ
ìç óõììåôï÷Þò êáèþò ôï ðñüâëçìá êáëýðôåôáé ìå ôçí ýðáñîç ôïõ ôñßôïõ
ðßíáêá.
Ãéá ðáñÜäåéãìá, áðü ôï äéÜãñáììá ÏÓ ôïõ Ó÷Þìáôïò 4.1 áò èåùñÞóïõìå
ôï óýíïëï óõó÷åôßóåùí ÓõíäñïìÞ, ôï ïðïßï åßíáé ôýðïõ Í:Ì êáé äçëþíåé
üôé Ýíáò óõíäñïìçôÞò ìðïñåß íá åßíáé êáôá÷ùñéóìÝíïò óå ðïëëÝò ãíùóôéêÝò
ðåñéï÷Ýò êáé ìßá ãíùóôéêÞ ðåñéï÷Þ ìðïñåß íá Ý÷åé ðïëëïýò óõíäñïìçôÝò.
Óå ìßá ôÝôïéá ðåñßðôùóç ðñÝðåé íá äçìéïõñãçèïýí ôñåéò ðßíáêåò ìå äïìÞ
ðïõ ðáñïõóéÜæåôáé óôï Ó÷Þìá 6.2.
Ó÷Þìá 6.5: Ó÷åóéáêü ó÷Þìá ôçò ÂÄ ôïõ Ó÷Þìáôïò 4.1 ìåôÜ ôç ìåôáôñïðÞ.
κ ω δ ι κ ό ς ό ν ο α κ ω δ ι κ ό ς ό ν ο α
Τ ρ α γ ο υ δ ι σ τ ή ς M Σ υ ν ε ρ γ α σ ί α Σ ύ β ο υ λ ο ς
ι σ κ ο γ ρ α φ ι κ ή
κ ω δ ι κ ό ς ό ν ο α
Ε τ α ι ρ ε ί α
( α )
κ ω δ ι κ ό ς ό ν ο α κ ω δ ι κ ό ς τ ί τ λ ο ς
Θ ε α τ ρ ι κ ή
Θ ί α σ ο ς M Έ ρ γ ο
Π α ρ ά σ τ α σ η
η ε ρ / ν ί α
κ ω δ ι κ ό ς Π ρ ε ι έ ρ α
τ ό π ο ς
( β )
Ó÷Þìá 6.6: Óýíïëá óõó÷åôßóåùí ðïõ óõíäÝïõí ðåñéóóüôåñá áðü äýï óýíïëá
ïíôïôÞôùí.
6.5 ¼øåéò
ÊáôÜ ôçí ðåñéãñáöÞ ôçò áñ÷éôåêôïíéêÞò ôñéþí åðéðÝäùí (ANSI-SPARC) ïñßóáìå
ùò åîùôåñéêü åðßðåäï ôïí ôñüðï ìå ôïí ïðïßï ïé äéÜöïñïé ÷ñÞóôåò ôïõ óõóôÞìáôïò
áíôéëáìâÜíïíôáé ôá äåäïìÝíá ôçò ÂÄ. ÊÜèå ÷ñÞóôçò Ý÷åé ìßá äéáöïñåôéêÞ üøç
ôùí äåäïìÝíùí. Óôï ó÷åóéáêü ìïíôÝëï ç Ýííïéá ôçò üøçò (view) åßíáé äéáöïñå-
ôéêÞ. Ôï ó÷åóéáêü ìïíôÝëï äåäïìÝíùí åðéôñÝðåé ôïí ïñéóìü äéáöïñåôéêþí üøåùí
ãéá ôï ßäéï óýíïëï äåäïìÝíùí. Ìßá üøç åßíáé ìßá åéêïíéêÞ (virtual) Þ áëëéþò
ðáñáãüìåíç (derived) ó÷Ýóç. Áõôü óçìáßíåé üôé óå áíôßèåóç ìå ìßá ó÷Ýóç âÜ-
óçò (base relation) ìßá üøç äåí Ý÷åé öõóéêÞ õðüóôáóç, ôï ïðïßï óçìáßíåé üôé äåí
õðÜñ÷ïõí ðëåéÜäåò ðïõ íá áíÞêïõí öõóéêÜ óå áõôÞí (âë. Ó÷Þìá 6.7). Ïé ðëåéÜ-
äåò ôçò üøçò áíÞêïõí óå ìßá Þ ðåñéóóüôåñåò ó÷Ýóåéò âÜóçò. ÊÜèå ó÷Ýóç âÜóçò
Ý÷åé öõóéêÞ õðüóôáóç. ÅéóáãùãÝò, äéáãñáöÝò êáé åíçìåñþóåéò óôçí üøç ðñïêá-
ëïýí áíôßóôïé÷åò åéóáãùãÝò, äéáãñáöÝò êáé åíçìåñþóåéò óôéò ó÷Ýóåéò âÜóçò üðïõ
óôçñßæåôáé ç üøç. Ùóôüóï, õðÜñ÷ïõí ðåñéðôþóåéò üðïõ äåí åðéôñÝðïíôáé ôÝôïéïõ
åßäïõò ëåéôïõñãßåò óôçí üøç, ðáñÜ ìüíï ëåéôïõñãßåò áíÜãíùóçò (read only).
Ïé üøåéò ðáñÝ÷ïõí ìßá óåéñÜ áðü åíäéáöÝñïíôá ÷áñáêôçñéóôéêÜ ðïõ óõíïøß-
æïíôáé óôá åîÞò:
• Áðïôåëïýí Ýíáí áðëü áëëÜ éó÷õñü ìç÷áíéóìü áðüêñõøçò äåäïìÝíùí áðü
óõãêåêñéìÝíïõò ÷ñÞóôåò Þ åöáñìïãÝò,
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 151
Ό ψ
η
Σ χ έ σ η Β ά σ η ς
Σ χ έ σ η Β ά σ η ς
Σ χ έ σ η Β ά σ η ς
êùäéêüò
êùäéêüò ôßôëïò ãíùóôéêÞò PDF
ðåñéï÷Þò
1 R-trees Have Grown Everywhere 1 NULL
2 Similarity Query Processing 1 NULL
3 Design of ATM Networks 2 NULL
êùäéêüò
êùäéêüò ôßôëïò ãíùóôéêÞò PDF
ðåñéï÷Þò
1 R-trees Have Grown Everywhere 1 1.pdf
2 Similarity Query Processing 1 2.pdf
3 Design of ATM Networks 2 NULL
êùäéêüò
êùäéêüò ôßôëïò ãíùóôéêÞò PDF
ðåñéï÷Þò
1 R-trees Have Grown Everywhere 1 1.pdf
2 Similarity Query Processing 1 2.pdf
3 Design of ATM Networks 2 3.pdf
6.6 Óýíïøç
Ôï ó÷åóéáêü ìïíôÝëï äåäïìÝíùí áíáðôý÷èçêå áðü ôïí Codd ôï 1970 [Codd 1970]
êáé ÷áñáêôçñßæåôáé áðü ôçí áðëüôçôÜ ôïõ êáé ôç ìáèçìáôéêÞ ôïõ ðåñéãñáöÞ. Ôá
äýï áõôÜ ÷áñáêôçñéóôéêÜ ïäÞãçóáí óôç ìåãÜëç ôïõ áðÞ÷çóç ìå áðïôÝëåóìá ïé
êáôáóêåõáóôÝò ÓÄÂÄ íá ôï õéïèåôÞóïõí. Ôï ó÷åóéáêü ìïíôÝëï ÷ñçóéìïðïéåß ðß-
íáêåò (Þ áëëéþò ó÷Ýóåéò) ãéá ôçí áíáðáñÜóôáóç ôùí äåäïìÝíùí. Ï êÜèå ðßíáêáò
áðïôåëåßôáé áðü Ýíá óýíïëï óôçëþí (Þ ÷áñáêôçñéóôéêþí). ¸íá Þ ðåñéóóüôåñá
÷áñáêôçñéóôéêÜ ïñßæïõí ôï ðñùôåýïí êëåéäß ôïõ ðßíáêá. Äýï ãñáììÝò ôïõ ðß-
íáêá äåí ìðïñïýí íá óõìöùíïýí óôçí ôéìÞ ôïõ êëåéäéïý. ÊÜèå óôÞëç ôïõ ðßíáêá
ìðïñåß íá ëáìâÜíåé ôéìÝò áðü êÜðïéï ðåäßï ïñéóìïý ìå áôïìéêÝò ôéìÝò.
×ñçóéìïðïéþíôáò ðåñéïñéóìïýò áêåñáéüôçôáò äéáôçñåßôáé ç óõíåðÞò êáôÜ-
óôáóç ôùí äåäïìÝíùí ìåôÜ áðü åéóáãùãÝò, äéáãñáöÝò êáé åíçìåñþóåéò. Ïé óç-
ìáíôéêüôåñïé ðåñéïñéóìïß åßíáé: ðåñéïñéóìüò ÷ñÞóçò êåíþí ôéìþí, ðåñéïñéóìïß
áêåñáéüôçôáò ïíôïôÞôùí êáé ðåñéïñéóìïß áíáöïñþí. Ôá ó÷åóéáêÜ ÓÄÂÄ åðéôñÝ-
ðïõí ôç äçìéïõñãßá ðåñéïñéóìþí áêåñáéüôçôáò ïñéæüìåíùí áðü ôï ÷ñÞóôç ãéá
ìåãáëýôåñç åõåëéîßá.
Ïé üøåéò áðïôåëïýí Ýíáí ðïëý éó÷õñü ìç÷áíéóìü áðüêñõøçò äåäïìÝíùí êáé
áðëïðïßçóçò ôùí åñùôçìÜôùí, êáé õðïóôçñßæïíôáé áðü ðïëëÜ ó÷åóéáêÜ ÓÄÂÄ.
6.2. Ðüôå Ýíá êëåéäß êáëåßôáé óýíèåôï; Íá äþóåôå Ýíá ðáñÜäåéãìá ðßíáêá ìå
óýíèåôï êëåéäß.
6.5. Íá äþóåôå ðáñáäåßãìáôá üðïõ ç ÷ñÞóç êåíþí ôéìþí (NULL) äåí äçìéïõñãåß
ðñüâëçìá.
154 ÊåöÜëáéï 6. Ó÷åóéáêü ÌïíôÝëï ÄåäïìÝíùí
6.12. Óôï åðüìåíï ó÷Þìá ðáñïõóéÜæïíôáé äýï ó÷Ýóåéò âÜóçò. ¸óôù üôé áðü ôéò
ó÷Ýóåéò áõôÝò ðñÝðåé íá äçìéïõñãçèåß ç üøç R(A,B,C). Íá õëïðïéçèåß ç üøç êáé
íá ó÷ïëéáóèåß áí ôï óýóôçìá èá ðñÝðåé íá åðéôñÝðåé äéáãñáöÞ áðü ôçí üøç.
A B B C
a1 b b c1
a2 b b c2
íôÝëï ÏÓ óå ó÷åóéáêü ìïíôÝëï êáé ðáñáèÝóôå ôéò ó÷Ýóåéò ðïõ ðñïêýðôïõí êáé
ôá ÷áñáêôçñéóôéêÜ ôïõò.
6.15.
κ ω δ ι κ ό ς ό ν ο α κ ω δ ι κ ό ς ό ν ο α
Τ ρ α γ ο υ δ ι σ τ ή ς M Σ υ ν ε ρ γ α σ ί α Σ ύ β ο υ λ ο ς
ι σ κ ο γ ρ α φ ι κ ή
κ ω δ ι κ ό ς ό ν ο α
Ε τ α ι ρ ε ί α
( α )
κ ω δ ι κ ό ς ό ν ο α κ ω δ ι κ ό ς τ ί τ λ ο ς
Θ ε α τ ρ ι κ ή
Θ ί α σ ο ς M Έ ρ γ ο
Π α ρ ά σ τ α σ η
η ε ρ / ν ί α
κ ω δ ι κ ό ς Π ρ ε ι έ ρ α
τ ό π ο ς
( β )
157
158 ÊåöÜëáéï 7. Ó÷åóéáêÞ ¢ëãåâñá êáé Ó÷åóéáêüò Ëïãéóìüò
ëåéôïõñãßåò ôï áðïôÝëåóìá ôùí ïðïßùí åßíáé ìßá Þ ðåñéóóüôåñåò ó÷Ýóåéò ðïõ ðå-
ñéÝ÷ïõí ðëçñïöïñßá ìç Üìåóá ïñáôÞ ìå áðëÞ ðáñáôÞñçóç ôùí äåäïìÝíùí ôçò
ÂÄ.
ÅðéëïãÞ
Ç ðñÜîç ôçò åðéëïãÞò (select) ÷ñçóéìïðïéåßôáé ãéá ôçí åðéëïãÞ ôùí ðëåéÜäùí ðïõ
éêáíïðïéïýí ìßá ëïãéêÞ óõíèÞêç. Ç ðñÜîç óõìâïëßæåôáé ìå ôï ãñÜììá "ó", ìå ôï
üíïìá ôïõ ðßíáêá íá áêïëïõèåß óå ðáñåíèÝóåéò, åíþ ç ëïãéêÞ óõíèÞêç áíáãñÜ-
öåôáé ùò äåßêôçò óôçí ðñÜîç. Ãéá ðáñÜäåéãìá, Ýóôù üôé èÝëïõìå íá ëÜâïõìå ùò
áðÜíôçóç ôá óôïé÷åßá ôïõ óõíäñïìçôÞ üðïõ êùäéêüò = 12. Ç áíôßóôïé÷ç Ýêöñáóç
ôçò ó÷åóéáêÞò Üëãåâñáò åßíáé ç åîÞò:
ó êùäéêüò=12 (ÓõíäñïìçôÞò)
áí åíäéáöåñüìáóôå ãéá ôéò ãíùóôéêÝò ðåñéï÷Ýò ðïõ Ý÷ïõí ëéãüôåñïõò áðü 5 óõí-
äñïìçôÝò Þ ðåñéóóüôåñïõò áðü 50, ôüôå èá ÷ñçóéìïðïéÞóïõìå ôçí åîÞò ðñÜîç:
ÐñïâïëÞ
Ìå ôçí ðñÜîç ôçò ðñïâïëÞò (project) ìðïñïýìå íá áðïìïíþóïõìå óõãêåêñéìÝíåò
óôÞëåò åíüò ðßíáêá. Ç ðñÜîç óõìâïëßæåôáé ìå ôï ãñÜììá "Ð". Ãéá ðáñÜäåéãìá,
ç åðüìåíç ðñÜîç ðñïâïëÞò åðéóôñÝöåé ôá ÷áñáêôçñéóôéêÜ üíïìá êáé ôçëÝöùíï
ãéá üëåò ôéò ãñáììÝò ôïõ ðßíáêá ÓõíäñïìçôÞò.
Áí äåí åíäéáöåñüìáóôå ãéá üëåò ôéò ãñáììÝò ôïõ ðßíáêá, ôüôå ìðïñïýìå íá ÷ñçóé-
ìïðïéÞóïõìå ìßá ðñÜîç åðéëïãÞò ôï áðïôÝëåóìá ôçò ïðïßáò ÷ñçóéìïðïéåßôáé ãéá
ôçí ðñÜîç ôçò ðñïâïëÞò. Ç åðüìåíç ðñÜîç åðéóôñÝöåé ôï üíïìá êáé ôï ôçëÝöùíï
ôùí óõíäñïìçôþí ôùí ïðïßùí ï êùäéêüò åßíáé ìåãáëýôåñïò áðü 20 (âë. Ó÷Þìá
7.2).
üíïìá ôçëÝöùíï
Ìáñßá 6945123456
ÁëÝîáíäñïò 6937222999
Êáñôåóéáíü Ãéíüìåíï
Ç ðñÜîåéò åðéëïãÞ êáé ðñïâïëÞ ÷ñçóéìïðïéïýí Ýíáí ðßíáêá. Ôï êáñôåóéáíü ãé-
íüìåíï (cartesian product) óõìâïëßæåôáé ìå ôï óýìâïëï × êáé åöáñìüæåôáé óå äýï
ðßíáêåò. Ôï áðïôÝëåóìá ôïõ êáñôåóéáíïý ãéíïìÝíïõ åßíáé üëïé ïé äõíáôïß óõí-
äõáóìïß ãñáììþí ôùí äýï ðéíÜêùí. Ðéï óõãêåêñéìÝíá: R1 (a, b, c)×R2 (x, y, z) =
R(a, b, c, x, y, z).
Áí ïé äýï ðßíáêåò Ý÷ïõí ÷áñáêôçñéóôéêÜ ìå äéáöïñåôéêÜ ïíüìáôá, ôüôå äåí
õðÜñ÷åé êáíÝíá ðñüâëçìá. Áí üìùò êÜðïéï ÷áñáêôçñéóôéêü åìöáíßæåôáé êáé
162 ÊåöÜëáéï 7. Ó÷åóéáêÞ ¢ëãåâñá êáé Ó÷åóéáêüò Ëïãéóìüò
óôïõò äýï ðßíáêåò, ôüôå ðñÝðåé êÜðïéï áðü ôá äýï íá ìåôïíïìáóèåß (ç ðñÜîç
ôçò ìåôïíïìáóßáò ðåñéãñÜöåôáé óôç óõíÝ÷åéá). Ãéá íá ìçí õðÜñ÷åé óýã÷õóç óôçí
ïíïìáôïëïãßá ôùí ÷áñáêôçñéóôéêþí, ÷ñçóéìïðïéïýìå ôï óõìâïëéóìü R.á ãéá íá
äçëþóïõìå üôé áíáöåñüìáóôå óôï ÷áñáêôçñéóôéêü á ôïõ ðßíáêá R.
ÈåùñÞóôå ôïõò ðßíáêåò ÓõíäñïìçôÞò êáé ÃíùóôéêÞ Ðåñéï÷Þ. ÈÝëïõìå íá ðñïó-
äéïñßóïõìå üëïõò ôïõò äõíáôïýò óõíäõáóìïýò ìåôáîý óõíäñïìçôþí êáé ãíùóôé-
êþí ðåñéï÷þí. Åðßóçò, õðÜñ÷åé ç áíÜãêç ï ôåëéêüò ðßíáêáò ðïõ èá ðñïêýøåé íá
Ý÷åé ùò ÷áñáêôçñéóôéêÜ ôá êëåéäéÜ ôùí ðéíÜêùí, üíïìá ôïõ óõíäñïìçôÞ êáé ôïí
ôßôëï ôçò ãíùóôéêÞò ðåñéï÷Þò. Ç ëýóç óôï ðñüâëçìá äßíåôáé ÷ñçóéìïðïéþíôáò
ôçí ðñÜîç ôçò ðñïâïëÞò óôï êáñôåóéáíü ãéíüìåíï ôùí ðéíÜêùí ÓõíäñïìçôÞò êáé
ÃíùóôéêÞ Ðåñéï÷Þ (âë. Ó÷Þìá 7.3):
Ó÷Þìá 7.3: ÁðïôÝëåóìá ðñïâïëÞò óôï êáñôåóéáíü ãéíüìåíï ôùí ðéíÜêùí Óõí-
äñïìçôÞò êáé ÃíùóôéêÞ Ðåñéï÷Þ.
Ìåôïíïìáóßá
Ôá áðïôåëÝóìáôá ôùí ðñÜîåùí ôçò ó÷åóéáêÞò Üëãåâñáò äåí Ý÷ïõí üíïìá, óå
áíôßèåóç ìå ôïõò ðßíáêåò. Ç ïíïìáóßá ôùí áðïôåëåóìÜôùí èåùñåßôáé ÷ñÞóéìç
åðåéäÞ äßíåé ôç äõíáôüôçôá íá ÷ñçóéìïðïéÞóïõìå Ýíá áðïôÝëåóìá óå êÜðïéá åðü-
ìåíç ðñÜîç. Ç ðñÜîç ôçò ìåôïíïìáóßáò (rename) äçëþíåôáé ìå ôï óýìâïëï "ñ"
êáé ëáìâÜíåé ùò üñéóìá ìßá Ýêöñáóç ó÷åóéáêÞò Üëãåâñáò. Ç ðñÜîç óõíáíôÜôáé
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 163
óå äýï ìïñöÝò:
¸íùóç
Ç ðñÜîç ôçò Ýíùóçò (union) åßíáé ãíùóôÞ áðü ôç Èåùñßá Óõíüëùí. Ç Ýíùóç
äýï ðéíÜêùí óõìâïëßæåôáé ìå ∪ êáé ï ðáñáãüìåíïò ðßíáêáò ðåñéÝ÷åé ôéò ãñáììÝò
ôùí äýï ðéíÜêùí. Ãéá íá Ý÷åé íüçìá ç ðñÜîç ôçò Ýíùóçò ðñÝðåé ïðùóäÞðïôå íá
éó÷ýïõí ïé åîÞò äýï ðñïûðïèÝóåéò óõìâáôüôçôáò:
¸óôù üôé åíäéáöåñüìáóôå ãéá ôéò ãíùóôéêÝò ðåñéï÷Ýò, ôùí ïðïßùí ï áñéèìüò
óõíäñïìçôþí åßíáé ìéêñüôåñïò áðü 5 Þ ìåãáëýôåñïò áðü 50. ÐñïçãïõìÝíùò äü-
èçêå ìßá ëýóç óôï ðñüâëçìá áõôü ÷ñçóéìïðïéþíôáò ôçí ðñÜîç ôçò åðéëïãÞò:
ÈåùñÞóôå üôé åíäéáöåñüìáóôå ãéá ôá ïíüìáôá ôùí óõíåäñßùí êáé ôùí ðå-
ñéïäéêþí ðïõ õðÜñ÷ïõí êáôá÷ùñéóìÝíá óôç ÂÄ ôçò çëåêôñïíéêÞò âéâëéïèÞêçò.
Ìðïñïýìå íá ÷ñçóéìïðïéÞóïõìå ôçí ðñÜîç ôçò Ýíùóçò óôïõò ðßíáêåò ÐñáêôéêÜ-
Óõíåäñßïõ êáé Ðåñéïäéêü ìå ÷ñÞóç ôçò ðñÜîçò ðñïâïëÞò óôïí ôßôëï ôïõ óõíåäñßïõ
êáé óôïí ôßôëï ôïõ ðåñéïäéêïý áíôéóôïß÷ùò:
ÄéáöïñÜ Óõíüëùí
Ç ðñÜîç ôçò äéáöïñÜò óõíüëùí (set difference) ÷ñçóéìïðïéåßôáé ãéá íá áðïìï-
íþóåé ôéò ãñáììÝò åíüò ðßíáêá, ïé ïðïßåò äåí áíÞêïõí óå êÜðïéïí Üëëï ðßíáêá.
Ç ðñÜîç åßíáé áêñéâþò ßäéá ìå ôç äéáöïñÜ óõíüëùí êáé óõìâïëßæåôáé ìå ôï óÞìá
ôçò áöáßñåóçò −. Ãéá ôçí ðñÜîç áõôÞ ðñÝðåé íá éó÷ýïõí ïé ßäéåò ðñïûðïèÝóåéò
óõìâáôüôçôáò ðïõ éó÷ýïõí êáé ãéá ôçí ðñÜîç ôçò Ýíùóçò.
ÔïìÞ ÐéíÜêùí
Ç ôïìÞ (intersection) äýï ðéíÜêùí óõìâïëßæåôáé ìå ∩ êáé åðéóôñÝöåé Ýíá óýíïëï
ðëåéÜäùí ðïõ õðÜñ÷ïõí êáé óôïõò äýï ðßíáêåò. Êáé óôçí ðåñßðôùóç áõôÞ ðñÝðåé
íá éó÷ýïõí ïé ßäéåò ðñïûðïèÝóåéò óõìâáôüôçôáò, üðùò óôçí ðñÜîç ôçò Ýíùóçò.
Ãéá ðáñÜäåéãìá, Ýóôù üôé èÝëïõìå íá áíáæçôÞóïõìå êïéíÜ ïíüìáôá óõããñáöÝùí
êáé óõíäñïìçôþí, ÷ùñßò áõôü íá óçìáßíåé êáô’ áíÜãêç üôé åßíáé êáé ôï ßäéï ðñü-
óùðï. ×ñçóéìïðïéþíôáò ðñïâïëÞ êáé êáôüðéí ôïìÞ ðéíÜêùí Ý÷ïõìå:
Ôï ãåãïíüò üôé ç ðñÜîç ôçò ôïìÞò äåí ðñïóöÝñåé åêöñáóôéêÞ éó÷ý óôçí Üëãå-
âñá áðïäåéêíýåôáé áðëïýóôáôá êáèþò åßíáé éóïäýíáìç ìå ôç äéáäï÷éêÞ åöáñìïãÞ
ôçò ðñÜîçò ôçò äéáöïñÜò ùò åîÞò:
R1 ∩ R2 = R1 − (R1 − R2 )
ÖõóéêÞ Óýíäåóç
Ôï êáñôåóéáíü ãéíüìåíï äýï ðéíÜêùí R1 êáé R2 åðéóôñÝöåé üëïõò ôïõò äõíáôïýò
óõíäõáóìïýò ôùí ðëåéÜäùí ôùí ðéíÜêùí. Óå ðïëëÝò ðåñéðôþóåéò åíäéáöåñüìáóôå
ìüíï ãéá Ýíá õðïóýíïëï ôïõ êáñôåóéáíïý ãéíïìÝíïõ, áíáëüãùò ìå ôçí ôéìÞ ðïõ
Ý÷ïõí êÜðïéá ÷áñáêôçñéóôéêÜ ôùí ðéíÜêùí. Ãéá ôï óêïðü áõôü õðÜñ÷åé ç ðñÜîç
ôçò öõóéêÞò óýíäåóçò (natural join), ç ïðïßá óõìâïëßæåôáé ìå 1.
ÈåùñÞóôå ôïõò ðßíáêåò R1 (a, b, c) êáé R2 (a, d). ÐáñáôçñÞóôå üôé ôï ÷áñáêôç-
ñéóôéêü a âñßóêåôáé êáé óôïõò äýï ðßíáêåò. Óôï Ó÷Þìá 7.4 äßíåôáé Ýíá óôéãìéüôõðï
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 165
a b c a d
a b c d
1 10 100 1 123
1 10 100 123
2 20 200 2 321
2 20 200 321
3 30 300 3 111
3 30 300 111
4 40 400 5 222
R1 1 R2
R1 R2
ôùí äýï ðéíÜêùí, êáèþò êáé ôï áðïôÝëåóìá ôçò ìåôáîý ôïõò öõóéêÞò óýíäåóçò.
Ç ðñÜîç ôçò óýíäåóçò åðéóôñÝöåé ôéò ãñáììÝò ôùí äýï ðéíÜêùí, ïé ïðïßåò Ý÷ïõí
ôçí ßäéá ôéìÞ óôá êïéíÜ ÷áñáêôçñéóôéêÜ. Óôçí ðåñßðôùóÞ ìáò, ôï ìïíáäéêü êïéíü
÷áñáêôçñéóôéêü åßíáé ôï a, ïðüôå åðéóôñÝöïíôáé ïé ãñáììÝò ãéá ôéò ïðïßåò éó÷ýåé
üôé ç ôéìÞ ôïõ a óôïí ðßíáêá R1 éóïýôáé ìå ôçí ôéìÞ ôïõ a óôïí ðßíáêá R2 . Áí
óôï áðïôÝëåóìá ÷ñåéáæüìáóôå ìüíï ôá ÷áñáêôçñéóôéêÜ a, b êáé d ôüôå ãñÜöïõìå:
Ð a,b,d (R1 1 R2 )
Óýíäåóç-θ
Ç ðñÜîç ôçò öõóéêÞò óýíäåóçò ÷ñçóéìïðïéåß áõôüìáôá ôïí ôåëåóôÞ éóüôçôáò ãéá
ôïí ðñïóäéïñéóìü ôùí ðëåéÜäùí ðïõ èá óõìðåñéëçöèïýí óôï áðïôÝëåóìá ôçò
ðñÜîçò. Ç ðñÜîçò ôçò óýíäåóçò-θ (θ-Join) (óõìâïëßæåôáé ìå 1θ ) åðéôñÝðåé ìå-
ãáëýôåñç åõåëéîßá, êáèþò ìðïñïýìå íá ïñßóïõìå ôç óõíèÞêç (θ) ôçò óýíäåóçò
áíáëüãùò ìå ôï åðéèõìçôü áðïôÝëåóìá. Óôï Ó÷Þìá 7.5 ðáñïõóéÜæåôáé ôï áðïôÝ-
ëåóìá ôçò óýíäåóçò θ, üðïõ θ åßíáé ç óõíèÞêç: R1 .a < R2 .x.
166 ÊåöÜëáéï 7. Ó÷åóéáêÞ ¢ëãåâñá êáé Ó÷åóéáêüò Ëïãéóìüò
a b c x y
a b c x y 1 10 100 2 321
1 10 100 3 111
1 10 100 1 123
1 10 100 5 222
2 20 200 2 321
2 20 200 3 111
3 30 300 3 111
2 20 200 5 222
4 40 400 5 222
3 30 300 5 222
R1 R2 4 40 400 5 222
R1 1R1 .a<R2 .x R2
ÅîùôåñéêÞ Óýíäåóç
Ç ðñÜîç ôçò öõóéêÞò óýíäåóçò äßíåé óôçí Ýîïäï ôïõò óõíäõáóìïýò ãñáììþí ôùí
äýï ðéíÜêùí áí ïé ôéìÝò óôá êïéíÜ ÷áñáêôçñéóôéêÜ ôùí ðéíÜêùí ôáõôßæïíôáé. Ç
åîùôåñéêÞ óýíäåóç (outer join) äßíåé óôçí Ýîïäï üëåò ôéò ãñáììÝò ôïõ áñéóôåñïý Þ
ôïõ äåîéïý ðßíáêá, ÷ùñßò êáô’ áíÜãêç íá õðÜñ÷åé ôáýôéóç ôùí ôéìþí ôùí êïéíþí
÷áñáêôçñéóôéêþí. ÅðïìÝíùò, ç åîùôåñéêÞ óýíäåóç ìðïñåß íá åßíáé áñéóôåñÞ
åîùôåñéêÞ óýíäåóç (left outer join) Þ äåîéÜ åîùôåñéêÞ óýíäåóç (right outer join).
Ç áñéóôåñÞ åîùôåñéêÞ óýíäåóç óõìâïëßæåôáé ìå o êáé ç äåîéÜ ìå n. Óôï Ó÷Þìá
7.6 ðáñïõóéÜæåôáé ôï áðïôÝëåóìá ôùí äýï ôýðùí óýíäåóçò ãéá ôïõò ðßíáêåò R1
êáé R2 ôïõ Ó÷Þìáôïò 7.4.
a b c d
a b c d a b c d
1 10 100 123
1 10 100 123 1 10 100 123
2 20 200 321
2 20 200 321 2 20 200 321
3 30 300 111
3 30 300 111 3 30 300 111
4 40 400 NULL
4 40 400 NULL 5 NULL NULL 222
5 NULL NULL 222
ÁñéóôåñÞ ÄåîéÜ
ÐëÞñçò
Ðáñáôçñïýìå üôé áðü ôïí ïñéóìü ôçò åîùôåñéêÞò óýíäåóçò èá õðÜñ÷ïõí (óôç
ãåíéêÞ ðåñßðôùóç) ãñáììÝò ôïõ åíüò ðßíáêá, ïé ïðïßåò äåí áíôéóôïé÷ïýí óå ãñáì-
ìÝò ôïõ Üëëïõ ðßíáêá. Ùóôüóï, åðåéäÞ üëåò ïé ãñáììÝò ôïõ åíüò åê ôùí äýï
ðéíÜêùí ðñÝðåé íá åìöáíéóèïýí óôï áðïôÝëåóìá, ïé ôéìÝò ðïõ ëåßðïõí óõìðëç-
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 167
ñþíïíôáé ìå NULL.
Óçìåéþíåôáé üôé õðÜñ÷åé êáé Ýíáò áêüìç ôýðïò åîùôåñéêÞò óýíäåóçò, ï ïðïßïò
êáëåßôáé ðëÞñçò åîùôåñéêÞ óýíäåóç (full outer join) êáé áðïôåëåß óõíäõáóìü ôçò
áñéóôåñÞò êáé ôçò äåîéÜò åîùôåñéêÞò óýíäåóçò. Óôï áðïôÝëåóìá ôçò ðñÜîçò áõôÞò
óõììåôÝ÷ïõí ïé ðëåéÜäåò êáé ôùí äýï ó÷Ýóåùí, åíþ áí äåí õðÜñ÷åé áíôéóôïé÷ßá ìå-
ôáîý ôùí ðëåéÜäùí, ôüôå ïé ôéìÝò óõìðëçñþíïíôáé ìå NULL. Ç åîùôåñéêÞ óýíäåóç
ìðïñåß íá ÷ñçóéìïðïéçèåß êáé ìå êÜðïéá óõíèÞêç θ, åíäå÷ïìÝíùò äéáöïñåôéêÞ
áðü ôç óõíèÞêç éóüôçôáò ðïõ éó÷ýåé óôç öõóéêÞ óýíäåóç.
Çìéóýíäåóç
Ç çìéóýíäåóç (semijoin) Ý÷åé ôçí ßäéá ëåéôïõñãéêüôçôá ìå ôç óýíäåóç-θ, ìå ôç
äéáöïñÜ üôé ç ó÷Ýóç ðïõ ðáñÜãåôáé Ý÷åé ôá ßäéá ÷áñáêôçñéóôéêÜ ìå ôç ìßá áðü
ôéò äýï ó÷Ýóåéò ðïõ ÷ñçóéìïðïéïýíôáé ãéá ôçí åêôÝëåóç ôçò ðñÜîçò. Áíáëüãùò
áí äéáôçñåßôáé ôï ó÷Þìá ôçò áñéóôåñÞò Þ ôçò äåîéÜò ó÷Ýóçò Ý÷ïõìå áñéóôåñÞ
çìéóýíäåóç (left semijoin) êáé äåîéÜ çìéóýíäåóç (right semijoin), ïé ïðïßåò óõì-
âïëßæïíôáé ìå ¤θ êáé ¢θ , áíôéóôïß÷ùò. ÅðïìÝíùò ãéá äýï ó÷Ýóåéò R1 êáé R2 êáé
ãéá ìßá óõíèÞêç θ, ç áñéóôåñÞ êáé ç äåîéÜ çìéóýíäåóç ãñÜöïíôáé: R1 ¤θ R2 êáé
R1 ¢θ R2 , áíôéóôïß÷ùò. Óôï Ó÷Þìá 7.7 äßíåôáé Ýíá ðáñÜäåéãìá áñéóôåñÞò êáé
äåîéÜò çìéóýíäåóçò, üðïõ ç óõíèÞêç-θ åßíáé R1 .a = R2 .a, üðïõ êáé ðÜëé R1 , R2
åßíáé ðßíáêåò ôïõ Ó÷Þìáôïò 7.4.
a b c a d
1 10 100 1 123
2 20 200 2 321
3 30 300 3 111
ÁñéóôåñÞ ÄåîéÜ
Åê÷þñçóç
Áí ôá åñùôÞìáôá åßíáé áðëÜ, ôüôå áðáéôïýí ëßãåò ó÷åôéêÜ ðñÜîåéò ó÷åóéáêÞò Üë-
ãåâñáò ãéá íá ëÜâïõìå ôï åðéèõìçôü áðïôÝëåóìá. ¼óï áõîÜíåôáé ç ðïëõðëïêü-
ôçôá ôïõ åñùôÞìáôïò, ôüóï ôï ðëÞèïò ôùí ðñÜîåùí áõîÜíåé óçìáíôéêÜ. Ç ðñÜîç
ôçò åê÷þñçóçò (assignment) åðéôñÝðåé ôç ÷ñÞóç ìåôáâëçôþí ãéá ôçí áðïèÞêåõóç
ôùí åíäéÜìåóùí áðïôåëåóìÜôùí ôùí ðñÜîåùí. Ïé ìåôáâëçôÝò ìðïñïýí íá ÷ñçóé-
ìïðïéçèïýí ùò ïñßóìáôá óå åðüìåíåò ðñÜîåéò. ¸óôù üôé æçôïýìå ôéò ãñáììÝò ôïõ
ðßíáêá ÐñáêôéêÜ Óõíåäñßïõ, ïé ïðïßåò éêáíïðïéïýí ôç óõíèÞêç: ÷þñá=‘ÅëëÜäá’
168 ÊåöÜëáéï 7. Ó÷åóéáêÞ ¢ëãåâñá êáé Ó÷åóéáêüò Ëïãéóìüò
Äéáßñåóç
Ç ðñÜîç ôçò äéáßñåóçò (division) óõìâïëßæåôáé ìå ÷ êáé ÷ñçóéìïðïéåßôáé óõíÞèùò
óå ðåñéðôþóåéò üðïõ óôï åñþôçìá ðåñéÝ÷åôáé ç Ýêöñáóç "ãéá êÜèå" Þ "óå êÜèå".
ÈåùñÞóôå äýï ó÷Ýóåéò R êáé S, üðïõ ç ó÷Ýóç R áðïôåëåßôáé áðü ôï óýíïëï
÷áñáêôçñéóôéêþí X, ç ó÷Ýóç S áðïôåëåßôáé áðü ôï óýíïëï ÷áñáêôçñéóôéêþí Y ,
åíþ éó÷ýåé Y ⊆ X. ¸óôù Z ôï óýíïëï ôùí ÷áñáêôçñéóôéêþí ðïõ ïñßæåôáé áðü
ôç ó÷Ýóç Z = X − Y (äçëáäÞ, ôï Z áðïôåëåßôáé áðü ôá ÷áñáêôçñéóôéêÜ ðïõ áíÞ-
êïõí óôï X áëëÜ ü÷é óôï Y ). Ôï áðïôÝëåóìá ôçò ðñÜîçò R ÷ S åßíáé ìßá ó÷Ýóç
ðïõ Ý÷åé ôá ÷áñáêôçñéóôéêÜ ôïõ óõíüëïõ C êáé ïñßæåôáé óýìöùíá ìå ôçí Ýêöñáóç:
T 1 ← ΠZ (R)
T 2 ← ΠZ ((S × T 1) − R)
R ÷ S ← T1 − T2
Ãéá ðáñÜäåéãìá, èåùñÞóôå ôéò ó÷Ýóåéò R êáé S ôïõ Ó÷Þìáôïò 7.8, üðïõ ôï
óýíïëï X áðïôåëåßôáé áðü ôá ÷áñáêôçñéóôéêÜ A1, A2, A3, A4, A5 êáé ôï óýíïëï
Y áðïôåëåßôáé áðü ôá ÷áñáêôçñéóôéêÜ A1, A2, A3. ÅðïìÝíùò, C = {A4, A5}.
Ôï áðïôÝëåóìá ôçò ðñÜîçò R ÷ S öáßíåôáé óôá äåîéÜ ôïõ Ó÷Þìáôïò 7.8.
A1 A2 A3 A4 A5
1 1 2 3 3 A1 A2 A3
A4 A5
2 2 2 2 2 1 1 2
3 3
4 2 8 8 8 4 2 8
4 2 8 3 3 R÷S
S
R
{t | E(t)}
üðïõ t åßíáé ìßá ðëåéÜäá êáé E(t) åßíáé ìßá ëïãéêÞ Ýêöñáóç ðïõ åßôå åßíáé áëçèÞò
(true) åßôå øåõäÞò (false). Èá ÷ñçóéìïðïéÞóïõìå ôïõò åîÞò óõìâïëéóìïýò:
• s[x] ~ t[y], üðïõ s êáé t åßíáé ìåôáâëçôÝò ðëåéÜäáò, x êáé y åßíáé ÷áñáêôç-
ñéóôéêÜ êáé ~ åßíáé Ýíáò áðü ôïõò ôåëåóôÝò óýãêñéóçò ðïõ åìöáíßæïíôáé
óôïí Ðßíáêá 7.2.
• t[x] ~ C, üðïõ C åßíáé ìßá óôáèåñÜ ìå ôéìÞ ðïõ áíÞêåé óôï ðåäßï ïñéóìïý
ôïõ ÷áñáêôçñéóôéêïý x.
• Áí E åßíáé ìßá Ýêöñáóç, ôüôå åêöñÜóåéò åßíáé êáé ïé: ¬E êáé (E).
• Áí E(t) åßíáé ìßá Ýêöñáóç êáé t åßíáé ìßá åëåýèåñç ìåôáâëçôÞ ðëåéÜäáò,
ôüôå åêöñÜóåéò åßíáé êáé ïé: ∃s ∈ R(E(s)) êáé ∀s ∈ R(E(s)).
• E1 ∧ E2 = ¬(¬E1 ∨ ¬E2 )
• E1 ⇒ E2 = ¬E1 ∨ E2
Óôç óõíÝ÷åéá äßíïõìå ìåñéêÜ ðáñáäåßãìáôá åñùôçìÜôùí êáé ôïí ôñüðï ÷ñÞ-
óçò ôïõ ó÷åóéáêïý ëïãéóìïý ðëåéÜäùí ãéá ôçí ÝêöñáóÞ ôïõò:
Åñþôçìá 1: "Íá âñåèïýí ïé ãíùóôéêÝò ðåñéï÷Ýò ðïõ Ý÷ïõí ôïõëÜ÷éóôïí Ýíá óõí-
äñïìçôÞ".
Ç Ýêöñáóç áõôÞ ìðïñåß íá äéáâáóèåß ùò åîÞò: "ôï óýíïëï ôùí ðëåéÜäùí t Ýôóé
þóôå íá õðÜñ÷åé óôç ó÷Ýóç ÃíùóôéêÞ Ðåñéï÷Þ ìßá ðëåéÜäá s ãéá ôç ïðïßá ïé
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 171
êùäéêïß ôùí ðëåéÜäùí t êáé s íá åßíáé ßóïé êáé ç ôéìÞ ôïõ ÷áñáêôçñéóôéêïý áñéè-
ìüò óõíäñïìçôþí ôçò ðëåéÜäáò s íá åßíáé ôïõëÜ÷éóôïí 1."
Åñþôçìá 2: "Íá âñåèïýí ôá Üñèñá ðïõ Ý÷ïõí äçìïóéåõèåß óôï óõíÝäñéï ìå êù-
äéêü 1 Þ óôï óõíÝäñéï ìå êùäéêü 2".
Åñþôçìá 3: "Íá âñåèïýí ôá Üñèñá ðïõ Ý÷ïõí äçìïóéåõèåß êáé óå ðåñéïäéêü êáé
óå ðñáêôéêÜ óõíåäñßïõ".
Áí Ýíá Üñèñï Ý÷åé äçìïóéåõèåß óå êÜðïéï ðåñéïäéêü, ôüôå ç ôéìÞ ôïõ ÷áñáêôçñé-
óôéêïý êùäéêüò ðåñéïäéêïý èá ðåñéÝ÷åé ìßá ôéìÞ äéáöïñåôéêÞ áðü ôçí êåíÞ ôéìÞ
(NULL). Ôï ßäéï éó÷ýåé êáé ãéá ôçí ôéìÞ ôïõ ÷áñáêôçñéóôéêïý êùäéêüò óõíåäñßïõ.
ÅðïìÝíùò, ãéá íá áðáíôÞóïõìå óôï åñþôçìá áñêåß íá ãßíåé Ýëåã÷ïò ôùí äýï ÷á-
ñáêôçñéóôéêþí ôïõ ðßíáêá ¢ñèñï. Ôï åñþôçìá åêöñÜæåôáé ùò åîÞò:
Åñþôçìá 4: "Íá âñåèïýí ïé óõíäñïìçôÝò ðïõ Ý÷ïõí óõíäñïìÞ óôç ãíùóôéêÞ ðå-
ñéï÷Þ ÂÜóåéò ÄåäïìÝíùí Þ óôç ãíùóôéêÞ ðåñéï÷Þ ÊâáíôéêÞ ÖõóéêÞ".
{hx1 , x2 , . . . , xn i | E(x1 , x2 , . . . , xn )}
üðïõ xi (ãéá 1 ≤ i ≤ n) åßíáé ìßá ìåôáâëçôÞ ðåäßïõ êáé E ìßá ëïãéêÞ Ýêöñáóç.
¼ðùò êáé óôçí ðåñßðôùóç ôïõ ëïãéóìïý ðëåéÜäùí, ìßá Ýêöñáóç áðïôåëåßôáé
áðü áôïìéêÝò ìïíÜäåò. Ìßá áôïìéêÞ ìïíÜäá ìðïñåß íá åßíáé Ýíá áðü ôá åîÞò:
• x~y, üðïõ x, y åßíáé ìåôáâëçôÝò ðåäßïõ êáé ~ åßíáé Ýíáò áðü ôïõò ôåëåóôÝò
óýãêñéóçò ôïõ Ðßíáêá 7.2.
• x ~ C, üðïõ C åßíáé ìßá óôáèåñÜ ìå ôéìÞ áðü ôï ðåäßï ïñéóìïý ôçò ìåôá-
âëçôÞò x.
• Áí E åßíáé ìßá Ýêöñáóç, ôüôå åêöñÜóåéò åßíáé êáé ïé: ¬E êáé (E).
• Áí E(x) åßíáé ìßá Ýêöñáóç êáé x åßíáé ìßá ìåôáâëçôÞ ðåäßïõ, ôüôå åêöñÜ-
óåéò åßíáé êáé ïé: ∃x ∈ r(E(x)) êáé ∀x ∈ r(E(x)).
Åñþôçìá 1: "Íá âñåèïýí ïé ãíùóôéêÝò ðåñéï÷Ýò ðïõ Ý÷ïõí ôïõëÜ÷éóôïí Ýíá óõí-
äñïìçôÞ".
ëïãéóìïý ðåäßïõ:
Áí èÝëïõìå ìüíï ôïõò ôßôëïõò ôùí ãíùóôéêþí ðåñéï÷þí, ôüôå ôï åñþôçìá äéáôõ-
ðþíåôáé ùò åîÞò:
Åñþôçìá 2: "Íá âñåèïýí ôá Üñèñá ðïõ Ý÷ïõí äçìïóéåõèåß óôï óõíÝäñéï ìå êù-
äéêü 1 Þ óôï óõíÝäñéï ìå êùäéêü 2".
Åñþôçìá 3: "Íá âñåèïýí ôá Üñèñá ðïõ Ý÷ïõí äçìïóéåõèåß êáé óå ðåñéïäéêü êáé
óå ðñáêôéêÜ óõíåäñßïõ".
Åñþôçìá 4: "Íá âñåèïýí ïé óõíäñïìçôÝò ðïõ Ý÷ïõí óõíäñïìÞ óôç ãíùóôéêÞ ðå-
ñéï÷Þ ÂÜóåéò ÄåäïìÝíùí Þ óôç ãíùóôéêÞ ðåñéï÷Þ ÊâáíôéêÞ ÖõóéêÞ".
7.3 Óýíïøç
Ç ó÷åóéáêÞ Üëãåâñá êáé ï ó÷åóéáêüò ëïãéóìüò áðïôåëïýí éó÷õñÜ ìáèçìáôéêÜ
åñãáëåßá ìå ôá ïðïßá ìðïñïýìå íá åêôåëïýìå ðñÜîåéò óå Ýíá óýíïëï ó÷Ýóåùí.
Ç ó÷åóéáêÞ Üëãåâñá ïñßæåé Ýíá óýíïëï ðñÜîåùí ðïõ åöáñìüæïíôáé óå ìßá Þ
ðåñéóóüôåñåò ó÷Ýóåéò. Ïé èåìåëéþäåéò ðñÜîåéò ôçò ó÷åóéáêÞò Üëãåâñáò åßíáé
ïé: åðéëïãÞ, ðñïâïëÞ, êáñôåóéáíü ãéíüìåíï, ìåôïíïìáóßá, Ýíùóç êáé äéáöïñÜ.
ÅðéðëÝïí, ïñßæïíôáé êáé óõìðëçñùìáôéêÝò ðñÜîåéò ðïõ üìùò ìðïñïýí íá åê-
öñáóèïýí ìå âÜóç ôéò ðñïçãïýìåíåò. Ïé ðñÜîåéò áõôÝò åßíáé ïé: ôïìÞ, öõóéêÞ
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 175
7.6. Óôï åðüìåíï ó÷Þìá äßíïíôáé äýï óôéãìéüôõðá ó÷Ýóåùí R(A1, A2, A3) êáé
S(A4, A5, A6) êáé äþóôå ôï áðïôÝëåóìá ôùí åîÞò ðñÜîåùí:
• R 1R.A1=S.A4 S
• R 1R.A2=S.A5 S
• R 1R.A2=S.A5AN DR.A3=S.A6 S
• R∪S
7.7. Ãéá ôá áíùôÝñù óôéãìéüôõðá äþóôå ôï áðïôÝëåóìá ôçò áñéóôåñÞò åîùôåñéêÞò
óýíäåóçò êáé ôçò äåîéÜò åîùôåñéêÞò óýíäåóçò.
176 ÊåöÜëáéï 7. Ó÷åóéáêÞ ¢ëãåâñá êáé Ó÷åóéáêüò Ëïãéóìüò
A1 A2 A3 A4 A5 A6
1 10 100 1 20 300
2 20 200 3 30 400
3 10 300 1 20 100
Ãéá êÜèå Ýíá áðü ôá åðüìåíá åñùôÞìáôá íá äïèïýí åêöñÜóåéò ôçò ó÷åóéáêÞò
Üëãåâñáò:
• Íá âñåèïýí ôá ïíüìáôá ôùí õðáëëÞëùí ðïõ äéáìÝíïõí óôçí ßäéá ðüëç üðïõ
âñßóêåôáé êáé ç åôáéñåßá üðïõ åñãÜæïíôáé.
7.10. Íá åðéëõèåß ç ðñïçãïýìåíç Üóêçóç ãéá ôï ßäéï ó÷Þìá êáé åñùôÞìáôá áëëÜ
óå ó÷åóéáêü ëïãéóìü ðëåéÜäáò êáé ó÷åóéáêü ëïãéóìü ðåäßïõ.
7.11. ×ñçóéìïðïéþíôáò ôç ó÷åóéáêÞ Üëãåâñá íá ïñéóèåß ìßá üøç óôç ÂÜóç Äå-
äïìÝíùí ôçò ðñïçãïýìåíçò Üóêçóçò, ç ïðïßá íá äßíåé ôï üíïìá ôïõ õðáëëÞëïõ,
ôçí ðüëç äéáìïíÞò ôïõ, êáé ôï üíïìá ôçò åôáéñåßáò üðïõ åñãÜæåôáé.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 177
7.12. Ç ðñÜîç ôçò Ýíùóçò Ý÷åé íüçìá üôáí éó÷ýïõí ïé ðñïûðïèÝóåéò óõìâáôüôç-
ôáò. ¼ôáí õðÜñ÷åé ìåñéêÞ óõìâáôüôçôá (partial compatibility), äçëáäÞ õðÜñ÷ïõí
ìüíï ìåñéêÝò óôÞëåò ìå ßäéá ðåäßá ïñéóìïý ìåôáîý ôùí ïðïßùí êáé ôï ðñùôåýïí
êëåéäß, ôüôå ïñßæåôáé ç ðñÜîç ôçò åîùôåñéêÞò Ýíùóçò (outer union) êáô’ áíáëïãßá
ðñïò ôçí åîùôåñéêÞ óýíäåóç. Íá äïèïýí ðáñáäåßãìáôá Ý÷ïíôáò õð’ üøç ôéò ðå-
ñéðôþóåéò ôçò åîùôåñéêÞò óýíäåóçò.
• ΠB (R)
• σA=143 (R)
• S×R
7.15. Ðüôå ìßá Ýêöñáóç ó÷åóéáêïý ëïãéóìïý êáëåßôáé ìç-áóöáëÞò; Ãéá ðïéü
ëüãï ôÝôïéïõ åßäïõò åêöñÜóåéò äåí åßíáé åðéèõìçôÝò; Íá äþóåôå Ýíá ðáñÜäåéãìá
áóöáëïýò êáé ìç-áóöáëïýò Ýêöñáóçò ó÷åóéáêïý ëïãéóìïý ðëåéÜäùí.
8
ÓõíáñôçóéáêÝò ÅîáñôÞóåéò êáé
Êáíïíéêïðïßçóç
179
180 ÊåöÜëáéï 8. ÓõíáñôçóéáêÝò ÅîáñôÞóåéò êáé Êáíïíéêïðïßçóç
η λ έ φ ω ν ο
Α Φ Μ
Π ε λ ά τ η ς
Ç ëýóç ðïõ õðÜñ÷åé ãéá ôçí åðßëõóç ôùí ðñïâëçìÜôùí áõôþí åßíáé ç êá-
ôáóêåõÞ äýï äéáöïñåôéêþí ðéíÜêùí. Ç íÝá ìïñöÞ ôçò ÂÜóçò ÄåäïìÝíùí ðïõ
ðñïêýðôåé ðáñïõóéÜæåôáé óôï Ó÷Þìá 8.3. Ôá óôïé÷åßá áðïèçêåýïíôáé ìßá ìüíï
öïñÜ óôïí ðßíáêá ÐåëÜôçò, åíþ üëïé ïé ôçëåöùíéêïß áñéèìïß áðïèçêåýïíôáé óôïí
îå÷ùñéóôü ðßíáêá ÔçëÝöùíï. ¸ôóé ìðïñïýìå íá áðïèçêåýóïõìå ðïëëïýò ôçëå-
öùíéêïýò áñéèìïýò ãéá Ýíáí ðåëÜôç, ÷ùñßò ðëåïíáóìü äåäïìÝíùí.
ÁÖÌ áñéèìüò
ÁÖÌ üíïìá äéåýèõíóç 044231211 2310888888
044231211 Ãåþñ. Âáóéëåßïõ Â. ¼ëãáò 12 044231211 6977111222
044231211 2310888999
Ó÷Þìá 8.3: ÊáôáóêåõÞ äýï ðéíÜêùí ÐåëÜôçò êáé ÔçëÝöùíï ãéá áðïöõãÞ ðëåï-
íáóìïý.
ãñáììÝò t1 êáé t2 Ý÷ïõí êïéíÝò ôéìÝò óôá ÷áñáêôçñéóôéêÜ ôïõ óõíüëïõ X, ôüôå
èá Ý÷ïõí ßäéåò ôéìÝò êáé óôá ÷áñáêôçñéóôéêÜ ôïõ óõíüëïõ Y . Óôçí ðåñßðôùóç
áõôÞ ëÝãåôáé üôé ôï óýíïëï ÷áñáêôçñéóôéêþí Y åßíáé óõíáñôçóéáêÜ åîáñôþìåíï
(functionally dependent) áðü ôï óýíïëï X. Ãéá íá äçëþóïõìå üôé ôï óýíïëï Y
äåí åßíáé óõíáñôçóéáêÜ åîáñôþìåíï áðü ôï X ÷ñçóéìïðïéïýìå ôï óõìâïëéóìü
X 9 Y . Ãéá ðáñÜäåéãìá, ãéá ôá ÷áñáêôçñéóôéêÜ ôùí ðéíÜêùí ôïõ Ó÷Þìáôïò 8.3
éó÷ýåé: ÁÖÌ → ¼íïìá, êáèþò êáé: ÁÖÌ 9 ÔçëÝöùíï.
Óå êÜèå ðßíáêá éó÷ýïõí ïé ëåãüìåíåò ôåôñéììÝíåò (trivial) óõíáñôçóéáêÝò
åîáñôÞóåéò. Ìßá åîÜñôçóç ëÝãåôáé ôåôñéììÝíç áí êáé ìüíï áí ôï äåîéü óêÝëïò
ôçò åßíáé õðïóýíïëï ôïõ áñéóôåñïý óêÝëïõò ôçò åîÜñôçóçò, üðùò ãéá ðáñÜäåéãìá
ç ðåñßðôùóç: ÁÖÌ, ¼íïìá → ¼íïìá.
Ïé óõíáñôçóéáêÝò åîáñôÞóåéò ïöåßëïíôáé óôéò óçìáóéïëïãéêÝò éäéüôçôåò (se-
mantics) ðïõ Ý÷ïõí ôá ÷áñáêôçñéóôéêÜ ôùí ïíôïôÞôùí. Ïé ó÷åäéáóôÝò ôùí ÂÜóåùí
ÄåäïìÝíùí ðñÝðåé íá åßíáé óå èÝóç íá áíáãíùñßæïõí áõôÝò ôéò åîáñôÞóåéò êáé
íá ôéò åéóÜãïõí óôï óýóôçìá ìå ôç ìïñöÞ ðåñéïñéóìþí (constraints). ÁëëáãÝò
óôéò ïíôüôçôåò ôïõ ðñáãìáôéêïý êüóìïõ ìðïñïýí íá åðéöÝñïõí áëëáãÝò êáé óôéò
óõíáñôçóéáêÝò åîáñôÞóåéò ìåôáîý ôùí ÷áñáêôçñéóôéêþí.
üôé ðñïóáñôþíôáò ôï ßäéï óýíïëï ÷áñáêôçñéóôéêþí óôï áñéóôåñü êáé äåîéü ìÝ-
ñïò ìßáò óõíáñôçóéáêÞò åîÜñôçóçò ëáìâÜíïõìå ìßá íÝá åîÜñôçóç. Óýìöùíá ìå
ôï ìåôáâáôéêü êáíüíá, ïé óõíáñôçóéáêÝò åîáñôÞóåéò õðáêïýïõí óôç ìåôáâáôéêÞ
éäéüôçôá.
Áí êáé ïé êáíüíåò áõôïß ïíïìÜæïíôáé "áîéþìáôá", åíôïýôïéò ç ïñèüôçôÜ ôïõò
ìðïñåß íá áðïäåé÷èåß ìå ôç ìÝèïäï ôçò áðáãùãÞò óå Üôïðï. Ïé êáíüíåò áõôïß
åßíáé ïñèïß êáé ðëÞñåéò (sound and complete) ãéáôß (á) äåí ðáñÜãïõí ìç ïñèÝò
óõíáñôçóéáêÝò åîáñôÞóåéò, êáé (â) áñêïýí ãéá íá ðáñá÷èåß ôï óýíïëï F + . Ìï-
ëïíüôé åßíáé äõíáôüí íá ðáñá÷èåß ôï óýíïëï F + ìå ôç âïÞèåéá ôùí áîéùìÜôùí
Armstrong êáé ìüíï, ùóôüóï ç ÷ñÞóç ôùí åðïìÝíùí êáíüíùí äéåõêïëýíåé ôç
äéáäéêáóßá ðáñáãùãÞò ôïõ F + .
1. ÈÝôïõìå X = A.
2. Ìåôáîý ôùí óõíáñôçóéáêþí åîáñôÞóåùí ôïõ F áíáæçôïýìå åîáñôÞóåéò
C → D, üðïõ C ⊆ X. Áí âñåèåß ôÝôïéá åîÜñôçóç, ôüôå ðñïóáñôïýìå
ôï D óôï X.
3. ÅðáíáëáìâÜíïõìå ôï ÂÞìá 2 Ýùò üôïõ äåí ìðïñïýìå íá ðñïóáñôÞóïõìå
åðéðëÝïí ÷áñáêôçñéóôéêÜ óôï X.
4. Áí ôï ÷áñáêôçñéóôéêü B ∈ X, ôüôå ç óõíáñôçóéáêÞ åîÜñôçóç A → B
áíÞêåé óôï F + êáé åßíáé ðåñéôôÞ.
Óôç óõíÝ÷åéá ðñÝðåé íá åîåôÜóïõìå Ýíá ðñïò Ýíá ôá áñéóôåñÜ óêÝëç áõôþí ôùí
åîáñôÞóåùí ìå óêïðü íá âñïýìå ôçí êëåéóôüôçôÜ ôïõò. Áí áðïäåé÷èåß üôé ôï äå-
îéü ôïõò óêÝëïò áíÞêåé óôçí êëåéóôüôçôÜ ôïõò, ôüôå áõôÝò èá åßíáé ðåñéôôÝò áðü
ôï óýíïëï F , êáèþò èá ìðïñïýí íá ðáñá÷èïýí áðü ôéò õðüëïéðåò åîáñôÞóåéò ôïõ
F ìå âÜóç ôïõò êáíüíåò ðïõ áíáöÝñèçêáí ðñïçãïõìÝíùò.
1. Fmin = F .
2. Áíôéêáèéóôïýìå êÜèå åîÜñôçóç X → {A1 , A2 , . . . , An } ôïõ Fmin
ìå ôï óýíïëï ôùí åîáñôÞóåùí {X → A1 , X → A2 , . . . , X → An }.
3. Ãéá êÜèå åîÜñôçóç X → Y ôïõ Fmin
ãéá êÜèå ÷áñáêôçñéóôéêü B ∈ X, áí ôï óýíïëï
(Fmin − {X → Y }) ∪ ({X − B} → Y ) åßíáé éóïäýíáìï
ôïõ Fmin , ôüôå áíôéêáèéóôïýìå ôï X → Y ìå ôï {X − B} → Y
4. Ãéá ôéò õðüëïéðåò åîáñôÞóåéò X → Y ôïõ Fmin ,
áí ôï óýíïëï Fmin − {X → Y }, åßíáé éóïäýíáìï ôïõ Fmin ,
ôüôå äéáãñÜöïõìå ôçí åîÜñôçóç X → Y áðü ôï Fmin .
ìïñöÞ åßíáé êñßóéìç ãéá ôï ó÷åóéáêü ìïíôÝëï, åíþ ïé õðüëïéðåò åßíáé ðñïáéñå-
ôéêÝò. Óôï Ó÷Þìá 8.6 áðåéêïíßæåôáé ç ó÷Ýóç ìåôáîý ôùí êáíïíéêþí ìïñöþí. Áí
Ýíáò ðßíáêáò âñßóêåôáé óå ìßá êáíïíéêÞ ìïñöÞ, ôüôå âñßóêåôáé êáé óå üëåò ôéò
ðñïçãïýìåíåò.
' $
' $
' $
' $
' $
¶ ³
1NF 2NF 3NF BCNF 4NF 5NF
µ ´
& %
& %
& %
& %
& %
ÄéÜëåîç (ÁÅÌ, áñéè ìáèÞìáôïò, üíïìá öïéôçôÞ, þñá ìáèÞìáôïò, áñéè êôéñßïõ,
üíïìá êôéñßïõ)
Ç õðïãñÜììéóç óôï ó÷Þìá áõôü õðïäçëþíåé üôé ôï ðñùôåýïí êëåéäß ôïõ ðßíáêá
ÄéÜëåîç åßíáé óýíèåôï êáé áðïôåëåßôáé áðü ôá ÷áñáêôçñéóôéêÜ ÁÅÌ (Áñéèìüò
Åéäéêïý Ìçôñþïõ) êáé áñéè ìáèÞìáôïò. Ôï ðñüâëçìá ðïõ õðÜñ÷åé ìå ôïí ðß-
íáêá åßíáé üôé ÷áñáêôçñéóôéêÜ ðïõ äåí åßíáé êëåéäéÜ åîáñôþíôáé áðü ôìÞìá ôïõ
ðñùôåýïíôïò êëåéäéïý. Áíáëõôéêüôåñá:
Åßíáé ðñïöáíÝò üôé ï ðßíáêáò âñßóêåôáé Þäç óå ðñþôç êáíïíéêÞ ìïñöÞ, êáèþò
üëá ôá ÷áñáêôçñéóôéêÜ ëáìâÜíïõí áôïìéêÝò ôéìÝò. Ùóôüóï åìöáíßæïíôáé ìåñéêÜ
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 189
ðñïâëÞìáôá, üðùò:
• Ãéá íá ìðïñÝóïõìå íá êáôá÷ùñßóïõìå ôá óôïé÷åßá åíüò öïéôçôÞ èá ðñÝ-
ðåé áõôüò íá ðáñáêïëïõèåß ôïõëÜ÷éóôïí Ýíá ìÜèçìá åðåéäÞ ç ÷ñÞóç êåíÞò
ôéìÞò óôï ÷áñáêôçñéóôéêü áñéè ìáèÞìáôïò áðáãïñåýåôáé êáèþò ôï ÷áñá-
êôçñéóôéêü áõôü óõììåôÝ÷åé óôï ðñùôåýïí êëåéäß ôïõ ðßíáêá.
• Ç þñá åíüò ìáèÞìáôïò êáé ôï êôßñéï üðïõ èá äéåîá÷èåß ôï ìÜèçìá äåí
ìðïñïýí íá êáôá÷ùñéóèïýí áí äåí õðÜñ÷åé Ýóôù êáé Ýíáò öïéôçôÞò ðïõ íá
ðáñáêïëïõèåß ôï ìÜèçìá.
Ãéá ôçí åðßëõóç ôùí ðñïâëçìÜôùí áõôþí ðïõ åìöáíßæïíôáé êáôÜ ôéò åéóáãùãÝò
êáé äéáãñáöÝò ðñÝðåé íá ðñï÷ùñÞóïõìå óå áíþôåñåò êáíïíéêÝò ìïñöÝò.
Åßíáé ðñïöáíÝò üôé ïé ðßíáêåò âñßóêïíôáé óôç äåýôåñç êáíïíéêÞ ìïñöÞ óýì-
öùíá ìå ôá üóá áíáöÝñèçêáí ðñïçãïõìÝíùò. Ôï ðñùôåýïí êëåéäß ôùí ðéíÜêùí
ÖïéôçôÞò êáé ÔÜîç áðïôåëåßôáé ìüíï áðü Ýíá ÷áñáêôçñéóôéêü, åíþ ï ðßíáêáò Öïé-
ôçôÞò ÔÜîç ðåñéÝ÷åé äýï ÷áñáêôçñéóôéêÜ ðïõ áðïôåëïýí áðü êïéíïý ôï ðñùôåýïí
êëåéäß ôïõ ðßíáêá. ×ñçóéìïðïéþíôáò ôïõò ôñåéò íÝïõò ðßíáêåò áíôß ôïõ ðßíáêá
ÄéÜëåîç Ý÷ïõìå ôá åîÞò ðëåïíåêôÞìáôá:
• Ç äéáãñáöÞ ôùí äåäïìÝíùí ìßáò ôÜîçò äåí åðéöÝñåé ôç äéáãñáöÞ ôùí äå-
äïìÝíùí ôùí öïéôçôþí.
âñßóêåôáé óôçí ôñßôç êáíïíéêÞ ìïñöÞ üôáí êÜèå ÷áñáêôçñéóôéêü ðïõ äåí áðïôå-
ëåß ìÝñïò ôïõ ðñùôåýïíôïò êëåéäéïý äåí åßíáé ìåôáâáôéêþò åîáñôþìåíï áðü ôï
ðñùôåýïí êëåéäß ôïõ ðßíáêá.
Ïé óõíáñôçóéáêÝò åîáñôÞóåéò ðïõ éó÷ýïõí ãéá ôï ó÷Þìá ôçò âÜóçò üðùò Ý÷åé
äéáìïñöùèåß óôç äåýôåñç êáíïíéêÞ ìïñöÞ åßíáé ïé åîÞò:
åîåôÜóïõìå Ýíá Üëëï ðáñÜäåéãìá ðßíáêá ðïõ äåí éêáíïðïéåß ôçí êáíïíéêÞ ìïñöÞ
Boyce-Codd. ¸óôù, ëïéðüí, ôï åðüìåíï ó÷Þìá:
üðïõ õðïèÝôïõìå üôé êÜèå äéäÜóêùí äéäÜóêåé ìüíï Ýíá ìÜèçìá, áëëÜ Ýíá ìÜèçìá
ìðïñåß íá äéäá÷èåß áðü ðåñéóóüôåñïõò ôïõ åíüò äéäÜóêïíôåò, åíþ áêüìç óå êÜèå
ìÜèçìá Ýíáò öïéôçôÞò ðáñáêïëïõèåß ôéò äéáëÝîåéò åíüò ìüíï äéäÜóêïíôá. ¸ôóé
ðñïêýðôåé üôé éó÷ýåé ç óõíáñôçóéáêÞ åîÜñôçóç üíïìá öïéôçôÞ, áñéè ìáèÞìáôïò
→ äéäÜóêùí, üðïõ ôï áñéóôåñü óêÝëïò ôçò åîÜñôçóçò åßíáé ôï êëåéäß ôçò ó÷Ýóçò.
ÓçìáóéïëïãéêÜ ðáñáôçñïýìå üôé éó÷ýåé êáé ç åîÜñôçóç äéäÜóêùí → áñéè ìá-
èÞìáôïò, üðïõ ôï áñéóôåñü óêÝëïò äåí åßíáé êëåéäß (ðñùôåýïí Þ åíáëëáêôéêü).
¢ñá, ï ðßíáêáò äåí âñßóêåôáé óôçí êáíïíéêÞ ìïñöÞ Boyce-Codd áí êáé âñßóêå-
ôáé óôçí ôñßôç êáíïíéêÞ ìïñöÞ. ¸ôóé êáé óôçí ðåñßðôùóç áõôÞ ðñÝðåé íá áíôéìå-
ôùðßóïõìå ôá ãíùóôÜ ðñïâëÞìáôá ôùí áíùìáëéþí êáôÜ ôçí åéóáãùãÞ, äéáãñáöÞ
êáé åíçìÝñùóç ôùí äåäïìÝíùí. Ãéá ðáñÜäåéãìá, áí èÝëïõìå íá äéáãñÜøïõìå
ôçí ðëçñïöïñßá üôé Ýíáò öïéôçôÞò ðáñáêïëïõèåß Ýíá ìÜèçìá, ôüôå èá áðùëÝ-
óïõìå êáé ôçí ðëçñïöïñßá üôé ï áíôßóôïé÷ïò äéäÜóêùí äéäÜóêåé ôï óõãêåêñéìÝíï
ìÜèçìá. Ïìïßùò, ãéá íá åéóáãÜãïõìå ôçí ðëçñïöïñßá üôé Ýíáò äéäÜóêùí äéäÜ-
óêåé êÜðïéï ìÜèçìá, èá ðñÝðåé ïðùóäÞðïôå íá åéóá÷èåß êáé ç ðëçñïöïñßá åíüò
ôïõëÜ÷éóôïí öïéôçôÞ. Óõíåðþò, ðñÝðåé ï ðßíáêáò R íá äéáóðáóèåß óå äýï ðßíá-
êåò. Ïé åíáëëáêôéêÝò ëýóåéò ãéá ôç äéÜóðáóç ôïõ ðßíáêá R åßíáé ïé åîÞò ôñåéò:
Êáé ïé ôñåéò äéáóðÜóåéò ðÜó÷ïõí áðü ôï ßäéï ðñüâëçìá, äçëáäÞ ÷Üíïõí ôçí
åîÜñôçóç üíïìá öïéôçôÞ, áñéè ìáèÞìáôïò → äéäÜóêùí. Ç êáëýôåñç áðü ôéò ôñåéò
åíáëëáêôéêÝò ëýóåéò åßíáé ç ôñßôç ãéáôß ëüãïõò ðïõ èá åîçãçèïýí áìÝóùò óôçí
åðüìåíç ðáñÜãñáöï.
X Y Z X Y
Y Z
x1 y1 z1 x1 y1
y1 z1
x2 y1 z1 x2 y1
y1 z2
x3 y1 z2 x3 y1
Áí ôþñá ëÜâïõìå ôç öõóéêÞ óýíäåóç ôùí äýï ó÷Ýóåùí R1 êáé R2, ôüôå äåí
èá ðñïêýøåé ç áñ÷éêÞ óýíäåóç ó÷Ýóç áëëÜ ìßá ó÷Ýóç ìå åðéðëÝïí ðëåéÜäåò áðü
ôçí áñ÷éêÞ (ïé ôñåéò ôåëåõôáßåò ðëåéÜäåò óôïí ðßíáêá ôïõ Ó÷Þìáôïò 8.8). Ôï
ãåãïíüò üôé åìöáíßæïíôáé åðéðëÝïí ðëåéÜäåò äåí óçìáßíåé êÝñäïò áëëÜ áðþëåéá
ðëçñïöïñßáò. ÅðïìÝíùò ðñÝðåé íá õðÜñîåé ôñüðïò åëÝã÷ïõ áí ìßá äéÜóðáóç
åíüò ðßíáêá óå äýï Þ áðëïýóôåñïõò ðßíáêåò åðéôõã÷Üíåôáé ÷ùñßò áðþëåéåò. Óå
ìßá ôÝôïéá ðåñßðôùóç ëÝãåôáé üôé ðñïêýðôïõí ó÷Þìáôá ÷ùñßò áðþëåéåò (lossless
schemas) Þ üôé Ý÷ïõìå ìßá äéÜóðáóç ÷ùñßò áðþëåéåò êáôÜ ôç óýíäåóç (lossless-
join decomposition).
X Y Z
x1 y1 z1
x2 y1 z1
x3 y1 z2
x1 y1 z2
x2 y1 z2
x3 y1 z1
• XY ∩ Y Z → XY − Y Z ⇒ Y → X
• XY ∩ Y Z → Y Z − XY ⇒ Y → Z
Ùóôüóï, êáìßá áðü ôéò äýï áõôÝò åîáñôÞóåéò äåí áíÞêåé óôçí êëåéóôüôçôá F +
êáé óõíåðþò ôá ðáñáãüìåíá ó÷Þìáôá Ý÷ïõí áðþëåéåò. Ìðïñåß íá áðïäåé÷èåß ìå
âÜóç ôç ìÝèïäï áõôÞ üôé óùóôÞ äéÜóðáóç åßíáé ç åîÞò: R1(X, Y ) êáé R2(X, Z).
Áí ï áñ÷éêüò ðßíáêáò R, ãéá ôïí ïðïßï éó÷ýåé Ýíá óýíïëï åîáñôÞóåùí F ,
Ý÷åé äéáóðáóèåß óå k > 2 õðïðßíáêåò, R1 , R2 , . . . , Rk , ôüôå ÷ñçóéìïðïéåßôáé ç
ëåãüìåíç ìÝèïäïò ôïõ tableau ãéá íá äéáðéóôùèåß áí ç äéÜóðáóç Ý÷åé ãßíåé ÷ùñßò
áðþëåéåò [Aho 1979b]. Äçìéïõñãïýìå Ýíá äéóäéÜóôáôï ðßíáêá (ôáìðëþ), üðïõ ïé
óôÞëåò áíôéóôïé÷ïýí óôï óýíïëï ôùí ÷áñáêôçñéóôéêþí A1 , A2 , . . . , An ôçò ó÷Ýóçò
R, åíþ ïé ãñáììÝò áíôéóôïé÷ïýí óôéò ó÷Ýóåéò R1 , R2 , . . . , Rk . H èÝóç (i, j) ôïõ
ôáìðëþ ëáìâÜíåé ôçí ôéìÞ aj áí ôï ÷áñáêôçñéóôéêü Aj áíÞêåé óôç ó÷Ýóç Ri ,
áëëéþò ëáìâÜíåé ôçí ôéìÞ bij . Óôç óõíÝ÷åéá èåùñïýìå êõêëéêÜ ìßá-ðñïò-ìßá üëåò
ôéò åîáñôÞóåéò ìÝ÷ñé íá ìç ìðïñïýí íá ãßíïõí áëëáãÝò óôá ðåñéå÷üìåíá ôïõ
ôáìðëþ. ÄåäïìÝíçò ìßáò åîÜñôçóçò X → Y , áí ôáõôßæïíôáé ïé ôéìÝò óå êÜðïéá
êåëéÜ ôçò óôÞëçò X, ôüôå èá ðñÝðåé íá ôáõôßæïíôáé êáé ïé ôéìÝò ôùí áíôßóôïé÷ùí
êåëéþí óôç óôÞëç Y . ¸ôóé ðñïóðáèïýìå íá áíôéêáôáóôÞóïõìå ôéò ôéìÝò ôùí bij
ìå ai . Áí óôï ôÝëïò ôçò äéáäéêáóßáò õðÜñ÷åé Ýóôù êáé ìßá ãñáììÞ üðïõ üëá ôá
êåëéÜ Ý÷ïõí ôéìÝò aj (ãéá 1 ≤ j ≤ n), ôüôå ç äéÜóðáóç Ý÷åé ãßíåé ÷ùñßò áðþëåéåò.
Ãéá ðáñÜäåéãìá, Ýóôù ç ó÷Ýóç R(X, Y, Z, W ) êáé ôï óýíïëï ôùí åîáñôÞ-
óåùí F : X → Z, Y → Z, Z → W . Ç ó÷Ýóç R äéáóðÜôáé óôéò ó÷Ýóåéò:
R1(X, Y ), R2(Y, W ), R3(X, Y, Z). Ôï ôáìðëþ ðïõ ðñïêýðôåé óýìöùíá ìå ôçí
X Y Z W X Y Z W
R1(X, Y ) a1 a2 b13 b14 R1(X, Y ) a1 a2 a3 b14
R2(Y, W ) b21 a2 b23 a4 R2(Y, W ) b21 a2 b23 a4
R3(X, Y, Z) a1 a2 a3 b34 R3(X, Y, Z) a1 a2 a3 b34
(á) (â)
X Y Z W X Y Z W
R1(X, Y ) a1 a2 a3 b14 R1(X, Y ) a1 a2 a3 a4
R2(Y, W ) b21 a2 a3 a4 R2(Y, W ) b21 a2 a3 a4
R3(X, Y, Z) a1 a2 a3 b34 R3(X, Y, Z) a1 a2 a3 a4
(ã) (ä)
óôéò ðëåéïíüôéìåò éó÷ýåé Ýíá óýíïëï êáíüíùí ãéá ôçí ðáñáãùãÞ íÝùí ðëåéïíüôé-
ìùí åîáñôÞóåùí. ¸ôóé, áíáöÝñïíôáé ïé åîÞò êáíüíåò:
Ðáñáôçñïýìå üôé ðïëëïß áðü áõôïýò ôïõò êáíüíåò áðïôåëïýí Üìåóç ìåôáöïñÜ
áðü ôçí ðåñßðôùóç ôùí óõíáñôçóéáêþí åîáñôÞóåùí. Ùóôüóï, õðÜñ÷ïõí êáé ðïë-
ëïß äéáöïñåôéêïß êáíüíåò. Åðßóçò, èåùñïýíôáé ôåôñéììÝíïé ï áíáêëáóôéêüò, ï
óõãêïëëçôéêüò êáé ï óõìðëçñùìáôéêüò êáíüíáò.
êùäéêüò ãëþóóåò
åñãáæüìåíïõ ðñïãñáììáôéóìïý îÝíåò ãëþóóåò
1 C ÁããëéêÜ
1 C++ ÁããëéêÜ
1 C ÃáëëéêÜ
1 C++ ÃáëëéêÜ
2 Pascal ÉôáëéêÜ
2 Fortran ÉôáëéêÜ
3 Ada ÁããëéêÜ
3 Java ÁããëéêÜ
3 Cobol ÁããëéêÜ
3 C++ ÁããëéêÜ
• R1 ∩ R2 ³ R1 − R2
• R1 ∩ R2 ³ R2 − R1
êùäéêüò ãëþóóåò
åñãáæüìåíïõ ðñïãñáììáôéóìïý
êùäéêüò îÝíåò
1 C åñãáæüìåíïõ ãëþóóåò
1 C++
1 ÁããëéêÜ
2 Pascal
1 ÃáëëéêÜ
2 Fortran
1 ÃáëëéêÜ
3 Ada
2 ÉôáëéêÜ
3 Java
3 ÁããëéêÜ
3 Cobol
3 C++
ìÜèçìá öïéôçôÞò
ÂÜóåéò ÄåäïìÝíùí Âáóéëåßïõ
ÂÜóåéò ÄåäïìÝíùí ÂáóéëåéÜäçò
Åîüñõîç ÄåäïìÝíùí ÂáóéëåéÜäçò
ÄïìÝò ÄåäïìÝíùí ÂáóéëåéÜäçò
Åîüñõîç ÄåäïìÝíùí Âáóéëåßïõ
ÂÜóåéò ÄåäïìÝíùí ÂáóéëÜêçò
ÄïìÝò ÄåäïìÝíùí Âáóéëåßïõ
ÄïìÝò ÄåäïìÝíùí ÂáóéëÜêçò
8.4 Óýíïøç
Ç êáíïíéêïðïßçóç ôïõ ó÷Þìáôïò ôçò ÂÜóçò ÄåäïìÝíùí áðïôåëåß âáóéêü âÞìá
êáôÜ ôï ó÷åäéáóìü ìßáò âÜóçò. Êýñéïò óôü÷ïò ôçò êáíïíéêïðïßçóçò åßíáé ç
êáôÜñãçóç ôïõ ðëåïíáóìïý ôùí äåäïìÝíùí, ï ïðïßïò äçìéïõñãåß ðñïâëÞìáôá
êáôÜ ôéò åéóáãùãÝò, äéáãñáöÝò êáé åíçìåñþóåéò äåäïìÝíùí. ÅðéðëÝïí, áðáéôåß-
ôáé ðåñéóóüôåñïò ÷þñïò ãéá ôçí áðïèÞêåõóç ôùí äåäïìÝíùí.
Ç êáíïíéêïðïßçóç óôçñßæåôáé óôç èåùñßá óõíáñôçóéáêþí åîáñôÞóåùí. Ìßá
óõíáñôçóéáêÞ åîÜñôçóç óõìâïëßæåôáé ìå X → Y êáé äçëþíåé üôé ôï óýíïëï ÷áñá-
êôçñéóôéêþí Y åßíáé óõíáñôçóéáêÜ åîáñôþìåíï áðü ôï óýíïëï ÷áñáêôçñéóôéêþí
X. Áõôü óçìáßíåé üôé áí äýï ãñáììÝò ôïõ ðßíáêá Ý÷ïõí ßäéåò ôéìÝò ãéá ôá ÷á-
ñáêôçñéóôéêÜ ôïõ X, ôüôå ðñÝðåé íá Ý÷ïõí ßäéåò ôéìÝò êáé ãéá ôá ÷áñáêôçñéóôéêÜ
ôïõ Y . Ìå ôç âïÞèåéá ôùí êáíüíùí ðáñáãùãÞò óõíáñôçóéáêþí åîáñôÞóåùí
ìðïñïýìå íá ðáñÜãïõìå íÝåò óõíáñôçóéáêÝò åîáñôÞóåéò. Ôï óýíïëï üëùí ôùí
óõíáñôçóéáêþí åîáñôÞóåùí ðïõ ðáñÜãïíôáé áðü Ýíá áñ÷éêü óýíïëï åîáñôÞóåùí
F , ÷ñçóéìïðïéþíôáò ôïõò êáíüíåò ðáñáãùãÞò, óõìâïëßæåôáé ìå F + êáé êáëåßôáé
êëåéóôüôçôá ôùí óõíáñôçóéáêþí åîáñôÞóåùí. Ç äçìéïõñãßá ôçò êëåéóôüôçôáò
áõôÞò äåí åßíáé ðñáêôéêÜ åöéêôÞ. Ùóôüóï, ìðïñåß íá äéáðéóôùèåß ó÷åôéêÜ åýêïëá
áí ìßá åîÜñôçóç áíÞêåé óôï óýíïëï ôçò êëåéóôüôçôáò ìå ôç âïÞèåéá ôïõ óõíüëïõ
ôçò êëåéóôüôçôáò ôùí ÷áñáêôçñéóôéêþí.
Ïé êáíïíéêÝò ìïñöÝò ðñïêýðôïõí ìå äéáäï÷éêÝò äéáóðÜóåéò ôùí ðéíÜêùí ôçò
âÜóçò óå áðëïýóôåñïõò. Ç áðëïýóôåñç êáíïíéêÞ ìïñöÞ åßíáé ç ðñþôç êáíïíéêÞ
ìïñöÞ (1NF), åíþ ç ðÝìðôç êáíïíéêÞ ìïñöÞ (5NF) åßíáé ç ðëÝïí ðåñéïñéóôéêÞ.
Óôçí ðñÜîç, ïé ðßíáêåò êáíïíéêïðïéïýíôáé óõíÞèùò ìÝ÷ñé ôçí êáíïíéêÞ ìïñöÞ
Boyce-Codd (BCNF), åíþ ëéãüôåñï óõ÷íÜ áðáéôåßôáé ç êáíïíéêïðïßçóç óå áíþ-
ôåñåò êáíïíéêÝò ìïñöÝò ëüãù ýðáñîçò ðëåéïíüôéìùí åîáñôÞóåùí (ðïõ óõìâïëß-
æïíôáé ìå X ³ Y ) êáé åîáñôÞóåùí óýíäåóçò.
ÊáôÜ ôç äéÜóðáóç ôùí ó÷Ýóåùí óå áðëïýóôåñåò ìðïñåß íá áðùëåóèïýí óõ-
íáñôçóéáêÝò åîáñôÞóåéò. Ùóôüóï, ôï óçìáíôéêüôåñï åßíáé íá ìçí áðùëåóèïýí
äåäïìÝíá. Ãéá ôï óêïðü áõôü åöáñìüæïíôáé ìÝèïäïé ðáñáãùãÞò ó÷çìÜôùí ÷ùñßò
áðþëåéåò. ÔÝëïò, óçìåéþíåôáé üôé ç õðåñ-êáíïíéêïðïßçóç Ý÷åé ôï ìåéïíÝêôçìá üôé
óõ÷íÜ óå ðåñéðôþóåéò óýíèåôùí åñùôçìÜôùí ðñÝðåé íá åêôåëåóèïýí ÷ñïíïâüñåò
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 201
óõíäÝóåéò.
• XY → Z, Z → X ⇒ Z → Y
• X → Y, Y → Z ⇒ X → Y Z
• F = {X → Y, Y → Z, XY → Z, X → Y Z} êáé
G = {X → Y, Y → Z} ⇒ {G ⇒ F }
8.5. ÐïéÝò êáíïíéêÝò ìïñöÝò ãíùñßæåôå; ÐåñéãñÜøôå ôçí êáíïíéêÞ ìïñöÞ BCNF
êáé äþóôå Ýíá ðáñÜäåéãìá.
¸óôù åðßóçò üôé Ý÷ïõìå ôéò åîÞò ó÷Ýóåéò ðïõ âñßóêïíôáé óôçí ôñßôç êáíïíéêÞ
ìïñöÞ:
R1(ÁÁÔ, åîåéäßêåõóç, âáèìüò, êùäéêüò ó÷ïëåßïõ)
R2(ÁÁÔ, åîåéäßêåõóç, âáèìüò, üíïìá ó÷ïëåßïõ)
X Y Z W
1 1 1 1
2 1 1 1
3 2 2 2
4 3 2 3
5 4 3 3
6 4 3 4
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 203
X Y Z U V
a1 b1 c1 d1 e1
a1 b2 c1 d2 e1
a2 b1 c1 d1 e2
8.15. ÈåùñÞóôå ôá óôéãìéüôõðá ôùí ó÷Ýóåùí ôïõ Ó÷Þìáôïò 8.11. Åßíáé äõíáôüí ìå
óýíäåóç äýï äñüìùí íá äçìéïõñãÞóïõìå ìßá ó÷Ýóç ìå ôá ôñßá ÷áñáêôçñéóôéêÜ
ôïõ óôéãìéüôõðïõ ôïõ Ó÷Þìáôïò 8.10. ÁõôÞ ç óýíäåóç äýï äñüìùí ìðïñåß íá
õëïðïéçèåß ìå ôñåéò ôñüðïõò, äçëáäÞ ëáìâÜíïíôáò ôéò ôñåéò ó÷Ýóåéò áíÜ äýï. Íá
áðïäåé÷èåß üôé áõôïß ïé ôñåéò ôñüðïé èá äçìéïõñãÞóïõí åðéðëÝïí ðëåéÜäåò óå
ó÷Ýóç ìå ôï áñ÷éêü óôéãìéüôõðï.
9
Ç Ãëþóóá SQL
205
206 ÊåöÜëáéï 9. Ç Ãëþóóá SQL
• ÊÜèå ó÷åóéáêü óýóôçìá õðïóôçñßæåé ôçí SQL, ïðüôå ç äéáôýðùóç ôùí åñù-
ôçìÜôùí åßíáé áíåîÜñôçôç áðü ôï ÷ñçóéìïðïéïýìåíï ÓÄÂÄ.
Ç ãëþóóá SQL áðïôåëåß õëïðïßçóç ôçò ó÷åóéáêÞò Üëãåâñáò êáé ôïõ ó÷å-
óéáêïý ëïãéóìïý ðëåéÜäùí. Ôá äýï áõôÜ ìáèçìáôéêÜ åñãáëåßá Ý÷ïõí ìåëåôçèåß
óå ðñïçãïýìåíï êåöÜëáéï (âë. ÊåöÜëáéï 7). ¼ðùò êÜèå ãëþóóá ÂÜóåùí Äå-
äïìÝíùí (âë. ÊåöÜëáéï 3), ç SQL õðïäéáéñåßôáé óå äýï îå÷ùñéóôÝò ãëþóóåò: á)
ôç ãëþóóá ïñéóìïý äåäïìÝíùí (DDL), êáé â) ôç ãëþóóá ÷åéñéóìïý äåäïìÝíùí
(DML). Ç ðñþôç ÷ñçóéìïðïéåßôáé ãéá ôïí ïñéóìü ôïõ ó÷Þìáôïò ôçò ÂÄ, åíþ ç
äåýôåñç ãéá ôçí åéóáãùãÞ, äéáãñáöÞ, åíçìÝñùóç äåäïìÝíùí êáé äéáôýðùóç åñù-
ôçìÜôùí. Óôç óõíÝ÷åéá ðåñéãñÜöïõìå áíáëõôéêÜ ôç óýíôáîç êáé ÷ñÞóç ôçò SQL
DDL êáé ôçò SQL DML óýìöùíá ìå ôï ðñüôõðï SQL-92.
Ç SQL ÷ñçóéìïðïéåß ôïõò üñïõò ðßíáêáò (table), ãñáììÞ (row), êáé óôÞëç
(column), ïé ïðïßïé áíôéðñïóùðåýïõí ôéò Ýííïéåò ó÷Ýóç, ðëåéÜäá, êáé ÷áñáêôç-
ñéóôéêü áíôéóôïß÷ùò. Óçìåéþíåôáé üôé áí êáé ç SQL äåí äéá÷ùñßæåé ìåôáîý ðåæþí
êáé êåöáëáßùí ãñáììÜôùí, ÷ñçóéìïðïéïýìå êåöáëáßá ãñÜììáôá ãéá íá äéá÷ùñß-
óïõìå ôéò äåóìåõìÝíåò ëÝîåéò ôçò ãëþóóáò áðü ôá õðüëïéðá óôïé÷åßá. Ãéá ôá
ïíüìáôá ôùí ðéíÜêùí ÷ñçóéìïðïéïýìå ðëÜãéá ãñÜììáôá, ìå êåöáëáßï ôï ðñþôï
ãñÜììá, åíþ ãéá ôá ïíüìáôá ôùí óôçëþí ÷ñçóéìïðïéïýìå ðåæÜ ðëÜãéá ãñÜììáôá.
ÐïëëÜ áðü ôá ðáñáäåßãìáôá ðïõ ðáñïõóéÜæïíôáé, óôçñßæïíôáé óôï ó÷åóéáêü
ó÷Þìá ôçò ÂÄ ðïõ áöïñÜ óôçí çëåêôñïíéêÞ âéâëéïèÞêç ðïõ áíáðôý÷èçêå óôá
ÊåöÜëáéá 4 êáé 6. Ãéá ëüãïõò êáèáñÜ äéåõêüëõíóçò, ôï ó÷åóéáêü ó÷Þìá áðåé-
êïíßæåôáé óôï Ó÷Þìá 9.1.
Ó÷Þìá 9.1: Ó÷åóéáêü ó÷Þìá ôçò ÂÄ ôïõ Ó÷Þìáôïò 4.1 ìåôÜ ôç ìåôáôñïðÞ.
ïñéóìïý, ïé ïðïßïé óõíïøßæïíôáé óôïí Ðßíáêá 9.1 êáé ðåñéãñÜöïíôáé óôç óõíÝ-
÷åéá.
Ìßá ëïãéêÞ (BOOLEAN) ôéìÞ ìðïñåß íá åßíáé åßôå áëçèÞò (TRUE) åßôå øåõäÞò
(FALSE). Ç ôéìÞ ðïõ ÷ñçóéìïðïéåßôáé ãéá ôï TRUE åßíáé ìåãáëýôåñç ôçò ôéìÞò
ðïõ ÷ñçóéìïðïéåßôáé ãéá ôï FALSE, ïðüôå üëåò ïé ìåôáâëçôÝò ôýðïõ BOOLEAN
ìðïñïýí íá óõììåôÝ÷ïõí óå ôåëåóôÝò óýãêñéóçò.
Ôá äåäïìÝíá ÷áñáêôÞñùí (character data) áðïôåëïýíôáé áðü ìßá óåéñÜ ÷áñá-
êôÞñùí (string). Ï ôñüðïò äçìéïõñãßáò ôùí óåéñþí ÷áñáêôÞñùí åîáñôÜôáé áðü
ôï åêÜóôïôå ÓÄÂÄ. ÓõíÞèùò ïé ÷áñáêôÞñåò åßíáé ôýðïõ ASCII Þ EBCDIC. Ï
208 ÊåöÜëáéï 9. Ç Ãëþóóá SQL
¼ðùò êáé óôçí ðåñßðôùóç ôçò óåéñÜò ÷áñáêôÞñùí, õðÜñ÷åé ç äéÜêñéóç ìåôáîý
óåéñþí äõáäéêþí øçößùí óôáèåñïý êáé ìåôáâëçôïý ìÞêïõò.
Ï áñéèìçôéêüò ôýðïò äåäïìÝíùí ÷ñçóéìïðïéåßôáé ãéá ôïí ïñéóìü áñéèìþí.
×áñáêôçñßæåôáé áðü ôçí áêñßâåéá êáé ôçí êëßìáêá. Ç áêñßâåéá äßíåé ôï óõíïëéêü
ðëÞèïò ôùí øçößùí (ðñéí êáé ìåôÜ ôçí õðïäéáóôïëÞ). Ç êëßìáêá ïñßæåé ôï ðëÞèïò
ôùí øçößùí ìåôÜ ôçí õðïäéáóôïëÞ. Ï áêÝñáéïò ôýðïò äåäïìÝíùí åßíáé åéäéêÞ
ðåñßðôùóç ôïõ áñéèìçôéêïý ôýðïõ. Ç óýíôáîç Ý÷åé ùò åîÞò:
Ìå ôçí åíôïëÞ áõôÞ äçëþíïõìå üôé õðåýèõíïò ãéá ôç äéá÷åßñéóç ôïõ íÝïõ ó÷Þìáôïò
âÜóçò åßíáé ï ÷ñÞóôçò ðïõ áêïëïõèåß ôïí ðñïóäéïñéóìü AUTHORIZATION. Ãéá
ôçí êáôáóôñïöÞ åíüò ó÷Þìáôïò ÷ñçóéìïðïéåßôáé ç åíôïëÞ DROP SCHEMA üíïìá-
ó÷Þìáôïò. Ìå ôç ÷ñÞóç äéáöïñåôéêþí ó÷çìÜôùí, Ý÷ïõìå ôç äõíáôüôçôá íá
äéá÷ùñßóïõìå ôá äåäïìÝíá ôçò ÂÄ áíáëüãùò ìå ôï åßäïò ôùí äåäïìÝíùí ðïõ
áðïèçêåýïíôáé êáé áíáëüãùò ìå ôçí åöáñìïãÞ ðïõ ôá ÷ñçóéìïðïéåß.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 211
Ãéá êÜèå ìßá áðü ôéò óôÞëåò ôïõ ðßíáêá ðñÝðåé íá ðñïóäéïñéóèåß Ýíá üíïìá êáé
Ýíá ðåäßï ïñéóìïý áðü üðïõ ç óôÞëç ìðïñåß íá ëáìâÜíåé ôéìÝò. Äýï óôÞëåò ðñÝðåé
íá Ý÷ïõí äéáöïñåôéêÜ ïíüìáôá, åíþ ìðïñåß íá Ý÷ïõí ßäéï ðåäßï ïñéóìïý. Åðßóçò,
ìðïñïýìå íá ÷ñçóéìïðïéÞóïõìå ðåñéïñéóìïýò áêåñáéüôçôáò, ïé ïðïßïé åíéó÷ýïõí
ôçí ðïéüôçôá ôùí äåäïìÝíùí ôçò ÂÄ üðùò Ý÷åé ðåñéãñáöåß óôï ÊåöÜëáéï 6. Ç
êáôáóôñïöÞ ôïõ ðßíáêá ðñáãìáôïðïéåßôáé ìå ôçí åíôïëÞ DROP TABLE Ðßíáêáò.
Áò åîåôÜóïõìå ôçí åíôïëÞ êáôáóêåõÞò ôïõ ðßíáêá ÃíùóôéêÞ Ðåñéï÷Þ.
Áò åîåôÜóïõìå óôç óõíÝ÷åéá ôïí ôñüðï êáôáóêåõÞò ôïõ ðßíáêá ÐñáêôéêÜ Óõ-
íåäñßïõ, ï ïðïßïò ÷ñçóéìïðïéåß êáé Üëëïõò ðåñéïñéóìïýò áêåñáéüôçôáò.
• êáôÜñãçóç ðåñéïñéóìïý,
Ãéá ôçí êáôÜñãçóç åíüò ðßíáêá ÷ñçóéìïðïéåßôáé ç åíôïëÞ DROP TABLE. Ãéá ðáñÜ-
äåéãìá:
Ãéá ðáñÜäåéãìá, ìðïñïýìå íá ïñßóïõìå Ýíá íÝï ðåäßï ïñéóìïý ìå üíïìá Öýëï,
ôï ïðïßï íá äÝ÷åôáé ìüíï ôéò ôéìÝò "Á" (Üíäñáò) Þ "Ã" (ãõíáßêá).
214 ÊåöÜëáéï 9. Ç Ãëþóóá SQL
Ãéá ôçí êáôÜñãçóç åíüò ðåäßïõ ïñéóìïý ÷ñçóéìïðïéåßôáé ç åíôïëÞ DROP DO-
MAIN ùò åîÞò:
ÁðëÜ ÅñùôÞìáôá
×áñáêôçñßæïõìå Ýíá åñþôçìá ùò áðëü, áí áðáéôåßôáé íá ÷ñçóéìïðïéçèåß ìüíï
Ýíáò ðßíáêáò ãéá íá áðáíôçèåß. Óôç óõíÝ÷åéá äßíïíôáé ìåñéêÜ áðëÜ ðáñáäåßãìáôá
ìÝóù ôùí ïðïßùí ðáñïõóéÜæïíôáé ôá âáóéêÜ óôïé÷åßá ôçò äéáôýðùóçò åñùôçìÜ-
ôùí.
SELECT *
FROM ÃíùóôéêÞ Ðåñéï÷Þ;
Þ
SELECT êùäéêüò, ôßôëïò, áñéèìüò óõíäñïìçôþí
FROM ÃíùóôéêÞ Ðåñéï÷Þ;
Ìå ôï óýìâïëï "*" Þ ìå ôç ëÝîç ALL äçëþíïõìå üôé èÝëïõìå óôï áðïôÝëåóìá üëåò
ôéò óôÞëåò ôïõ ðßíáêá. ÅíáëëáêôéêÜ ìðïñïýìå íá ðáñáèÝóïõìå üëåò ôéò óôÞëåò,
êÜôé ðïõ äåí åßíáé éäéáßôåñá âïëéêü üôáí ï áñéèìüò ôùí óôçëþí åßíáé ìåãÜëïò.
Åñþôçìá 2: "Íá âñåèïýí üëïé ïé ôßôëïé ôùí ãíùóôéêþí ðåñéï÷þí ðïõ åßíáé áðï-
èçêåõìÝíïé óôç ÂÄ."
SELECT ôßôëïò
FROM ÃíùóôéêÞ Ðåñéï÷Þ;
SELECT êùäéêüò,üíïìá,ÁÐÊ
FROM ÓõíäñïìçôÞò
WHERE ÷þñá=‘ÅëëÜäá’
ORDER BY üíïìá, ÁÐÊ;
Åñþôçìá 5: "Íá âñåèïýí ïé êùäéêïß êáé ïé ôßôëïé ôùí Üñèñùí ðïõ Ý÷ïõí äçìï-
óéåõèåß êáé óå ðåñéïäéêü êáé óå ðñáêôéêÜ óõíåäñßïõ."
SELECT êùäéêüò,ôßôëïò
FROM ¢ñèñï
WHERE êùäéêüò_ðåñéïäéêïý IS NOT NULL AND
êùäéêüò_ðñáêôéêþí_óõíåäñßïõ IS NOT NULL;
Óôï ôåëåõôáßï åñþôçìá ðñïóÝîôå ôç ÷ñÞóç ôïõ IS NOT NULL. Áõôüò åßíáé
Ýíáò Ýîõðíïò ôñüðïò ãéá íá äéáðéóôþóïõìå áí ç ôéìÞ ìßáò óôÞëçò åßíáé NULL
Þ ü÷é. Ôïíßæåôáé üôé äåí ìðïñïýìå íá ÷ñçóéìïðïéÞóïõìå ôïõò ðáñáäïóéáêïýò
ôåëåóôÝò óýãêñéóçò óå ìßá ôéìÞ NULL (ð.÷., x = NULL, x <> NULL).
ÅñùôÞìáôá Óýíäåóçò
¼ðùò åßíáé ãíùóôü áðü ôç ó÷åóéáêÞ Üëãåâñá (âë. ÊåöÜëáéï 7), ç óýíäåóç
áöïñÜ óôï óõíäõáóìü äýï Þ ðåñéóóïôÝñùí ðéíÜêùí þóôå íá åîá÷èåß ôï æçôïý-
ìåíï áðïôÝëåóìá. Ôá åñùôÞìáôá ðïõ ðåñéÝ÷ïõí óýíäåóç åìöáíßæïíôáé ðïëý óõ-
÷íÜ, êáé áõôü óõìâáßíåé åðåéäÞ ìåôÜ ôç äéáäéêáóßá ôçò ìåôáôñïðÞò ôïõ ìïíôÝëïõ
ÏÓ óå ó÷åóéáêü (âë. ÊåöÜëáéï 5) êáé ôç äéáäéêáóßá ôçò êáíïíéêïðïßçóçò (âë.
ÊåöÜëáéï 8), ôá äåäïìÝíá âñßóêïíôáé äéÜóðáñôá óå ðïëëïýò ðßíáêåò ôçò ÂÄ.
Ôï åßäïò ôçò óýíäåóçò ïñßæåôáé óôï ôìÞìá WHERE2 ôïõ åñùôÞìáôïò, óôï ïðïßï
äçëþíïíôáé ïé óõíèÞêåò ðïõ ðñÝðåé íá éêáíïðïéïýíôáé.
SELECT ÓõíäñïìçôÞò.êùäéêüò,üíïìá,ôßôëïò
FROM ÓõíäñïìçôÞò,ÃíùóôéêÞ_Ðåñéï÷Þ,ÓõíäñïìÞ
WHERE ÓõíäñïìçôÞò.êùäéêüò=êùäéêüò_óõíäñïìçôÞ AND
êùäéêüò_ãíùóôéêÞò_ðåñéï÷Þò=ÃíùóôéêÞ_Ðåñéï÷Þ.êùäéêüò;
Åñþôçìá 7: "Íá âñåèïýí ïé ôßôëïé ôùí Üñèñùí êáé ôá ïíüìáôá ôùí óõããñáöÝùí
ðïõ ôá Ý÷ïõí óõããñÜøåé. Ôï áðïôÝëåóìá íá ôáîéíïìçèåß áëöáâçôéêÜ ùò ðñïò
ôïõò ôßôëïõò ôùí Üñèñùí"
SELECT ¢ñèñï.ôßôëïò,ÓõããñáöÝáò.üíïìá
FROM ¢ñèñï, ÓõããñáöÝáò, ÓõããñáöÞ_¢ñèñïõ
WHERE ¢ñèñï.êùäéêüò=ÓõããñáöÞ_¢ñèñïõ.êùäéêüò_Üñèñïõ AND
ÓõããñáöÞ_¢ñèñïõ.êùäéêüò_óõããñáöÝá=ÓõããñáöÝáò.êùäéêüò
ORDER BY ¢ñèñï.ôßôëïò;
Åñþôçìá 8: "Íá ðñïóäéïñéóèåß ï ôßôëïò êÜèå Üñèñïõ êáé ï ôßôëïò ôçò ãíùóôéêÞò
ðåñéï÷Þò üðïõ áíÞêåé."
SELECT ¢ñèñï.ôßôëïò,ÃíùóôéêÞ_Ðåñéï÷Þ.ôßôëïò
FROM ¢ñèñï,ÃíùóôéêÞ_Ðåñéï÷Þ
WHERE ÃíùóôéêÞ_Ðåñéï÷Þ.êùäéêüò=êùäéêüò_ãíùóôéêÞò_ðåñéï÷Þò;
SELECT ¢ñèñï.ôßôëïò,ÃíùóôéêÞ_Ðåñéï÷Þ.ôßôëïò
FROM ¢ñèñï JOIN ÃíùóôéêÞ_Ðåñéï÷Þ
ON ÃíùóôéêÞ_Ðåñéï÷Þ.êùäéêüò=êùäéêüò_ãíùóôéêÞò_ðåñéï÷Þò;
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 219
Óôç äåýôåñç äéáôýðùóç ãßíåôáé ÷ñÞóç ôçò åíôïëÞò ... JOIN ... ON ..., ç ïðïßá
åðéóôñÝöåé ùò áðïôÝëåóìá ôç öõóéêÞ óýíäåóç ôùí äýï ðéíÜêùí ùò ðñïò ôïí
êùäéêü ôçò ãíùóôéêÞò ðåñéï÷Þò. Óôç óõíÝ÷åéá, ôï ôìÞìá SELECT åðéëÝãåé ôéò
æçôïýìåíåò óôÞëåò. Áêüìç, ç SQL ðñïóöÝñåé ôéò åîÞò ôñåéò åíôïëÝò ãéá ôïí
õðïëïãéóìü ôçò åîùôåñéêÞò óýíäåóçò äýï ðéíÜêùí:
Åñþôçìá 9: "Íá ðñïóäéïñéóèïýí ïé ôßôëïé ôùí óõíåäñßùí êáé ïé ôßôëïé ôùí ðåñéï-
äéêþí."
SELECT óõíÝäñéï
FROM ÐñáêôéêÜ_Óõíåäñßïõ
UNION
SELECT ôßôëïò
FROM Ðåñéïäéêü;
Åñþôçìá 10: "Íá âñåèïýí (áí õðÜñ÷ïõí) óõíäñïìçôÝò ðïõ Ý÷ïõí ôï ßäéï üíïìá
ìå êÜðïéï óõããñáöÝá."
SELECT üíïìá
FROM ÓõíäñïìçôÞò
INTERSECT
SELECT üíïìá
FROM ÓõããñáöÝáò;
220 ÊåöÜëáéï 9. Ç Ãëþóóá SQL
Åñþôçìá 11: "Íá ðñïóäéïñéóèïýí ïé êùäéêïß êáé ïé ôßôëïé ôùí Üñèñùí ðïõ äåí
Ý÷ïõí äçìïóéåõèåß óå êÜðïéï ðåñéïäéêü."
SELECT êùäéêüò,ôßôëïò
FROM ¢ñèñï
EXCEPT
SELECT êùäéêüò,ôßôëïò
FROM ¢ñèñï
WHERE êùäéêüò_ðåñéïäéêïý IS NOT NULL;
Ôï ðñþôï õðïåñþôçìá åðéëÝãåé üëá ôá Üñèñá áðü ôïí ðßíáêá ¢ñèñï, åíþ ôï
äåýôåñï åðéëÝãåé ìüíï ôá Üñèñá ðïõ Ý÷ïõí äçìïóéåõèåß óå êÜðïéï ðåñéïäéêü.
Ç äéáöïñÜ ôùí äýï óõíüëùí äßíåé ôï æçôïýìåíï áðïôÝëåóìá. Ôï åñþôçìá áõôü
ìðïñåß åðßóçò íá äéáôõðùèåß ÷ùñßò íá ÷ñçóéìïðïéÞóïõìå ôçí åíôïëÞ EXCEPT,
ùò åîÞò:
SELECT êùäéêüò,ôßôëïò
FROM ¢ñèñï
WHERE êùäéêüò_ðåñéïäéêïý IS NULL;
Ìåôïíïìáóßá
Ç SQL äßíåé ôç äõíáôüôçôá íá ìåôïíïìÜóïõìå ìßá óôÞëç Þ ìßá Ýêöñáóç (êáô’ áíôé-
óôïé÷ßá ìå ôçí ðñÜîç ìåôïíïìáóßáò ôçò ó÷åóéáêÞò Üëãåâñáò). Ôá ïíüìáôá ôùí
óôçëþí ôïõ áðïôåëÝóìáôïò ðñïóäéïñßæïíôáé áðü ôï ôìÞìá SELECT ôïõ åñùôÞìá-
ôïò. ÈåùñÞóôå ôï åñþôçìá ðïõ õðïëïãßæåé ôï Üèñïéóìá ôùí óõíäñïìçôþí üëùí
ôùí ãíùóôéêþí ðåñéï÷þí:
Åñþôçìá 12: "Íá âñåèåß ôï Üèñïéóìá ôùí óõíäñïìçôþí ãéá üëåò ôéò ãíùóôéêÝò
ðåñéï÷Ýò."
Ôï áðïôÝëåóìá ôïõ åñùôÞìáôïò åßíáé Ýíáò ðßíáêáò ìå ìßá ãñáììÞ êáé ìßá óôÞëç ìå
üíïìá SUM(áñéèìüò óõíäñïìçôþí). Ðáñáôçñïýìå üôé ôï üíïìá ôçò óôÞëçò
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 221
Ç ëÝîç AS ìðïñåß íá åìöáíßæåôáé êáé óôï ôìÞìá FROM ôçò åíôïëÞò SELECT.
Óôçí ðåñßðôùóç áõôÞ ÷ñçóéìïðïéåßôáé ãéá ôç ìåôïíïìáóßá ðéíÜêùí. Ç éäéüôçôá
áõôÞ åßíáé éäéáßôåñá ÷ñÞóéìç áí ðñáãìáôïðïéïýíôáé ðñÜîåéò óýíäåóçò åíüò ðß-
íáêá ìå ôïí åáõôü ôïõ. ÈåùñÞóôå üôé æçôïýìå ôá æåýãç êùäéêþí ãíùóôéêþí ðå-
ñéï÷þí (êùäéêüòA, êùäéêüòB), Ýôóé þóôå ï áñéèìüò óõíäñïìçôþí ôçò ãíùóôéêÞò
ðåñéï÷Þò A íá åßíáé ìéêñüôåñïò ôçò Â.
Åñþôçìá 13: "Íá âñåèïýí ôá æåýãç êùäéêþí ãíùóôéêþí ðåñéï÷þí Ýôóé þóôå ï
áñéèìüò óõíäñïìçôþí ôçò ðñþôçò íá åßíáé ìéêñüôåñïò ôïõ áñéèìïý óõíäñïìçôþí
ôçò äåýôåñçò."
SELECT A.êùäéêüò AS êùäéêüòÁ, B.êùäéêüò AS êùäéêüòÂ
FROM ÃíùóôéêÞ_Ðåñéï÷Þ AS A, ÃíùóôéêÞ_Ðåñéï÷Þ AS B
WHERE A.áñéèìüò_óõíäñïìçôþí < B.áñéèìüò_óõíäñïìçôþí;
Åñþôçìá 14: "Íá âñåèåß ôï ðëÞèïò Üñèñùí ðïõ åßíáé êáôá÷ùñéóìÝíá óôç ÂÄ."
222 ÊåöÜëáéï 9. Ç Ãëþóóá SQL
SELECT COUNT(¢ñèñï.êùäéêüò)
FROM ¢ñèñï;
Åñþôçìá 15: "Íá âñåèåß ôï óýíïëï ôùí Üñèñùí ðïõ Ý÷åé ãñÜøåé ï óõããñáöÝáò
ìå êùäéêü 1."
Åñþôçìá 16: "Íá âñåèåß ôï ðëÞèïò ôùí Üñèñùí ðïõ Ý÷åé ãñÜøåé êÜèå óõã-
ãñáöÝáò."
êùäéêüò êùäéêüò
óõããñáöÝá Üñèñïõ êùäéêüò üíïìá ...
1 1 1 A. Guttman ...
1 2 2 D. Knuth ...
2 3 3 J. Gray ...
2 4 4 A. Corral ...
3 6
4 7 Ðßíáêáò ÓõããñáöÝáò
4 9
üíïìá áñéèìüò Üñèñùí
2 10
3 12 A. Guttman 2
3 14 D. Knuth 6
2 13 J. Gray 3
2 5 A. Corral 2
2 4 ÁðïôÝëåóìá åñùôÞìáôïò
Ðßíáêáò ÓõããñáöÞ ¢ñèñïõ
Ó÷Þìá 9.2: ÁðïôÝëåóìá åýñåóçò ôïõ ðëÞèïõò ôùí Üñèñùí áíÜ óõããñáöÝá.
Åñþôçìá 17: "Íá âñåèåß ôï ðëÞèïò ôùí Üñèñùí ðïõ Ý÷åé ãñÜøåé êÜèå óõã-
ãñáöÝáò ãéá ôïõò óõããñáöåßò ðïõ Ý÷ïõí ãñÜøåé ðåñéóóüôåñá áðü ôñßá Üñèñá."
SELECT *
FROM ÓõíäñïìçôÞò
WHERE üíïìá LIKE ‘\%üðïõëïò’;
ÕðïåñùôÞìáôá
¸íá åñþôçìá SQL ìðïñåß íá ðåñéëáìâÜíåé õðïåñùôÞìáôá ðïõ åìðåñéÝ÷ïíôáé
ôï Ýíá ìÝóá óôï Üëëï. Ôï áðïôÝëåóìá ôïõ åóùôåñéêïý õðïåñùôÞìáôïò ÷ñçóéìï-
ðïéåßôáé áðü ôï åîùôåñéêü õðïåñþôçìá. Ôï åóùôåñéêü õðïåñþôçìá ìðïñåß íá
åìöáíßæåôáé óôá ôìÞìáôá WHERE Þ HAVING ìßáò åíôïëÞò SQL3 .
Åñþôçìá 19: "Íá âñåèïýí ïé ôßôëïé ôùí ãíùóôéêþí ðåñéï÷þí ãéá ôéò ïðïßåò éó÷ýåé
üôé ï áñéèìüò óõíäñïìçôþí åßíáé ìåãáëýôåñïò áðü ôï ìÝóï üñï."
SELECT ôßôëïò
FROM ÃíùóôéêÞ_Ðåñéï÷Þ
WHERE áñéèìüò_óõíäñïìçôþí >
3
Óôç óõíÝ÷åéá èá åîåôÜóïõìå ôç ÷ñÞóç õðïåñùôçìÜôùí êáé óå åíôïëÝò INSERT, UPDATE
êáé DELETE.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 225
(SELECT AVG(áñéèìüò_óõíäñïìçôþí)
FROM ÃíùóôéêÞ_Ðåñéï÷Þ);
Ôï åóùôåñéêü õðïåñþôçìá åðéóôñÝöåé ìßá ìüíï ôéìÞ ðïõ åßíáé ï ìÝóïò üñïò ôïõ
ðëÞèïõò óõíäñïìçôþí ãéá üëåò ôéò ãíùóôéêÝò ðåñéï÷Ýò. Óôç óõíÝ÷åéá, ç ôéìÞ ôçò
óôÞëçò áñéèìüò óõíäñïìçôþí êÜèå ãñáììÞò ôïõ ðßíáêá óõãêñßíåôáé ìå ôï ìÝóï
üñï, êáé áí åßíáé ìåãáëýôåñç ôüôå óõìðåñéëáìâÜíåôáé óôï áðïôÝëåóìá, äéáöïñå-
ôéêÜ áðïññßðôåôáé.
Åñþôçìá 20: "Íá ðñïóäéïñéóèïýí ïé ôßôëïé ôùí ãíùóôéêþí ðåñéï÷þí üðïõ äåí
áíôéóôïé÷åß êÜðïéï Üñèñï."
SELECT ôßôëïò
FROM ÃíùóôéêÞ_Ðåñéï÷Þ
WHERE êùäéêüò NOT IN
(SELECT êùäéêüò_ãíùóôéêÞò_ðåñéï÷Þò
FROM ¢ñèñï);
Åñþôçìá 21: "Íá âñåèïýí ïé êùäéêïß ôùí óõããñáöÝùí ðïõ Ý÷ïõí Ýóôù êáé Ýíá
Üñèñï ðïõ Ý÷åé äçìïóéåõèåß êáé óå ðåñéïäéêü êáé óå ðñáêôéêÜ óõíåäñßïõ."
SELECT êùäéêüò_óõããñáöÝá
FROM ÓõããñáöÞ_¢ñèñïõ AS ÓÁ
WHERE EXISTS
(SELECT *
FROM ¢ñèñï
WHERE êùäéêüò=ÓÁ.êùäéêüò_Üñèñïõ AND
êùäéêüò_óõíåäñßïõ IS NOT NULL AND
êùäéêüò_ðåñéïäéêïý IS NOT NULL);
Åñþôçìá 22: "Íá âñåèïýí ïé ãíùóôéêÝò ðåñéï÷Ýò ðïõ Ý÷ïõí ìåãáëýôåñï áñéèìü
óõíäñïìçôþí áðü ôïõëÜ÷éóôïí ìßá Üëëç ãíùóôéêÞ ðåñéï÷Þ."
SELECT ôßôëïò
FROM ÃíùóôéêÞ_Ðåñéï÷Þ
WHERE áñéèìüò_óõíäñïìçôþí > SOME
(SELECT áñéèìüò_óõíäñïìçôþí
FROM ÃíùóôéêÞ_Ðåñéï÷Þ);
Åñþôçìá 23: "Íá âñåèïýí ïé ãíùóôéêÝò ðåñéï÷Ýò ðïõ Ý÷ïõí ìåãáëýôåñï áñéèìü
óõíäñïìçôþí áðü üëåò ôéò Üëëåò ãíùóôéêÝò ðåñéï÷Ýò."
SELECT ôßôëïò
FROM ÃíùóôéêÞ_Ðåñéï÷Þ
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 227
WHERE áñéèìüò_óõíäñïìçôþí>ALL
(SELECT áñéèìüò_óõíäñïìçôþí
FROM ÃíùóôéêÞ_Ðåñéï÷Þ);
Åñþôçìá 24: "Íá âñåèïýí ïé êùäéêïß ôùí óõããñáöÝùí êáé ôï óýíïëï ôùí Üñèñùí
ðïõ Ý÷ïõí ãñÜøåé, Ýôóé þóôå ï áñéèìüò ôùí Üñèñùí íá åßíáé ìåãáëýôåñïò áðü ôï
Ýíá äÝêáôï ôùí óõíïëéêþí äçìïóéåýóåùí."
SELECT êùäéêüò_óõããñáöÝá,
COUNT (êùäéêüò_Üñèñïõ) AS áñéèìüò_Üñèñùí
FROM ÓõããñáöÞ_¢ñèñïõ
GROUP BY êùäéêüò_óõããñáöÝá
HAVING áñéèìüò_Üñèñùí >
(SELECT COUNT(*)/10
FROM ÓõããñáöÞ_¢ñèñïõ);
Ôáîéíüìçóç ÁðïôåëåóìÜôùí
H SQL äßíåé ôç äõíáôüôçôá íá ôáîéíïìÞóïõìå ôá áðïôåëÝóìáôá êáôÜ áýîïõóá Þ
êáôÜ öèßíïõóá äéÜôáîç, áíáëüãùò ìå ôá ðåñéå÷üìåíá ìßáò ç ðåñéóóïôÝñùí óôç-
ëþí. Ç Ýêöñáóç ORDER BY ÷ñçóéìïðïéåßôáé ãéá ôï óêïðü áõôü.
Åñþôçìá 25: "Íá âñåèïýí üëåò ïé ãíùóôéêÝò ðåñéï÷Ýò êáé ôï ðëÞèïò óõíäñïìçôþí
ãéá áõôÝò ðïõ Ý÷ïõí ðåñéóóüôåñï áðü åêáôü óõíäñïìçôÝò êáé ôá áðïôåëÝóìáôá
íá äïèïýí óå áýîïõóá óåéñÜ ùò ðñïò ôïí ôßôëï."
SELECT ôßôëïò,áñéèìüò_óõíäñïìçôþí
FROM ÃíùóôéêÞ_Ðåñéï÷Þ
WHERE áñéèìüò_óõíäñïìçôþí > 100
ORDER BY ôßôëïò ASC;
Åñþôçìá 26: "Íá âñåèïýí üëåò ïé ãíùóôéêÝò ðåñéï÷Ýò êáé ôï ðëÞèïò óõíäñïìçôþí
ãéá áõôÝò ðïõ Ý÷ïõí ðåñéóóüôåñï áðü åêáôü óõíäñïìçôÝò êáé ôá áðïôåëÝóìáôá
íá äïèïýí óå öèßíïõóá óåéñÜ ùò ðñïò ôïí ôßôëï."
228 ÊåöÜëáéï 9. Ç Ãëþóóá SQL
SELECT ôßôëïò,áñéèìüò_óõíäñïìçôþí
FROM ÃíùóôéêÞ_Ðåñéï÷Þ
WHERE áñéèìüò_óõíäñïìçôþí > 100
ORDER BY ôßôëïò DESC;
Åñþôçìá 27: "Íá âñåèïýí üëåò ïé ãíùóôéêÝò ðåñéï÷Ýò êáé ôï ðëÞèïò óõíäñïìçôþí
ãéá áõôÝò ðïõ Ý÷ïõí ðåñéóóüôåñï áðü åêáôü óõíäñïìçôÝò êáé ôá áðïôåëÝóìáôá
íá äïèïýí óå áýîïõóá óåéñÜ ùò ðñïò ôï ðëÞèïò ôùí óõíäñïìçôþí. Óå ðåñßðôùóç
ðïõ õðÜñ÷ïõí ãíùóôéêÝò ðåñéï÷Ýò ìå ôï ßäéï ðëÞèïò óõíäñïìçôþí ç ôáîéíüìçóç
íá ðñáãìáôïðïéçèåß ùò ðñïò ôïí ôßôëï."
SELECT ôßôëïò,áñéèìüò_óõíäñïìçôþí
FROM ÃíùóôéêÞ_Ðåñéï÷Þ
WHERE áñéèìüò_óõíäñïìçôþí>100
ORDER BY áñéèìüò_óõíäñïìçôþí,ôßôëïò;
¢ëëá ÊáôçãïñÞìáôá
Ç SQL äßíåé ôç äõíáôüôçôá íá ÷ñçóéìïðïéÞóïõìå åíáëëáêôéêïýò ôñüðïõò óý-
íôáîçò ôçò óõíèÞêçò óôï ôìÞìá WHERE åíüò åñùôÞìáôïò. ¸íá ðïëý ÷ñÞóéìï
êáôçãüñçìá åßíáé ôï BETWEEN (êáé ôï NOT BETWEEN) ðïõ ÷ñçóéìïðïéåßôáé ãéá
íá åëÝãîïõìå áí ìßá ôéìÞ âñßóêåôáé ìÝóá óå êÜðïéï äéÜóôçìá ôéìþí. Óôí óõíÝ-
÷åéá äßíïõìå Ýíá ðáñÜäåéãìá ÷ñÞóçò ôïõ êáôçãïñÞìáôïò BETWEEN.
Åñþôçìá 28: "Íá âñåèïýí ïé ôßôëïé ôùí ãíùóôéêþí ðåñéï÷þí ãéá ôéò ïðïßåò ï
áñéèìüò óõíäñïìçôþí åßíáé ìåãáëýôåñïò Þ ßóïò áðü 10 êáé ìéêñüôåñïò Þ ßóïò
áðü 20."
SELECT ôßôëïò
FROM ÃíùóôéêÞ_Ðåñéï÷Þ
WHERE áñéèìüò_óõíäñïìçôþí>=10 AND
áñéèìüò_óõíäñïìçôþí<=20;
Ôá ïíüìáôá ôùí óôçëþí ðïõ ðñïóäéïñßæïíôáé áìÝóùò ìåôÜ ôï üíïìá ôïõ ðßíáêá
Ý÷ïõí Ýíá-ðñïò-Ýíá áíôéóôïé÷ßá ìå ôéò ôéìÝò ðïõ åéóÜãïõìå ìåôÜ ôç ëÝîç VAL-
UES. ¸÷ïõìå ôç äõíáôüôçôá íá åéóÜãïõìå óôïé÷åßá óå ïñéóìÝíåò ìüíï óôÞëåò
ôïõ ðßíáêá. Ïé õðüëïéðåò óôÞëåò áñ÷éêïðïéïýíôáé áíáëüãùò ìå ôçí ôéìÞ ðïõ
Ý÷åé ðñïóäéïñéóèåß êáôÜ ôç äçìéïõñãßá ôïõ ðßíáêá. Áí äåí Ý÷åé ðñïóäéïñéóèåß
êÜðïéá ôéìÞ, ôüôå ÷ñçóéìïðïéåßôáé ç êåíÞ ôéìÞ (NULL). Ðñéí ôçí åêôÝëåóç ôçò
åíôïëÞò INSERT åëÝã÷ïíôáé üëïé ïé ðåñéïñéóìïß áêåñáéüôçôáò, ïé ïðïßïé Ý÷ïõí
ïñéóèåß ãéá ôïí ðßíáêá. Áí äåí éêáíïðïéåßôáé êÜðïéïò ðåñéïñéóìüò, ôüôå ç åíôïëÞ
åéóáãùãÞò áðïôõã÷Üíåé. Áò åîåôÜóïõìå óôç óõíÝ÷åéá ìåñéêÜ ðáñáäåßãìáôá åé-
óáãùãÞò äåäïìÝíùí:
Ç ðñïçãïýìåíç åíôïëÞ åéóÜãåé óôïí ðßíáêá ÃíùóôéêÞ Ðåñéï÷Þ ìßá íÝá ãñáììÞ. Ç
óôÞëç êùäéêüò ðáßñíåé ôçí ôéìÞ 10, ç óôÞëç ôßôëïò ëáìâÜíåé ôçí ôéìÞ "ÄéáóôçìéêÞ
Ôå÷íïëïãßá" êáé ôÝëïò ç óôÞëç áñéèìüò óõíäñïìçôþí ëáìâÜíåé ôçí ôéìÞ 0. Áí
èÝëïõìå, ìðïñïýìå íá ïñßóïõìå äéáöïñåôéêÞ óåéñÜ åéóáãùãÞò ôéìþí óôç íÝá
óôÞëç ùò åîÞò:
ÐáñáôçñÞóôå üôé äåí Ý÷ïõìå äþóåé ôéìÞ ãéá ôç óôÞëç áñéèìüò óõíäñïìçôþí. Óôçí
ðåñßðôùóç áõôÞ, áí óôçí åíôïëÞ ïñéóìïý ôïõ ðßíáêá ÃíùóôéêÞ Ðåñéï÷Þ õðÜñ÷åé
áñ÷éêÞ ôéìÞ, ôüôå èá ÷ñçóéìïðïéçèåß ãéá ôçí áñ÷éêïðïßçóç. ÄéáöïñåôéêÜ, áñ÷é-
êïðïéåßôáé ìå ôçí êåíÞ ôéìÞ (NULL).
ÐïëëÝò öïñÝò ðáñáôçñåßôáé ç áíÜãêç íá ÷ñçóéìïðïéÞóïõìå Üëëïõò ðßíáêåò
ãéá íá åéóÜãïõìå ôéìÝò óå Ýíá íÝï ðßíáêá. Ðñïöáíþò, ïé åéóáãùãÝò óôï íÝï
ðßíáêá ìðïñïýí íá ãßíïõí ãñáììÞ-ðñïò-ãñáììÞ ÷ñçóéìïðïéþíôáò äéáöïñåôéêÝò
åíôïëÝò INSERT, üìùò êÜôé ôÝôïéï äåí åßíáé êïìøü, êáé åðéðëÝïí åðéâáñýíåé ôï
÷ñÞóôç. ÅíáëëáêôéêÜ, ç SQL äßíåé ôç äõíáôüôçôá íá ÷ñçóéìïðïéÞóïõìå õðïå-
ñùôÞìáôá SELECT ãéá ôçí åéóáãùãÞ äåäïìÝíùí óå Ýíáí ðßíáêá. ÈåùñÞóôå üôé
Ý÷ïõìå êáôáóêåõÜóåé ôïí ðßíáêá ¢ñèñï Ðåñéïäéêïý(êùäéêüò, ôßôëïò) ï ïðïßïò èá
áðïèçêåýåé ôá Üñèñá ðïõ Ý÷ïõí äçìïóéåõèåß ìüíï óå ðåñéïäéêÜ êáé ü÷é óå ðñá-
êôéêÜ óõíåäñßùí. Ìå ôçí áêüëïõèç åíôïëÞ INSERT ìðïñïýìå íá áíôéãñÜøïõìå
áðü ôïí ðßíáêá ¢ñèñï ìüíï ôéò ðëçñïöïñßåò ðïõ ìáò åíäéáöÝñïõí:
UPDATE üíïìá-ðßíáêá
SET (óôÞëç1=ôéìÞ1,óôÞëç2=ôéìÞ2, ...,óôÞëçN=ôéìÞN)
WHERE óõíèÞêç;
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 231
¸óôù üôé èÝëïõìå íá áëëÜîïõìå ôïí ôßôëï ôçò ãíùóôéêÞò ðåñéï÷Þò "Äéáóôç-
ìéêÞ Ôå÷íïëïãßá" óå "ÄéÜóôçìá". Ç áëëáãÞ ðñáãìáôïðïéåßôáé ìå ôçí åðüìåíç
åíôïëÞ åíçìÝñùóçò:
UPDATE ÃíùóôéêÞ_Ðåñéï÷Þ
SET (ôßôëïò=‘ÄéÜóôçìá’)
WHERE êùäéêüò=10;
Áðáéôåßôáé éäéáßôåñç ðñïóï÷Þ óôç óõíèÞêç ðïõ ðñÝðåé íá ïñßóïõìå óôï ôìÞìá
WHERE ôçò åíôïëÞò åíçìÝñùóçò. Áí èÝëïõìå íá åíçìåñùèïýí ôá äåäïìÝíá óå
ìßá ìüíï ãñáììÞ ôïõ ðßíáêá, ôüôå áðáñáßôçôá ðñÝðåé íá óõììåôÝ÷åé óôç óõíèÞêç
êÜðïéï êëåéäß ôïõ ðßíáêá. ÄéáöïñåôéêÜ, åíäÝ÷åôáé ç áëëáãÞ íá åðçñåÜóåé ðå-
ñéóóüôåñåò ãñáììÝò áëëïéþíïíôáò ôá äåäïìÝíá ôïõ ðßíáêá. Ãéá ðáñÜäåéãìá, ç
åðüìåíç åíôïëÞ åíçìÝñùóçò èá èÝóåé óå 0 ôç óôÞëç áñéèìüò óõíäñïìçôþí óå
üëåò ôéò ãñáììÝò ôïõ ðßíáêá!
UPDATE ÃíùóôéêÞ_Ðåñéï÷Þ
SET (áñéèìüò_óõíäñïìçôþí=0);
Óôï ôìÞìá WHERE, ðñïóäéïñßæåôáé ç óõíèÞêç ðïõ ðñÝðåé íá éêáíïðïéåßôáé áðü ôéò
ãñáììÝò ðïõ ðñüêåéôáé íá äéáãñáöïýí. Áí äåí õðÜñ÷åé óõíèÞêç, äéáãñÜöïíôáé
üëåò ïé ãñáììÝò ôïõ ðßíáêá. Áò åîåôÜóïõìå ìåñéêÜ ðáñáäåßãìáôá äéáãñáöÞò
äåäïìÝíùí:
Ç ðñþôç åíôïëÞ äéáãñÜöåé üëåò ôéò ãñáììÝò ôïõ ðßíáêá ¢ñèñï. Ç äåýôåñç åíôïëÞ
äéáãñÜöåé üëåò ôéò ãíùóôéêÝò ðåñéï÷Ýò ãéá ôéò ïðïßåò äåí õðÜñ÷åé óõíäñïìçôÞò
êáé äåí õðÜñ÷ïõí Üñèñá ðïõ íá áíÞêïõí óå áõôÝò.
232 ÊåöÜëáéï 9. Ç Ãëþóóá SQL
Ìßá üøç óôçñßæåôáé óå ðßíáêåò âÜóçò, ïé ïðïßïé óõììåôÝ÷ïõí óôïí ïñéóìü ôçò
üøçò áí êÜðïéá áðü ôéò óôÞëåò åìöáíßæåôáé óôï ôìÞìá SELECT ôïõ õðïåñùôÞìá-
ôïò SQL. ¸óôù üôé áðáéôåßôáé ï ïñéóìüò ìßáò üøçò ðïõ óôçñßæåôáé óôïõò ðßíáêåò
Ðåñéïäéêü êáé ÐñáêôéêÜ Óõíåäñßïõ êáé ðåñéÝ÷åé ôïõò ôßôëïõò ôùí ðåñéïäéêþí êáé
ôùí óõíåäñßùí ðïõ åßíáé êáôá÷ùñéóìÝíá óôç ÂÄ. Ç åíôïëÞ êáôáóêåõÞò ôçò üøçò
Ý÷åé ùò åîÞò:
Ìßá üøç äåí äéáöÝñåé ùò ðñïò ôç ëåéôïõñãéêüôçôá áðü Ýíáí êáíïíéêü ðßíáêá
âÜóçò. Ùóôüóï, ç ÷ñÞóç üøçò óå åíôïëÝò INSERT, UPDATE êáé DELETE ðïëëÝò
öïñÝò äçìéïõñãåß ðñïâëÞìáôá. Ãéá ðáñÜäåéãìá, áí ÷ñçóéìïðïéÞóïõìå ôçí üøç
Ïíüìáôá Ðåñéïäéêþí Óõíåäñßùí ãéá íá åéóÜãïõìå ìßá íÝá ãñáììÞ, ôüôå èá ðñÝðåé
íá åíçìåñùèïýí ïé âáóéêïß ðßíáêåò Ðåñéïäéêü êáé ÐñáêôéêÜ Óõíåäñßïõ. ¼ìùò ç
üøç Ý÷åé ùò óôÞëåò ìüíï ôïõò ôßôëïõò ðåñéïäéêþí êáé óõíåäñßùí, ìå áðïôÝëåóìá
ïé õðüëïéðåò óôÞëåò ôùí âáóéêþí ðéíÜêùí íá ðñÝðåé íá óõìðëçñùèïýí ìå êåíÝò
ôéìÝò. Áí ôï ãåãïíüò áõôü äåí Ýñ÷åôáé óå óýãêñïõóç ìå êÜðïéïí ðåñéïñéóìü
áêåñáéüôçôáò, ôüôå äåí õðÜñ÷åé ðñüâëçìá. Áí éó÷ýåé ôï áíôßèåôï, ôüôå ç åéóáãùãÞ
èá åßíáé áíåðéôõ÷Þò. Ôá ðñïâëÞìáôá ðïõ äçìéïõñãïýí ïé üøåéò ïäÞãçóáí ôïõò
êáôáóêåõáóôÝò ÓÄÂÄ åßôå óôçí áðáãüñåõóç ÷ñÞóçò üøçò óå åíôïëÝò INSERT,
UPDATE êáé DELETE, åßôå ôçí ðåñéïñéóìÝíç ÷ñÞóç óå áõôÝò ôéò åíôïëÝò õðü
ðñïûðïèÝóåéò.
Ãéá ôçí êáôÜñãçóç ìßáò üøçò ÷ñçóéìïðïéåßôáé ç åíôïëÞ DROP VIEW:
9.5 Óýíïøç
Ç SQL (structured query language) ðñïôõðïðïéÞèçêå ãéá ðñþôç öïñÜ 1986 êáé
åßíáé ç äçìïöéëÝóôåñç ãëþóóá ÂÜóåùí ÄåäïìÝíùí. Ç SQL åßíáé âáóéóìÝíç
óôç ó÷åóéáêÞ Üëãåâñá êáé ôï ó÷åóéáêü ëïãéóìü ðëåéÜäùí êáé äéá÷ùñßæåôáé óôç
ãëþóóá ïñéóìïý äåäïìÝíùí êáé ôç ãëþóóá ÷åéñéóìïý äåäïìÝíùí. Ôá âáóéêüôåñá
ðëåïíåêôÞìáôá ôçò ãëþóóáò åßíáé:
9.2. ÁíáöÝñåôå ôïõò ôýðïõò äåäïìÝíùí ôçò SQL ðïõ ãíùñßæåôå êáé ðåñéãñÜøôå
ôç äéáöïñÜ ìåôáîý ôùí ôýðùí CHAR êáé VARCHAR.
• Äþóôå ôçí åíôïëÞ SQL ãéá ôçí êáôáóêåõÞ ôïõ ðßíáêá, åðéëÝãïíôáò ôïõò
ôýðïõò äåäïìÝíùí ôùí ÷áñáêôçñéóôéêþí.
• ×ñçóéìïðïéÞóôå åíôïëÝò SQL ãéá ôçí åéóáãùãÞ ôùí åããñáöþí: (1, "Ãéþñ-
ãïò", "Èåóóáëïíßêç"), (2, "Ìáñßá", "ÁèÞíá") êáé (3, "Êþóôáò", "×áíéÜ").
• σA=143 (R)
• S×R
Íá äïèïýí åêöñÜóåéò ôçò ãëþóóáò SQL ãéá êÜèå Ýíá áðü ôá åîÞò åñùôÞìáôá:
• Íá âñåèïýí ôá ïíüìáôá ôùí õðáëëÞëùí ðïõ åñãÜæïíôáé óôçí åôáéñåßá
"COMPANY S.A."
• Íá âñåèïýí ôá ïíüìáôá ôùí õðáëëÞëùí ðïõ äéáìÝíïõí óôçí ßäéá ðüëç üðïõ
âñßóêåôáé êáé ç åôáéñåßá üðïõ åñãÜæïíôáé.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 235
• Äéáôõðþóôå óå SQL Ýíá åñþôçìá ðïõ áðáéôåß ôç ÷ñÞóç üëùí ôùí ðéíÜêùí
ôçò ÂÜóçò ÄåäïìÝíùí.
9.8. ×ñçóéìïðïéþíôáò ôïí ðßíáêá ¢ñèñï íá ïñßóåôå ìßá üøç ç ïðïßá ðáñïõóéÜ-
æåé ôïõò êùäéêïýò êáé ôïõò ôßôëïõò ôùí Üñèñùí ðïõ Ý÷ïõí äçìïóéåõèåß óå êÜðïéï
ðåñéïäéêü áëëÜ ü÷é êáé óå ðñáêôéêÜ óõíåäñßïõ.
9.9. ×ñçóéìïðïéþíôáò ôïõò ðßíáêåò ÓõããñáöÞ ¢ñèñïõ êáé ¢ñèñï íá ïñßóåôå ìßá
üøç ç ïðïßá èá ðåñéÝ÷åé ôéò áêüëïõèåò óôÞëåò: ôïí êùäéêü êáé ôï üíïìá ôïõ êÜèå
óõããñáöÝá, ôï ðëÞèïò Üñèñùí óå ðåñéïäéêÜ êáé ôï ðëÞèïò Üñèñùí óå ðñáêôéêÜ
óõíåäñßùí.
237
238 ÊåöÜëáéï 10. Ïñéóìüò êáé ×åéñéóìüò ÄåäïìÝíùí óå MSSQLS-2000
êùäéêüò êùäéêüò
êùäéêüò üíïìá çèïðïéïý ôáéíßáò
1 Nicole Kidman 1 1
2 Jodie Foster 2 3
3 Bruce Willis 3 2
4 Robert de Niro 3 5
5 Charles Grodin 4 4
6 ÈáíÜóçò ÂÝããïò 5 4
7 ËÜìðñïò ÊùíóôáíôÜñáò 6 7
7 6
Çèïðïéüò
Óõììåôï÷Þ
ðëÝïí, ðñïóöÝñåé Ýíá óýíïëï íÝùí ôýðùí äåäïìÝíùí ãéá ìåãáëýôåñç åõêïëßá
ôïõ ó÷åäéáóôÞ ôçò ÂÜóçò ÄåäïìÝíùí. Ï Ðßíáêáò 10.1 óõíïøßæåé ôïõò ôýðïõò
äåäïìÝíùí ðïõ åßíáé äéáèÝóéìïé ùò ðåäßá ïñéóìïý ôùí óôçëþí åíüò ðßíáêá óôïí
MSSQLS-2000.
alyzer. Ç åêêßíçóç ôïõ Query Analyzer ãßíåôáé åßôå ìÝóù ôïõ Enterprise Manager
åßôå áð’ åõèåßáò áðü ôï ëåéôïõñãéêü óýóôçìá, êáé óõãêåêñéìÝíá áðü ôïí êáôÜëïãï
üðïõ Ý÷ïõí åãêáôáóôáèåß ïé åöáñìïãÝò ôïõ MSSQLS-2000. Óçìåéþíåôáé üôé ðñéí
áðü ôçí áðïóôïëÞ åíôïëþí ðñïò ôï óýóôçìá ðñÝðåé áðáñáéôÞôùò íá äçëþóïõìå
üôé èá ÷ñçóéìïðïéÞóïõìå ôç ÂÜóç ÄåäïìÝíùí movies-db ùò ôçí ôñÝ÷ïõóá âÜóç.
Áðü ôï ìåíïý åðéëïãþí ôïõ Query Analyzer åðéëÝãïõìå ôçí êáôçãïñßá "Query"
êáé óôç óõíÝ÷åéá "Change Database". ÌåôÜ áðü ôçí áëëáãÞ ôçò ôñÝ÷ïõóáò âÜ-
óçò, üëåò ïé åíôïëÝò ïñéóìïý êáé ÷åéñéóìïý äåäïìÝíùí áðåõèýíïíôáé óôç ÂÜóç
ÄåäïìÝíùí movies-db.
Ãéá ôç äçìéïõñãßá íÝùí ðéíÜêùí ÷ñçóéìïðïéïýìå ôçí åíôïëÞ CREATE TABLE.
Ç åíôïëÞ ðïõ ðñÝðåé íá äþóïõìå ãéá ôçí êáôáóêåõÞ ôïõ ðßíáêá Ôáéíßá åßíáé:
Óôï Ó÷Þìá 10.3 ðáñïõóéÜæåôáé ç åêôÝëåóç ôçò åíôïëÞò êáôáóêåõÞò íÝïõ ðß-
Ó÷Þìá 10.3: Äçìéïõñãßá ôïõ ðßíáêá Ôáéíßá ìÝóù T-SQL óôïí Query Analyzer.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 241
íáêá ìå ôç âïÞèåéá ôïõ Query Analyzer. ÌåôÜ ôçí åðéôõ÷Þ åêôÝëåóç ôçò åíôïëÞò
ëáìâÜíïõìå ôï ìÞíõìá "The command(s) completed successfully". ÅðéôñÝðåôáé ç
äéáôýðùóç ðïëëþí åíôïëþí ìáæß. Ï äéá÷ùñéóìüò ôùí åíôïëþí ãßíåôáé ìå ôç ÷ñÞóç
ôïõ ÷áñáêôÞñá ";" óôï ôÝëïò êÜèå åíôïëÞò.
ÌåôÜ ôçí êáôáóêåõÞ åíüò ðßíáêá Ý÷ïõìå ôç äõíáôüôçôá íá ðñïóèÝóïõìå, íá
áöáéñÝóïõìå Þ íá ìåôáâÜëïõìå ôï ðåäßï ïñéóìïý ìßáò óôÞëçò, ÷ùñßò íá áðáé-
ôåßôáé ç åê íÝïõ êáôáóêåõÞ ôïõ ðßíáêá. Ïé ëåéôïõñãßåò áõôÝò åßíáé äéáèÝóéìåò
åßôå ìÝóá áðü ôï åñãáëåßï ó÷åäéáóìïý ðéíÜêùí ôïõ Enterprise Manager, åßôå
÷ñçóéìïðïéþíôáò åíôïëÝò T-SQL óôïí Query Analyzer. Óôç äåýôåñç ðåñßðôùóç
÷ñçóéìïðïéåßôáé ç åíôïëÞ ALTER TABLE, óýìöùíá ìå üóá Ý÷ïõìå óõæçôÞóåé óôï
ÊåöÜëáéï 9.
• NOT NULL: ïñßæåé üôé óôç óõãêåêñéìÝíç óôÞëç äåí åðéôñÝðïíôáé êåíÝò ôéìÝò.
• FOREIGN KEY: äçëþíåé üôé ç óõãêåêñéìÝíç óôÞëç åßíáé îÝíï êëåéäß ãéá ôïí
ðßíáêá.
• UNIQUE: ïñßæåé üôé äåí åßíáé äõíáôüí íá õðÜñ÷ïõí äýï ßäéåò ôéìÝò ãéá ôç
óõãêåêñéìÝíç óôÞëç.
• DEFAULT: ïñßæåé ðïéÜ ôéìÞ èá Ý÷åé ç óôÞëç óå ðåñßðôùóç ðïõ äåí ðñïó-
äéïñéóèåß êÜðïéá ôéìÞ êáôÜ ôçí åéóáãùãÞ ìßáò ãñáììÞò óôïí ðßíáêá.
Nicole Kidman
Jodie Foster
Bruce Willis
Robert DeNiro
Charles Grodin
Θανάσης Βέγγος
Λάµπρος Κωνσταντάρας
Ó÷Þìá 10.4: ÅìöÜíéóç äåäïìÝíùí ôïõ ðßíáêá Çèïðïéüò óôïí Enterprise Manager.
T-SQL ìå ôéò åíôïëÝò INSERT, DELETE êáé UPDATE áíôéóôïß÷ùò. Ç óýíôáîç ôùí
åíôïëþí áõôþí áêïëïõèåß ôï ðñüôõðï SQL-92 (âë. ÊåöÜëáéï 9). Ç åéóáãùãÞ
ôùí ôñéþí ðñþôùí ãñáììþí ôïõ ðßíáêá Çèïðïéüò ãßíåôáé ìå ôçí åêôÝëåóç ôùí
åðüìåíùí åíôïëþí:
UPDATE Çèïðïéüò
SET üíïìá=‘Tom Cruse’ WHERE êùäéêüò=1;
ìåôáâÜëëïõìå ôïí ïñéóìü ôùí óôçëþí ôùí ðéíÜêùí êáé íá äéá÷åéñéæüìáóôå ôïõò
ðåñéïñéóìïýò áêåñáéüôçôáò. Ïé ìåôáâïëÝò åöáñìüæïíôáé Üìåóá óôïõò ðßíáêåò
246 ÊåöÜëáéï 10. Ïñéóìüò êáé ×åéñéóìüò ÄåäïìÝíùí óå MSSQLS-2000
Äéáôýðùóç T-SQL:
SELECT *
FROM Ôáéíßá
WHERE DVD>3;
ÁðÜíôçóç ÓõóôÞìáôïò:
Äéáôýðùóç T-SQL:
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 247
SELECT êùäéêüò,ôßôëïò
FROM Ôáéíßá
WHERE DVD>=2 AND VHS<=3;
ÁðÜíôçóç ÓõóôÞìáôïò:
Äéáôýðùóç T-SQL:
SELECT üíïìá
FROM Çèïðïéüò;
ÁðÜíôçóç ÓõóôÞìáôïò:
Äéáôýðùóç T-SQL:
SELECT üíïìá,ôßôëïò
FROM Çèïðïéüò,Ôáéíßá,Óõììåôï÷Þ
WHERE Çèïðïéüò.êùäéêüò=Óõììåôï÷Þ.êùäéêüò_çèïðïéïý AND
Ôáéíßá.êùäéêüò=Óõììåôï÷Þ.êùäéêüò_ôáéíßáò;
Óçìåéþíåôáé üôé åðåéäÞ ç ÷ñÞóç ôùí óôçëþí üíïìá êáé ôßôëïò äåí äçìéïõñ-
ãåß óýã÷õóç, äåí åßíáé áðáñáßôçôï íá äçëþóïõìå êáé ôïí ðßíáêá óôï ôìÞìá
248 ÊåöÜëáéï 10. Ïñéóìüò êáé ×åéñéóìüò ÄåäïìÝíùí óå MSSQLS-2000
ÁðÜíôçóç ÓõóôÞìáôïò:
5. Åñþôçìá: íá âñåèåß ôï óýíïëï ôùí áíôéãñÜöùí DVD êáé VHS ãéá üëåò
ôéò ôáéíßåò óõíïëéêÜ.
Äéáôýðùóç T-SQL:
ÁðÜíôçóç ÓõóôÞìáôïò:
ÓõíÜñôçóç ÐåñéãñáöÞ
AVG ìÝóïò üñïò ôùí ôéìþí ìßáò óôÞëçò Þ áñéèìçôéêÞò Ýêöñáóçò
MAX ìÝãéóôç ôéìÞ óôÞëçò Þ áñéèìçôéêÞò Ýêöñáóçò
MIN åëÜ÷éóôç ôéìÞ óôÞëçò Þ áñéèìçôéêÞò Ýêöñáóçò
SUM Üèñïéóìá ôéìþí óôÞëçò Þ áñéèìçôéêÞò Ýêöñáóçò
COUNT ðëÞèïò ôéìþí
ÓõíÜñôçóç ÐåñéãñáöÞ
ABS(n) áðüëõôç ôéìÞ ôïõ áñéèìïý n
ACOS(n) ôüîï óõíçìßôïíïõ n
ASIN(n) ôüîï çìéôüíïõ n
ATAN(n) ôüîï åöáðôïìÝíçò n
ATAN2(n,m) ôüîï åöáðôïìÝíçò ôïõ n/m
CEILING(n) åðéóôñÝöåé ôï ìéêñüôåñï áêÝñáéï ðïõ åßíáé ìåãáëýôåñïò ôïõ n
COS(n) óõíçìßôïíï ôçò ãùíßáò n
COT(n) óõíåöáðôïìÝíç ôçò ãùíßáò n
DEGREES(n) ìåôáôñÝðåé ôïí áñéèìü n óå ìïßñåò
EXP(n) õðïëïãéóìüò ôçò Ýêöñáóçò en
FLOOR(n) åðéóôñÝöåé ôï ìåãáëýôåñï áêÝñáéï ðïõ åßíáé ìéêñüôåñïò ôïõ n
LOG(n) öõóéêüò ëïãÜñéèìïò ôïõ n
LOG10(n) ëïãÜñéèìïò ìå âÜóç 10 ôïõ n
PI() åðéóôñÝöåé ôçí ôéìÞ ôïõ áñéèìïý π (3.14...)
POWER(x,y) õðïëïãéóìüò ôçò Ýêöñáóçò xy
RADIAN(n) ìåôáôñïðÞ ôïõ áñéèìïý n óå áêôßíéá (RAD)
RAND åðéóôñÝöåé Ýíáí ôõ÷áßï áñéèìü ìåôáîý 0 êáé 1
ROUND(n,p) óôñïããýëåõóç ôïõ áñéèìïý n ÷ñçóéìïðïéþíôáò áêñßâåéá p
ROWCOUNT åðéóôñïöÞ ôïõ áñéèìïý ôùí ãñáììþí ðïõ Ý÷ïõí åðçñåáóèåß
áðü ôçí ôåëåõôáßá ðñüôáóç T-SQL ðïõ åêôåëÝóôçêå
SIGN(n) åðéóôñÝöåé ôï ðñüóçìï ôïõ áñéèìïý n ùò áñéèìü:
-1 ãéá áñíçôéêÞ ôéìÞ, +1 ãéá èåôéêÞ ôéìÞ êáé 0 ãéá ìçäåíéêÞ ôéìÞ
SIN(n) õðïëïãéóìüò çìéôüíïõ ôïõ n
SQRT(n) õðïëïãéóìüò ôåôñáãùíéêÞò ñßæáò ôïõ n
TAN(n) åöáðôïìÝíç ãùíßáò n
ÓõíÜñôçóç ÐåñéãñáöÞ
ASCII(c) ìåôáôñïðÞ ôïõ ÷áñáêôÞñá c óôïí éóïäýíáìï
äåêáäéêü êùäéêü ASCII
CAST(a AS ôýðïò[(ìÞêïò)]) ìåôáôñïðÞ ôçò Ýêöñáóçò a óôïí ôýðï
äåäïìÝíùí ôýðïò
CHAR(n) ìåôáôñïðÞ ôïõ êþäéêá ASCII n óôïí
éóïäýíáìï ÷áñáêôÞñá
CONVERT(ôýðïò[(ìÞêïò)],a) éóïäýíáìç ìå ôçí CAST ìå äéáöïñåôéêÞ
äéáôýðùóç
CHARINDEX(s1,s2) åðéóôñÝöåé ôçí áñ÷éêÞ èÝóç üðïõ ç
óõìâïëïóåéñÜ s1 åìöáíßæåôáé ìÝóá óôçí s2
DIFFERENCE(s1,s2) åðéóôñÝöåé ôç äéáöïñÜ ôùí ôéìþí SOUNDEX
ôùí óõìâïëïóåéñþí s1 êáé s2
LOWER(s) ìåôáôñÝðåé üëá ôá êåöáëáßá ãñÜììáôá ôçò
óõìâïëïóåéñÜò s óå ðåæÜ
LTRIM(s) êáôáñãåß ôá áñ÷éêÜ êåíÜ äéáóôÞìáôá ôçò
óõìâïëïóåéñÜò s
NEWID() äçìéïõñãåß Ýíá ìïíáäéêü áñéèìü ôáõôüôçôáò
ìåãÝèïõò 16 bytes ìå óêïðü ôçí áðïèÞêåõóç
ìßáò ôéìÞò ìå ôýðï UNIQUEIDENTIFIER
PATINDEX(s,Ýêöñáóç) åðéóôñÝöåé ôçí áñ÷éêÞ èÝóç ôçò s óôçí
Ýêöñáóç Ýêöñáóç
REPLICATE(s,i) åðáíáëáìâÜíåé ôç óõìâïëïóåéñÜ s i öïñÝò
REVERSE(s) åðéóôñÝöåé ôç óõìâïëïóåéñÜ s ìå áíôßóôñïöç
óåéñÜ ÷áñáêôÞñùí
RIGHT(s,ìÞêïò) åðéóôñÝöåé ôïõò ôåëåõôáßïõò ÷áñáêôÞñåò ôçò
óõìâïëïóåéñÜò s
RTRIM(s) êáôáñãåß ôá ôåëéêÜ êåíÜ äéáóôÞìáôá ôçò
óõìâïëïóåéñÜò s
SOUNDEX(a) åðéóôñÝöåé Ýíáí êùäéêü SOUNDEX ôåóóÜñùí
÷áñáêôÞñùí ãéá íá êáèïñßóåé ôçí ïìïéüôçôá
áíÜìåóá óå äýï óõìâïëïóåéñÝò
SPACE(ìÞêïò) åðéóôñÝöåé ìßá óõìâïëïóåéñÜ ðïõ ðåñéÝ÷åé
ìÞêïò êåíÜ äéáóôÞìáôá
STR(f,[ìÞêïò[,d]]) ìåôáôñÝðåé ôçí Ýêöñáóç êéíçôÞò õðïäéáóôïëÞò
f óå óõìâïëïóåéñÜ ìÞêïõò ìÞêïò
÷ñçóéìïðïéþíôáò d äåêáäéêÜ øçößá
STUFF(s1,a,ìÞêïò,s2) áíôéêáèéóôÜ ôç óõìâïëïóåéñÜ s1 ôçí s2
îåêéíþíôáò áðü ôç èÝóç a ãéá ìÞêïò èÝóåéò
SUBSTRING(a,s,ìÞêïò) åðéóôñÝöåé ìßá íÝá óõìâïëïóåéñÜ áðü ôçí s
îåêéíþíôáò áðü ôç èÝóç a ìå ìÞêïò ìÞêïò
UPPER(s) ìåôáôñÝðåé üëá ôá ðåæÜ ôçò s óå êåöáëáßá
10.6 ¼øåéò
Ï MSSQLS-2000 õðïóôçñßæåé ôç äçìéïõñãßá üøåùí åßôå ìÝóù ôïõ åñãáëåßïõ ó÷å-
äéáóìïý üøåùí ôïõ Enterprise Manager åßôå ìå ÷ñÞóç åíôïëþí T-SQL áðü ôïí
Query Analyzer. ÅîåôÜæïíôáé êáé ïé äýï ôñüðïé ãéá ôçí êáôáóêåõÞ ìßáò üøçò
ðïõ áðïêñýðôåé ôéò óôÞëåò êùäéêüò, DVD êáé VHS áðü ôïí ðßíáêá Ôáéíßá êáé
åðéôñÝðåé ôçí ðñïóðÝëáóç ìüíï óôéò óôÞëåò ôßôëïò êáé êáôçãïñßá.
Ç ðñïóðÝëáóç ôïõ åñãáëåßïõ ó÷åäéáóìïý üøåùí ãßíåôáé åðéëÝãïíôáò ôï áíôß-
óôïé÷ï åéêïíßäéï (Views) ãéá ôç ÂÜóç ÄåäïìÝíùí movies-db óôá áñéóôåñÜ ôïõ
Enterprise Manager. ¸÷ïõìå ôç äõíáôüôçôá íá åðéëÝîïõìå ðïëëïýò ðßíáêåò,
üðïõ èá óôçñé÷èåß ç üøç. Ãéá ôï ðáñÜäåéãìÜ ìáò ÷ñåéáæüìáóôå ìüíï ôïí ðßíáêá
Ôáéíßá. Óôç óõíÝ÷åéá, åðéëÝãïõìå áðü ôïí ðßíáêá Ôáéíßá ôéò óôÞëåò ðïõ èá óõì-
ìåôÝ÷ïõí óôçí üøç. Ïé óôÞëåò áõôÝò åßíáé ïé ôßôëïò êáé êáôçãïñßá. Ðáñáôçñïýìå
üôé ìå ôçí åðéëïãÞ ìßáò óôÞëçò åíçìåñþíåôáé áõôüìáôá ôï åñþôçìá SQL, ôï ïðïßï
áíôáðïêñßíåôáé óôçí êáôáóêåõÞ ôçò üøçò. Ç ìïñöÞ ôïõ åñãáëåßïõ ó÷åäéáóìïý
üøåùí åßíáé üðùò ðáñïõóéÜæåôáé óôï Ó÷Þìá 10.7.
Π ί ν α κ α ς
β ά σ η ς σ τ ο ν
Ε π ι λ ε γ ό ε ν ε ς
ο π ο ί ο
σ τ ή λ ε ς
σ τ η ρ ί ζ ε τ α ι η
ν έ α ό ψ η
Ε ρ ώ τ η α S Q L π ο υ
α ν τ ι σ τ ο ι χ ε ί σ τ η ν έ α ό ψ η
SELECT *
FROM Ôáéíßá
WHERE DVD>2
WITH CHECK OPTION;
Áí óôç óõíÝ÷åéá ðñïóðáèÞóïõìå íá åéóÜãïõìå óôçí üøç ìßá íÝá ôáéíßá ãéá ôçí
ïðïßá äåí õðÜñ÷ïõí äéáèÝóéìá áíôßãñáöá óå DVD, ôüôå ç åéóáãùãÞ èá áðïôý÷åé
êáé èá åìöáíéóèåß ôï áíÜëïãï ìÞíõìá ëÜèïõò ìáæß ìå ôçí áéôßá ðïõ ðñïêÜëåóå
ôçí áðïôõ÷ßá ôçò åêôÝëåóçò ôçò åíôïëÞò åéóáãùãÞò.
Ìßá üøç äåí Ý÷åé öõóéêÞ õðüóôáóç üðùò Ýíáò ðßíáêáò ôçò ÂÜóçò ÄåäïìÝ-
íùí. Ôï óýóôçìá åêôåëåß ôçí ðñüôáóç SELECT ôçò üøçò êÜèå öïñÜ ðïõ ôï
üíïìá ìßáò üøçò áíáöÝñåôáé óå Ýíá åñþôçìá T-SQL. Ùóôüóï, ï MSSQLS-2000
ìáò äßíåé ôç äõíáôüôçôá íá áðïèçêåýïõìå ôá äåäïìÝíá ìßáò üøçò, üðùò áêñéâþò
áðïèçêåýïíôáé ôá äåäïìÝíá åíüò ðßíáêá. Ìßá ôÝôïéá üøç êáëåßôáé õëïðïéçìÝíç
üøç (materialized view) Þ äåéêôïäïôïýìåíç üøç (indexed view). Ç ÷ñÞóç ôùí
üøåùí áõôþí åðéôá÷ýíåé óçìáíôéêÜ ôçí åðåîåñãáóßá åñùôçìÜôùí, äéüôé ôá áðï-
ôåëÝóìáôá ôçò üøçò åßíáé Þäç äéáèÝóéìá êáé äåí áðáéôåßôáé ç åê íÝïõ åêôÝëåóç
ôçò ðñüôáóçò SELECT ç ïðïßá ÷ñçóéìïðïéÞèçêå ãéá ôïí ïñéóìü ôçò üøçò (âë.
ÊåöÜëáéï 6).
10.7 Óýíïøç
Ôï óýóôçìá MSSQLS-2000 õðïóôçñßæåé ðëÞñùò ôï ó÷åóéáêü ìïíôÝëï äåäïìÝíùí.
Ôá äåäïìÝíá áðïèçêåýïíôáé óå ðßíáêåò ôçò ÂÜóçò ÄåäïìÝíùí êáé Ý÷ïõìå ôç
äõíáôüôçôá íá ðñïóðåëÜóïõìå ôá äåäïìÝíá ÷ñçóéìïðïéþíôáò ôï åñãáëåßï SQL
Query Analyzer. Ç ãëþóóá ðïõ õðïóôçñßæåé ï MSSQLS-2000 êáëåßôáé T-SQL
(Transact-SQL), ç ïðïßá åßíáé ðëÞñùò åíáñìïíéóìÝíç ìå ôï ðñüôõðï SQL-92.
Ãéá ôçí êáôáíüçóç ôùí äõíáôïôÞôùí ïñéóìïý êáé ÷åéñéóìïý äåäïìÝíùí ôïõ
MSSQLS-2000 ÷ñçóéìïðïéÞèçêå ìßá áðëÞ ÂÜóç ÄåäïìÝíùí (movies-db) ðïõ áöï-
ñÜ óå êéíçìáôïãñáöéêÝò ôáéíßåò êáé çèïðïéïýò. ÅîåôÜóáìå ôïí ôñüðï êáôáóêåõÞò
ôçò íÝáò âÜóçò êáé ôç äéáôýðùóç åñùôçìÜôùí T-SQL óôï åñãáëåßï SQL Query
Analyzer. Åðßóçò, ðåñéãñÜøáìå ôïí ôñüðï ÷ñÞóçò ôïõ Enterprise Manager ãéá ôçí
êáôáóêåõÞ ðéíÜêùí êáé ãéá ôç äçìéïõñãßá äéáãñáììÜôùí ïíôïôÞôùí-óõó÷åôßóåùí.
ÔÝëïò, áíáëýèçêå ï ôñüðïò ïñéóìïý üøåùí ìÝóù ôïõ Enterprise Manager êáé ôïõ
SQL Query Analyzer.
10.4. Óôïí ðßíáêá Ôáéíßá íá ïñéóèåß Ýíá åðéðëÝïí ÷áñáêôçñéóôéêü üðïõ íá áðï-
èçêåýåôáé ôï üíïìá ôïõ óêçíïèÝôç ôçò ôáéíßáò. Óôç óõíÝ÷åéá, ÷ñçóéìïðïéþíôáò
äéáäï÷éêÝò åíôïëÝò UPDATE íá åíçìåñùèåß ôï ÷áñáêôçñéóôéêü áõôü ãéá üëåò ôéò
åããñáöÝò ôïõ ðßíáêá Ôáéíßá.
10.6 ×ñçóéìïðïéþíôáò åíôïëÝò T-SQL äéáôõðþóôå óôïí Query Analyzer Ýíá åñþ-
ôçìá ðïõ âñßóêåé ãéá êÜèå çèïðïéü ôïí áñéèìü ôùí ôáéíéþí ðïõ Ý÷åé ðáßîåé.
10.7 ×ñçóéìïðïéþíôáò åíôïëÝò T-SQL äéáôõðþóôå óôïí Query Analyzer Ýíá åñþ-
ôçìá ðïõ íá äßíåé ôïí áñéèìü ôùí ôáéíéþí áíÜ êáôçãïñßá.
10.8. Íá êáôáóêåõáóèåß ìßá üøç óôç ÂÜóç ÄåäïìÝíùí movies-db ðïõ íá åðé-
óôñÝöåé ôá æåýãç (üíïìá çèïðïéïý, ôßôëïò ôáéíßáò), Ýôóé þóôå ï óõãêåêñéìÝíïò
çèïðïéüò íá óõììåôÝ÷åé óôç óõãêåêñéìÝíç ôáéíßá.
ÈÅÌÁÔÁ ÕËÏÐÏÉÇÓÇÓ
Åßíáé ãíùóôü üôé Ýíá ÓÄÂÄ ôñÝ÷åé åðÜíù áðü ôï ëåéôïõñãéêü óýóôçìá, ðïõ åßíáé
õðåýèõíï ãéá ôç äéá÷åßñéóç ôùí áñ÷åßùí, óôï ëåãüìåíï ÷áìçëü öõóéêü åðßðåäï.
Óôï ðáñåëèüí åß÷áí õðÜñîåé äé÷ïãíùìßåò ãéá ôá äéá÷ùñéóôéêÜ üñéá ôùí äýï óõ-
óôçìÜôùí, äçëáäÞ ãéá ôéò óõãêåêñéìÝíåò õðçñåóßåò ðïõ èá Ýðñåðå íá ðñïóöÝñåé
ôï ëåéôïõñãéêü óýóôçìá óôï ÓÄÂÄ. Ôåëéêþò ç áêáäçìáúêÞ êáé êáôáóêåõáóôéêÞ
êïéíüôçôá ôùí áíèñþðùí ðïõ äéáêïíïýóáí ôéò ÂÜóåéò ÄåäïìÝíùí êáôÝëçîáí óôï
óõìðÝñáóìá üôé ìåñéêÝò õðçñåóßåò ôùí ëåéôïõñãéêþí óõóôçìÜôùí åßíáé áíåðáñ-
êåßò ãéá ôéò áíÜãêåò ìßáò ÂÜóçò ÄåäïìÝíùí. Ïé ëüãïé Þôáí ðñáêôéêïß êáé ôå÷íéêïß.
Ãéá ðáñÜäåéãìá:
259
260 ÊåöÜëáéï 11. ÖõóéêÞ ÏñãÜíùóç ÂÜóåùí ÄåäïìÝíùí
ι α χ ε ι ρ ι σ τ ή ς Α ρ χ ε ί ω ν
ι α χ ε ι ρ ι σ τ ή ς Α π ο ο ν ω τ ι κ ή ς
Μ ν ή η ς
ι α χ ε ι ρ ι σ τ ή ς Χ ώ ρ ο υ ί σ κ ο υ
Α π ο θ η κ ε υ έ ν α ε δ ο έ ν α
( D a t a b a s e )
Ó÷Þìá 11.1: ÔìÞìáôá ôïõ ÓÄÂÄ ðïõ ó÷åôßæïíôáé ìå ôç öõóéêÞ ïñãÜíùóç äåäïìÝ-
íùí.
ôïõ äßóêïõ åßíáé ôï ëïãéóìéêü ðïõ åßíáé õðåýèõíï ãéá ôçí áíÜãíùóç êáé ôçí
áðïèÞêåõóç óåëßäùí óôï äßóêï, åíþ ï äéá÷åéñéóôÞò ôçò áðïìïíùôéêÞò ìíÞìçò
åßíáé ôï ëïãéóìéêü ðïõ åßíáé õðåýèõíï ãéá ôçí êáôÜôìçóç ôçò êýñéáò ìíÞìçò óå
êáôÜëëçëá ôìÞìáôá, þóôå åêåß íá áðïèçêåýïíôáé ðñïóùñéíÜ ôá ðåñéå÷üìåíá ôùí
óåëßäùí ðïõ Ýñ÷ïíôáé áðü ôï äßóêï (ìÝóù ôïõ äéá÷åéñéóôÞ ôïõ ÷þñïõ ôïõ äßóêïõ).
Ôï áíþôåñï åðßðåäï ðåñéëáìâÜíåé Ýíá óýíïëï ðñïãñáììÜôùí ðïõ õëïðïéïýí
äéÜöïñåò äïìÝò áñ÷åßùí. Åðßóçò, ï äéá÷åéñéóôÞò áñ÷åßùí åßíáé õðåýèõíïò ãéá
ôçí ôáêôïðïßçóç ôùí åããñáöþí óå óåëßäåò.
Óôï ðáñüí êåöÜëáéï èá áíáðôõ÷èïýí èÝìáôá ðïõ áíáöÝñïíôáé óå èÝìáôá äéá-
÷åßñéóçò åéóüäïõ/åîüäïõ äåäïìÝíùí áðü ôç äåõôåñåýïõóá óôçí êýñéá ìíÞìç ìå ôç
âïÞèåéá ôùí áðïìïíùôéêþí ìíçìþí. ¼ìùò ðñïçãïõìÝíùò ðñÝðåé íá áíáöåñèïýí
ìåñéêÜ âáóéêÜ óôïé÷åßá ó÷åôéêÜ ìå ôçí áñ÷éôåêôïíéêÞ åíüò ôõðéêïý õðïëïãéóôéêïý
óõóôÞìáôïò.
Óôá ðñþôá õðïëïãéóôéêÜ óõóôÞìáôá ç êåíôñéêÞ ìïíÜäá åðåîåñãáóßáò (CPU)
ðáñÝìåíå áäñáíÞò üôáí äåäïìÝíá ìåôáöÝñïíôáí áðü/ðñïò ôç äåõôåñåýïõóá ìíÞìç.
Ç áäõíáìßá áõôÞ ãéá ôçí áðïôåëåóìáôéêÞ åðéêïéíùíßá ôçò ãñÞãïñçò êýñéáò ìíÞ-
ìçò êáé ôùí âñáäýôåñùí äåõôåñåõïõóþí ìíçìþí Ý÷åé îåðåñáóèåß óôïõò óýã÷ñï-
íïõò õðïëïãéóôÝò ìå ôç äçìéïõñãßá ìßáò äéåðáöÞò (interface), ðïõ ìðïñåß íá Ý÷åé
äýï ìïñöÝò:
Óêïðüò êáé ôùí äýï åßíáé ç åîïìÜëõíóç ôïõ ñõèìïý ìåôáöïñÜò äåäïìÝíùí. Åéäé-
êüôåñá, ôï êáíÜëé áí êáé Ý÷åé äéêÞ ôïõ ìéêñÞ ìíÞìç êáé ìßá ìéêñÞ ïìÜäá åíôïëþí,
äåí åßíáé éóüôéìïò åðåîåñãáóôÞò ðñïò ôïí êåíôñéêü åðåîåñãáóôÞ. Ç âáóéêÞ ëåé-
ôïõñãßá ôïõ êáíáëéïý åßíáé ç ìåôáôñïðÞ ôùí ëÝîåùí ôçò êýñéáò ìíÞìçò óå bytes,
þóôå íá áðïèçêåõèïýí óôçí ðåñéöåñåéáêÞ óõóêåõÞ êáé ç ìåôáôñïðÞ ôùí bytes óå
ëÝîåéò ãéá ôçí áíôßóôñïöç ìåôáöïñÜ. Ïé ëåéôïõñãßåò áõôÝò åêôåëïýíôáé áðü Ýíá
ðñüãñáììá ðïõ óõíÞèùò åßíáé áðïèçêåõìÝíï óôçí êýñéá ìíÞìç êáé óôÝëíåôáé
åíôïëÞ ðñïò åíôïëÞ áðü ôïí êåíôñéêü åðåîåñãáóôÞ óôï êáíÜëé üðïõ åêôåëïýíôáé.
Åðéëåêôéêü (selector) ëÝãåôáé ôï êáíÜëé ðïõ ìðïñåß íá åëÝã÷åé ðïëëÝò äåõôå-
ñåýïõóåò óõóêåõÝò, üìùò ðñÝðåé íá åêôåëÝóåé ðëÞñùò ôï ðñüãñáììá ðïõ áöïñÜ
óå ìßá óõóêåõÞ ðñïôïý áñ÷ßóåé íá åêôåëåß ôï ðñüãñáììá ìßáò Üëëçò óõóêåõÞò.
Ôï ðïëõðëåêôéêü êáíÜëé (multiplexor channel) Ý÷åé ôç äõíáôüôçôá íá åêôå-
ëåß ôáõôü÷ñïíá ôá ðñïãñÜììáôá ðïëëþí äåõôåñåõïõóþí óõóêåõþí. ÂÝâáéá óôçí
ðñáãìáôéêüôçôá óå êÜèå ìßá óõãêåêñéìÝíç ÷ñïíéêÞ óôéãìÞ äåäïìÝíá ìåôáöÝñï-
íôáé áðü/ðñïò ìßá ìüíï óõóêåõÞ, äßíåôáé üìùò ç åíôýðùóç üôé äåäïìÝíá áðü
262 ÊåöÜëáéï 11. ÖõóéêÞ ÏñãÜíùóç ÂÜóåùí ÄåäïìÝíùí
Äßáõëïò CPU-ìíÞìçò
ÊñõöÞ ìíÞìç
ÐñïóáñìïóôÞò
Êýñéá ìíÞìç
äéáýëùí
CPU
Äßáõëïò E/E
Ïé åããñáöÝò ìßáò ïíôüôçôáò óõíÞèùò Ý÷ïõí ßäéá ìïñöÞ êáé ëÝãïíôáé åããñáöÝò
óôáèåñïý ìÞêïõò (fixed length records). ÊÜôé ôÝôïéï óõìâáßíåé óõíÞèùò óôá ëå-
ãüìåíá ó÷åóéáêÜ ÓÄÂÄ. Óôçí ðåñßðôùóç áõôÞ ï õðïëïãéóìüò ìßáò äéåýèõíóçò ãéá
ôçí åðåîåñãáóßá ôïõ ðåäßïõ ìßáò åããñáöÞò åßíáé åýêïëç õðüèåóç, áöïý ðñáãìá-
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 263
• õðÜñ÷åé ìåãÜëç áðüêëéóç ôùí ìçêþí ôùí åããñáöþí áðü ôï ìÝóï ìÞêïò
åããñáöÞò,
Ç ìåôáâëçôüôçôá ôïõ ìÞêïõò ôùí åããñáöþí ïöåßëåôáé óôïõò åîÞò ôñåéò ëü-
ãïõò:
• Ðåäßá ìåôáâëçôïý ìÞêïõò (variable length fields). Óôá óõóôÞìáôá ðïõ äåí
õðïóôçñßæïõí åããñáöÝò ìåôáâëçôïý ìÞêïõò, ãéá êÜèå åããñáöÞ äåóìåýåôáé
÷þñïò ßóïò ìå ôï ìÞêïò ôïõ ìåãáëýôåñïõ óôéãìéüôõðïõ ôçò åããñáöÞò. Áðü
ôçí Üëëç ðëåõñÜ, óôá óõóôÞìáôá ðïõ õðïóôçñßæïõí åããñáöÝò ìåôáâëçôïý
ìÞêïõò ãßíåôáé ðñïóðÜèåéá åîïéêïíüìçóçò ÷þñïõ óå ðåäßá, ðïõ ôï ìÞêïò
ôïõò ðïéêßëåé êáôÜ ðïëý. Ôï öáéíüìåíï áõôü óõíáíôÜôáé óõíÞèùò óå ðåäßá
ôýðïõ óõìâïëïóåéñÜò üðùò ïíüìáôá, äéåõèýíóåéò, ðåñéãñáöÝò ê.ë.ð.
• ìå ÷ñÞóç åíüò ìéêñïý êáôáëüãïõ óôçí áñ÷Þ ôçò åããñáöÞò, üðïõ ãéá êÜèå
ðåäßï áðïèçêåýåôáé ç áðüóôáóÞ ôïõ (offset) áðü ôçí áñ÷Þ ôçò åããñáöÞò.
Óôï Ó÷Þìá 11.7 ðáñïõóéÜæåôáé Ýíá ôÝôïéï ðáñÜäåéãìá. Ç ðñïóÝããéóç áõôÞ
áðáéôåß åðéðëÝïí ÷þñï óå ó÷Ýóç ìå ôçí ðñþôç ðñïóÝããéóç áëëÜ åßíáé ÷ñï-
íéêÜ áðïôåëåóìáôéêüôåñç ãéáôß äßíåé ôç äõíáôüôçôá Üìåóçò ðñïóðÝëáóçò
êÜèå ðåäßïõ.
¹±§
- ¸- °- ¦
"
-
&% - !
¸íá ðñüâëçìá ðïõ óõ÷íÜ óõíáíôÜôáé óôéò ÂÜóåéò ÄåäïìÝíùí åßíáé ç ýðáñîç
ðåäßùí ìå ôéìÞ NULL, ìßá ôéìÞ ðïõ äçëþíåé üôé ãéá êÜðïéï óõãêåêñéìÝíï ðåäßï
äåí åßíáé äéáèÝóéìç Þ äåí ìðïñåß íá õðÜñîåé ðñáãìáôéêÞ ôéìÞ. ¸ôóé, óýìöùíá ìå
áõôÞ ôçí ðñïóÝããéóç äåí áðáéôåßôáé ç áðïèÞêåõóç êÜðïéïõ óõãêåêñéìÝíïõ óõì-
âüëïõ ðïõ íá äçëþíåé ôçí ôéìÞ NULL êÜðïéïõ ðåäßïõ, áëëÜ áðëþò ç áðüóôáóç
ôïõ åðüìåíïõ ðåäßïõ èá åßíáé ßóç ìå ôçí áðüóôáóç ôïõ óõãêåêñéìÝíïõ ðåäßïõ.
Ôï êõñéüôåñï ðñüâëçìá ðïõ ìðïñåß íá ðñïêýøåé ëüãù ôçò ýðáñîçò ðåäßùí
ìåôáâëçôïý ìÞêïõò åßíáé ç áýîçóç ôïõ ìåãÝèïõò ôçò åããñáöÞò êáôÜ ôçí åíçìÝ-
ñùóç åíüò ðåäßïõ. ¸íá ôÝôïéï åíäå÷üìåíï ìðïñåß íá ðñïêáëÝóåé:
• ôçí áíÜãêç ôáêôïðïßçóçò ôïõ ðåñéå÷ïìÝíïõ ôçò óåëßäáò ìå ôçí êáôÜëëçëç
ìåôáêßíçóç (shifting) ìåñéêþí åããñáöþí, Þ
Ýíá ìïíáäéêü êùäéêü åããñáöÞò (record identifyer, rid), ðïõ áðïôåëåßôáé áðü ôï
æåýãïò <êùäéêüò óåëßäáò, áñéèìüò èÝóçò> (<page id, slot number>).
Áí ïé åããñáöÝò åßíáé óôáèåñïý ìÞêïõò, ôüôå ï åíôïðéóìüò ôùí åããñáöþí ìÝóá
óôç óåëßäá åßíáé åýêïëïò, êáèþò ìÜëéóôá õðÜñ÷ïõí äýï ðéèáíÝò åðéëïãÝò:
n m 101...01
åããñáöÞ 1 åããñáöÞ 1
åããñáöÞ 2
··· åããñáöÞ 3
åããñáöÞ n ···
åëåýèåñïò
÷þñïò åããñáöÞ m
åðéêåöáëßäá ôçò óåëßäáò, ï ïðïßïò ðáñÝ÷åé üëåò ôéò ó÷åôéêÝò ðëçñïöïñßåò. ¸ôóé,
ï êáôÜëïãïò áõôüò ðåñéÝ÷åé ãéá êÜèå åããñáöÞ ôï æåýãïò <áðüóôáóç åããñáöÞò,
ìÞêïò åããñáöÞò> (<record offset, record length>). ÅðéðëÝïí, õðÜñ÷åé Ýíáò äåß-
êôçò ðñïò ôçí áñ÷Þ ôçò óåëßäáò áðü üðïõ áñ÷ßæåé ç ðåñéï÷Þ áðïèÞêåõóçò ôùí
åããñáöþí, êáèþò êáé Ýíáò äåßêôçò ðñïò ôçí áñ÷Þ ôçò åíïðïéçìÝíçò ðåñéï÷Þò ðïõ
åßíáé åëåýèåñç êáé äéáèÝóéìç ãéá áðïèÞêåõóç íÝùí åããñáöþí.
O êáôÜëïãïò áõôüò åîõðçñåôåß ôéò ðñïçãïýìåíåò ðñïäéáãñáöÝò áëëÜ èá
Ýðñåðå íá óçìåéùèåß üôé óå ðåñßðôùóç äéáãñáöÞò äåí ìðïñåß íá ãßíåé ôáêôï-
ðïßçóç ôïõ ßäéïõ ôïõ êáôáëüãïõ ìå åëåõèÝñùóç ôçò áíôßóôïé÷çò èÝóçò. Ùóôüóï ç
èÝóç áõôÞ óôïí êáôÜëïãï ìðïñåß íá áðïäïèåß ðñïò ÷ñÞóç óå åðüìåíç åéóáãùãÞ
åããñáöÞò. ¸ôóé ìßá êáéíïýñãéá èÝóç äçìéïõñãåßôáé óôïí êáôÜëïãï ìüíï áí üëåò
ïé õðÜñ÷ïõóåò èÝóåéò äåß÷íïõí óå ðñáãìáôéêÝò åããñáöÝò.
Óýìöùíá ìå ìßá áðëÞ ðáñáëëáãÞ ôçò ôå÷íéêÞò áõôÞò, ï êáôÜëïãïò äåí ðåñéÝ-
÷åé æåýãç <áðüóôáóç åããñáöÞò, ìÞêïò åããñáöÞò> áëëÜ ìüíï ôçí <áðüóôáóç
åããñáöÞò>, åíþ ç Ýíäåéîç ìÞêïõò (length indicator) ôïðïèåôåßôáé óôçí áñ÷Þ ôçò
áíôßóôïé÷çò åããñáöÞò. ¸ôóé, óå ðåñßðôùóç áíáæÞôçóçò äéåõêïëýíåôáé ç õðÝñ-
âáóç ìßáò åããñáöÞò.
Áí n åßíáé ôï ðëÞèïò ôùí åããñáöþí, ôüôå ôï ðëÞèïò ôùí óåëßäùí ôïõ áñ÷åßïõ
åßíáé: » ¼
n
b =
Bf r
Áí ïé êåöáëÝò åßíáé ôïðïèåôçìÝíåò óôçí áñ÷Þ ôçò óåëßäáò, ôüôå ï ÷ñüíïò ìåôá-
öïñÜò ôçò óåëßäáò éóïýôáé ìå:
B
btt =
t
üðïõ t åßíáé ôá÷ýôçôá äéáêßíçóçò ôùí äåäïìÝíùí ìåôáîý äßóêïõ êáé ìíÞìçò êáé ìå-
ôñÜôáé ìå bytes/ms. Áí ðÜëé áíôß ôçò åããñáöÞò èåùñçèåß ìßá ïëüêëçñç Üôñáêôïò
÷ùñçôéêüôçôáò T , ôüôå ç ðïóüôçôá áõôÞ ìåôáöÝñåôáé óå ìßá ðëÞñç ðåñéóôñïöÞ 2r
(üðïõ r åßíáé ç ìÝóïò ÷ñüíïò ðåñéóôñïöÞò). ¸ôóé ðñïêýðôåé ç éóïäýíáìç ó÷Ýóç:
T
btt =
2r
¼ðùò ç ìáãíçôéêÞ ôáéíßá åßíáé ïñãáíùìÝíç óå öõóéêÝò åããñáöÝò ìå êåíÜ
ìåôáîý ôïõò, Ýôóé êáé óôï ìáãíçôéêü äßóêï áðáéôåßôáé êÜðïéá ïñãÜíùóç ìå óêïðü
ôï óõã÷ñïíéóìü êáôÜ ôç ëåéôïõñãßá ôïõ êáé åðïìÝíùò ôç ìåßùóç ôïõ ëáíèÜíïíôá
ðåñéóôñïöéêïý ÷ñüíïõ. Äýï ôñüðïé ãéá ôçí ïñãÜíùóç åíüò äßóêïõ óõíáíôþíôáé
óôçí ðñÜîç:
Ç ôå÷íéêÞ ôçò ðáñåìâïëÞò åßíáé áíáãêáßá åðåéäÞ ï åëåãêôÞò ôïõ äßóêïõ áðáéôåß
êÜðïéï ÷ñüíï åðåîåñãáóßáò ôùí äåäïìÝíùí ðïõ äÝ÷åôáé áðü ôï äßóêï, ðñïôïý
ìðïñÝóåé íá äå÷èåß Üëëá äåäïìÝíá. ¸ôóé áí ç ëïãéêÜ åðüìåíç óåëßäá ôïðïèåôïý-
íôáí óôïí åðüìåíï öõóéêÜ ôïìÝá, ôüôå èá Ýðñåðå íá ãßíåé ìßá ðëÞñçò ðåñéóôñïöÞ
ôïõ äßóêïõ þóôå íá åíôïðéóèåß ç áñ÷Þ ôçò åðüìåíçò óåëßäáò.
Öõóéêüò ôïìÝáò 1 2 3 4 5 6 7 8 9 10
Ëïãéêüò ôïìÝáò 1 8 5 2 9 6 3 10 7 4
êõìáßíåôáé áðü 63% ùò 100%, ðïõ ðñïöáíþò åßíáé ç êáëýôåñç ëýóç. Óôï Ó÷Þìá
11.10 öáßíåôáé ç áíôéóôïé÷ßá ôïõ ìåãÝèïõò ôçò åããñáöÞò ðñïò ôï ìÝãåèïò ôïõ
ôïìÝá ãéá ðáñÜãïíôá ïìáäïðïßçóçò 8.
bk × dtt
üðïõ b åßíáé ôï ðëÞèïò ôùí êÜäùí ôïõ áñ÷åßïõ êáé dtt åßíáé ï ÷ñüíïò ìåôáöïñÜò
äåäïìÝíùí (data transfer data) åíüò êÜäïõ, åíþ ï ÷ñüíïò ôõ÷áßáò áíÜãíùóçò ôïõ
áñ÷åßïõ åßíáé:
bk × (s + r + dtt)
272 ÊåöÜëáéï 11. ÖõóéêÞ ÏñãÜíùóç ÂÜóåùí ÄåäïìÝíùí
Áðü ôéò ðñïçãïýìåíåò ó÷Ýóåéò óõíÜãåôáé üôé ç áëëáãÞ ôïõ ìåãÝèïõò ôïõ êÜ-
äïõ äåí åðéäñÜ êáèüëïõ óôçí ôá÷ýôçôá ôçò óåéñéáêÞò áíÜãíùóçò. ÁíôéèÝôùò, ç
áýîçóç ôïõ ìåãÝèïõò ôïõ êÜäïõ áõîÜíåé ôçí ôá÷ýôçôá ôçò ôõ÷áßáò ðñïóðÝëáóçò
ôïõ áñ÷åßïõ ìå âÜóç ôïí êÜäïõ, åíþ ìåéþíåé ôçí ôá÷ýôçôá áí ç ôõ÷áßá ðñïóðÝ-
ëáóç ãßíåôáé ìå âÜóç ôçí åããñáöÞ. Áí ç êëÞóç ãßíåôáé ìå âÜóç ôéò åããñáöÝò,
ôüôå ï áíôßóôïé÷ïò ôýðïò åßíáé:
n × (s + r + dtt)
ÄçëáäÞ, ãéá ôçí ðñïóðÝëáóç ìßáò åããñáöÞò ðñÝðåé íá ìåôáöåñèåß óôçí êýñéá
ìíÞìç Ýíáò ïëüêëçñïò êÜäïò áíôß ìßáò Þ äýï óåëßäùí, üðïõ ðéèáíþò ìðïñåß
íá åßíáé áðïèçêåõìÝíç ç åããñáöÞ. ¸ôóé ðñïêýðôåé üôé áí ç åðåîåñãáóßá ôïõ
áñ÷åßïõ ãßíåôáé êõñßùò êáôÜ ôõ÷áßï ôñüðï, ôüôå äåí óõìöÝñåé íá ïìáäïðïéïýíôáé
ðïëëÝò óåëßäåò óå Ýíáí êÜäï. Óõíåðþò, ôåëéêÜ, ç åêëïãÞ ôïõ êáôÜëëçëïõ ðëÞèïõò
óåëßäùí áíÜ êÜäï åßíáé Ýíá ðïëõäéÜóôáôï ðñüâëçìá.
Êáô’ åîáßñåóç üìùò ðñïò üóá áíáöÝñèçêáí ðñïçãïõìÝíùò õðÜñ÷ïõí ìåñéêÝò
ðåñéðôþóåéò, üðïõ äåí åêôåëïýíôáé ôÝôïéïõ åßäïõò âåëôéóôïðïéÞóåéò. Ç ôå÷íéêÞ
áõôÞ äåí êÜíåé âåëôéóôïðïßçóç ÷þñïõ áëëÜ äéåõêïëýíåé óçìáíôéêÜ ôéò åéóáãùãÝò
êáé ôéò áíáíåþóåéò ôùí åããñáöþí. Óå Üëëá óõóôÞìáôá åðéôñÝðåôáé ìßá åããñáöÞ
íá áðïèçêåõèåß êáôÜ Ýíá ìÝñïò óå Ýíá êÜäï êáé êáôÜ ôï õðüëïéðï óå Üëëïí.
¸ôóé ôï ðïóïóôü ÷ñçóéìïðïßçóçò ôïõ ÷þñïõ åßíáé 100%, ùóôüóï áðáéôåßôáé ìßá
ðëÝïí ðñï÷ùñçìÝíç ìÝèïäïò äéá÷åßñéóçò ôçò áðïìïíùôéêÞò ìíÞìçò.
Áí êáé óõíÞèùò áñ÷éêÜ Ýíá áñ÷åßï êáôáëáìâÜíåé óõíå÷üìåíåò èÝóåéò óôï
äßóêï, ôï ðéèáíüôåñï åßíáé üôé ëüãù åéóáãùãþí êáé äéáãñáöþí ïé óåëßäåò ôïõ
áñ÷åßïõ èá äéáóðáñèïýí óôéò åðéöÜíåéåò ôïõ äßóêïõ, åíþ âÝâáéá ôï ßäéï óõìâáßíåé
êáé ãéá ôïí åëåýèåñï ÷þñï ðïõ ðáýåé íá åßíáé åíéáßïò áëëÜ äéáóêïñðßæåôáé óå
ìéêñÜ áðïìáêñõóìÝíá ôìÞìáôá. Ìßá áêüìç õðåõèõíüôçôá ôïõ äéá÷åéñéóôÞ åßíáé
íá ãíùñßæåé ðïéÝò óåëßäåò åßíáé êáôåéëçììÝíåò êáé ðïéåò åëåýèåñåò. Ãéá ôï óêïðü
áõôü ìðïñïýí íá ÷ñçóéìïðïéçèïýí äýï ôå÷íéêÝò:
• ìå ÷ñÞóç ìßá ëßóôáò ãéá ôéò äéåõèýíóåéò ôùí åëåýèåñùí óåëßäùí, üðùò ãß-
íåôáé ìå ôç óõëëïãÞ óêïõðéäéþí (garbage collection) áðü Ýíá ëåéôïõñãéêü
óýóôçìá, Þ
• ìå ÷ñÞóç åíüò äõáäéêïý ðßíáêá, üðïõ ôá 1 êáé 0 áíôéóôïé÷ïýí óôéò êáôåé-
ëçììÝíåò êáé óôéò åëåýèåñåò óåëßäåò, áíôéóôïß÷ùò.
¸ôóé ðáñ’ üôé ìðïñåß íá õðÜñ÷åé óõíïëéêÜ åëåýèåñïò ÷þñïò, åíôïýôïéò áõôüò ï
÷þñïò ìðïñåß íá ìçí åßíáé ðñáêôéêÜ åêìåôáëëåýóéìïò, üðùò ãéá ðáñÜäåéãìá ãéá
ôï Üíïéãìá åíüò êáéíïýñãéïõ áñ÷åßïõ. ÁõôÞ ç äéáäéêáóßá êáëåßôáé ôìçìáôïðïß-
çóç (fragmentation) ôïõ äßóêïõ. Ãéá ôï óêïðü áõôü ôá áñ÷åßá äéáéñïýíôáé óå
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 273
åêôÜóåéò (extents), ðÝñá áðü ôçí õðïäéáßñåóç ôïõò óå êÜäïõò, óåëßäåò, åããñáöÝò
êáé ðåäßá. ¸êôáóç åßíáé Ýíá ôìÞìá ôïõ áñ÷åßïõ, ôï ïðïßï êáôáëáìâÜíåé êáô’
áðïêëåéóôéêüôçôá Ýíá óõãêåêñéìÝíï ìÝñïò ôïõ äßóêïõ. ÓõíÞèùò ïé åêôÜóåéò åß-
íáé éóïìåãÝèåéò êáé ðïéêßëïõí óå ðëÞèïò áðü ìßá ìÝ÷ñé ìåñéêÝò äåêÜäåò. Áí êáé
ç äéá÷åßñéóç ôùí åêôÜóåùí áö’ åáõôÞò åßíáé Ýíá åðéðëÝïí ðñüâëçìá, åíôïýôïéò
ìå ôïí ôåìá÷éóìü ôùí áñ÷åßùí óå åêôÜóåéò åßíáé äõíáôü íá ãßíåé êáëýôåñç ÷ñÞóç
ôïõ äßóêïõ êáé ãéá äýï áêüìç ëüãïõò:
• Óýìöùíá ìå ôéò ôåëåõôáßåò åîåëßîåéò öÝñåôáé üôé åßíáé ðïëý áðïôåëåóìáôéêü
áðü Üðïøç ðáñáëëçëéóìïý ôá ìåãÜëá áñ÷åßá íá åðéìåñßæïíôáé óå åêôÜóåéò
ðïõ áðïèçêåýïíôáé óå äéáöïñåôéêïýò äßóêïõò. ÌÜëéóôá ìåñéêÝò öïñÝò
êÜôé ôÝôïéï ãßíåôáé êáé ãéá áñ÷åßá ìåóáßïõ ìåãÝèïõò. Ç êáôáíïìÞ áõôÞ ôïõ
áñ÷åßïõ ëÝãåôáé æåýîç Þ óýíäåóç (spanning).
• Ìßá åéóáãüìåíç åããñáöÞ ìðïñåß íá ìç ÷ùñÜ óå êÜðïéá Ýêôáóç (ðéèáíü-
ôåñá ôçí ôåëåõôáßá). Ôüôå áõôüìáôá ôï óýóôçìá ðáñá÷ùñåß óôï áñ÷åßï ìßá
åðéðëÝïí Ýêôáóç ìå ôñüðï áäéáöáíÞ ãéá ôï ÷ñÞóôç. Áêüìç, ôï óýóôçìá
ìðïñåß ìßá Üäåéá Ýêôáóç íá ôç äéáèÝóåé óå êÜðïéï Üëëï áñ÷åßï.
• ôéò ëïãéóìéêÝò (software buffers), ðïõ åßíáé ôìÞìáôá ôçò êýñéáò ìíÞìçò.
² ¯
± °
@
I ² ¯
¡
µ @@ Áñ÷åßï
Ðåñéï÷Þ ¡¡ @@ ÊáíÜëé µ±
¡ °
åñãáóßáò ¡
ª @ ¡
åããñáöÞò @ ¡
@
R ¡
ª
² ¯
Ðåñéï÷Þ ÁðïìïíùôéêÞ
ðñïãñÜììáôïò ìíÞìç ± °
÷ñÞóôç Äßóêïò
Êýñéá ìíÞìç
¸óôù üôé üëá ôá äåäïìÝíá åíüò ÓÄÂÄ ðåñéÝ÷ïíôáé óå Ýíá áñ÷åßï êáé ìüíï, ôï
ïðïßï áðïôåëåßôáé áðü 1.000.000 óåëßäåò (äçëáäÞ, 4 GBytes ðåñßðïõ èåùñþíôáò
óåëßäåò ôùí 4 Kb). Ðñïöáíþò ç êýñéá ìíÞìç åßíáé ìéêñüôåñç. ¸ôóé ìÝóá óôçí
êýñéá ìíÞìç äåóìåýåôáé êÜðïéïò ÷þñïò ãéá ôçí áðïìïíùôéêÞ ìíÞìç, þóôå åêåß
íá ôïðïèåôïýíôáé ðñïóùñéíÜ áðü ôï äéá÷åéñéóôÞ ôçò áðïìïíùôéêÞò ìíÞìçò ôá
äåäïìÝíá ðïõ Ýñ÷ïíôáé áðü ôï äßóêï ìÝ÷ñé íá ãßíåé ç åðåîåñãáóßá ôïõò. Ï
äéá÷åéñéóôÞò, ëïéðüí, áõôüò åßíáé õðåýèõíïò ãéá ôïí ôåìá÷éóìü ôçò ìíÞìçò óå
Ýíá óýíïëï ðëáéóßùí (frames), üðïõ ôï ìÝãåèïò êÜèå ðëáéóßïõ åßíáé ßóï ðñïò ôï
ìÝãåèïò ôçò óåëßäáò, åíþ ôï óýíïëï ôùí ðëáéóßùí áõôþí ïíïìÜæåôáé äåîáìåíÞ
ìíçìþí (buffer pool).
Ôá áíþôåñá óôñþìáôá ôïõ óõóôÞìáôïò åðéêïéíùíïýí ìå ôï äéá÷åéñéóôÞ ôçò
áðïìïíùôéêÞò ìíÞìçò êáé:
• ôïõ æçôïýí êÜðïéá óåëßäá, ðïõ ìðïñåß Þäç íá âñßóêåôáé óå êÜðïéï ðëáßóéï,
áëëéþò ðñÝðåé íá ðñïóðåëáóèåß áðü ôï äßóêï, Þ
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 275
• ôïõ ðåñíïýí Ýíá ìÞíõìá üôé äåí ÷ñåéÜæïíôáé ðëÝïí êÜðïéá óåëßäá, ïðüôå
ôï ðëáßóéï ìðïñåß íá åëåõèåñùèåß, Þ ôÝëïò
• ôïõ ðåñíïýí Ýíá ìÞíõìá ãéá êÜðïéá åíçìÝñùóç ðïõ Ý÷åé åðÝëèåé óå êÜðïéá
óåëßäá, ïðüôå ç åíçìÝñùóç áõôÞ ðñÝðåé íá ðåñÜóåé óôçí áíôßóôïé÷ç óåëßäá
ôïõ äßóêïõ.
Ï äéá÷åéñéóôÞò ãéá íá áíôáðïêñéèåß óôá êáèÞêïíôÜ ôïõ ãíùñßæåé ãéá êÜèå ðëáß-
óéï ðüóåò öïñÝò Ý÷åé æçôçèåß ÷ùñßò íá åëåõèåñùèåß áðü ôüôå ðïõ ç áíôßóôïé÷ç
óåëßäá ôïðïèåôÞèçêå óôçí áðïìïíùôéêÞ ìíÞìç, êáé áí ôï ðëáßóéï åßíáé âñþìéêï
(dirty), äçëáäÞ áí Ý÷åé åíçìåñùèåß. Áõôü åðéôõã÷Üíåôáé ìå ôç âïÞèåéá ôïõ ëå-
ãüìåíïõ ìåôñçôÞ êáñöùìÜôùí (pin count) êáé ôïõ ëåãüìåíïõ âñþìéêïõ bit, ïé
ïðïßïé áñ÷éêïðïéïýíôáé ìå ôéìÝò 010 êáé 02 .
Áí ç óåëßäá åðüìåíçò æÞôçóçò âñßóêåôáé óå êÜðïéï ðëáßóéï ôüôå ï ìåôñçôÞò
pin count áõîÜíåôáé êáôÜ Ýíá (äéáäéêáóßá ðïõ ëÝãåôáé "êÜñöùìá" - pinning),
åíþ ï ìåôñçôÞò ìåéþíåôáé êáôÜ Ýíá áí Ýñèåé ìÞíõìá üôé ôï ðåñéå÷üìåíï êÜðïéïõ
ðëáéóßïõ äåí åßíáé ðëÝïí ÷ñÞóéìï (äéáäéêáóßá "îåêÜñöùìá" - unpinning). Áí ç
áéôïýìåíç óåëßäá äåí âñßóêåôáé óôçí áðïìïíùôéêÞ ìíÞìç êáé äåí õðÜñ÷åé êÜ-
ðïéï åëåýèåñï ðëáßóéï, ôüôå åðéëÝãåôáé Ýíá ðëáßóéï, ôï ëåãüìåíï èýìá (victim),
üðïõ èá Ýñèåé ç áéôïýìåíç óåëßäá áðü ôï äßóêï. Ôï èýìá åðéëÝãåôáé ìåôáîý ôùí
ðëáéóßùí ðïõ Ý÷ïõí ìçäåíéêü pin count åöáñìüæïíôáò ìßá ðïëéôéêÞ áíôéêáôÜóôá-
óçò óåëßäùí (page replacement) (ðïõ èá åîçãçèïýí óôç óõíÝ÷åéá). Ùóôüóï, ðñéí
åëåõèåñùèåß ï ÷þñïò ôïõ èýìáôïò åßíáé áðáñáßôçôï íá åëåã÷èåß ôï dirty bit. Áí
ôï bit áõôü åßíáé 0, ôüôå ðñÜãìáôé ôï ðëáßóéï åëåõèåñþíåôáé ÷ùñßò êáìßá Üëëç
åíÝñãåéá, åíþ áí åßíáé 1 ôüôå ôï ðåñéå÷üìåíï ôïõ ðëáéóßïõ áðïèçêåýåôáé óôçí
áíôßóôïé÷ç óåëßäá ôïõ äßóêïõ. ¼ìùò åßíáé ðéèáíü íá ìçí õðÜñ÷ïõí ðëáßóéá ìå
ìçäåíéêü pin count. Óå ìßá ôÝôïéá ðåñßðôùóç ç íÝá áßôçóç ðñÝðåé íá ðåñéìÝíåé,
êáé ðéèáíþò íá áðïññéöèåß.
Ç ðñïçãïýìåíç áíÜðôõîç ôïõ ôñüðïõ ëåéôïõñãßáò ôçò áðïìïíùôéêÞò ìíÞìçò
ðñïóïìïéÜæåé óôïí ôñüðï ëåéôïõñãßáò ôçò åéêïíéêÞò ìíÞìçò (virtual memory)
åíüò ëåéôïõñãéêïý óõóôÞìáôïò. Ùóôüóï, üðùò åëÝ÷èç óôçí áñ÷Þ ôïõ êåöáëáßïõ,
Ýíá ÓÄÂÄ äåí åðáíáðáýåôáé ïýôå óå áõôÝò ôéò õðçñåóßåò ôïõ ëåéôïõñãéêïý óõ-
óôÞìáôïò ãéáôß ôï ßäéï ìðïñåß íá ðñïâëÝøåé ôá ðñüôõðá æÞôçóçò óåëßäùí (page
reference patterns), åéäéêÜ üôáí åêôåëïýíôáé óõãêåêñéìÝíåò äéåñãáóßåò, üðùò óåé-
ñéáêÝò óáñþóåéò áñ÷åßùí Þ óõíäÝóåéò (join) áñ÷åßùí ê.ë.ð. Ç äõíáôüôçôá ðñü-
âëåøçò ôçò ìåëëïíôéêÞò æÞôçóçò ìðïñåß íá ÷ñçóéìïðïéçèåß ìå óêïðü ôç âåëôßùóç
ôçò áðïôåëåóìáôéêüôçôÜò ôïõ óôá åîÞò óçìåßá:
• ìå ôçí åðéëïãÞ ôçò êáôÜëëçëçò óôéãìÞò ãéá ôçí áðïèÞêåõóç ôùí âñþìéêùí
óåëßäùí óôï äßóêï, êáé
• ìå ôçí ðñï-ðñïóðÝëáóç (prefetching) óåëßäùí áðü ôï äßóêï ðñéí áêüìç
áõôÝò æçôçèïýí.
Óå åöáñìïãÝò ÂÜóåùí ÄåäïìÝíùí ôï êüóôïò åðåîåñãáóßáò ôùí óåëßäùí áðü ôç
óôéãìÞ ðïõ èá Ýñèïõí óôéò áðïìïíùôéêÝò ìíÞìåò èåùñåßôáé áìåëçôÝï óå ó÷Ýóç
ìå ôï êüóôïò ìåôáöïñÜò äåäïìÝíùí áðü/ðñïò ôç äåõôåñåýïõóá ìíÞìç. ¸ôóé, ç
ðñï-ðñïóðÝëáóç âåëôéþíåé óçìáíôéêÜ ôçí åðßäïóç ôïõ óõóôÞìáôïò üôáí äåí áéôþ-
íôáé üëåò ôéò óåëßäåò ôïõ äßóêïõ ìå ßäéá ðéèáíüôçôá, áëëÜ ïé áéôÞóåéò åóôéÜæïíôáé
êõñßùò óå ìåñéêÝò ðåñéï÷Ýò äåäïìÝíùí. Ôï ôåëåõôáßï öáéíüìåíï ïíïìÜæåôáé ôï-
ðéêüôçôá (locality), êáé ïäçãåß óå áýîçóç ôïõ ëåãüìåíïõ ëüãïõ åðéôõ÷ßáò (hit
ratio), ðïõ åßíáé ôï ðçëßêï ôïõ áñéèìïý ôùí áéôÞóåùí ðïõ áðáíôþíôáé ÷ùñßò ðñï-
óðÝëáóç óôç äåõôåñåýïõóá ìíÞìç ðñïò ôïí áñéèìü ôùí óõíïëéêþí áéôÞóåùí. Ìå
Üëëá ëüãéá, ç ðñï-ðñïóðÝëáóç âåëôéþíåé ôçí åðßäïóç üôáí ïé áéôÞóåéò áöïñïýí
ãåéôïíéêÝò óåëßäåò óå ðåñßðôùóç óåéñéáêÞò ðñïóðÝëáóçò, åíþ ç åðßäïóç öèßíåé
óçìáíôéêÜ óå ðåñßðôùóç ôõ÷áßáò ðñïóðÝëáóçò. ÅðéðëÝïí ðñÝðåé íá ôïíéóèåß
üôé ç ðñï-ðñïóðÝëáóç óõíôåëåß óôç ìåßùóç ôïõ ìÝóïõ ÷ñüíïõ ðñïóðÝëáóçò óôéò
óåëßäåò åðåéäÞ, üôáí åßíáé ãíùóôÝò ïé äéåõèýíóåéò ôùí óåëßäùí ðïõ èá ðñïóðå-
ëáóèïýí, ìðïñåß íá ãßíåé êÜðïéá áíáäéÜôáîç ôçò óåéñÜò ôùí áéôÞóåùí ìå óôü÷ï
ôçí åëá÷éóôïðïßçóç ôïõ ÷ñüíïõ áíáæÞôçóçò êáé ôïõ ëáíèÜíïíôá ðåñéóôñïöéêïý
÷ñüíïõ.
Óôç óõíÝ÷åéá åîçãåßôáé ìßá áðëÞ ôå÷íéêÞ ÷ñÞóçò ôçò áðïìïíùôéêÞò ìíÞìçò,
ðïõ ïíïìÜæåôáé single buffering, êáé ìðïñåß íá õéïèåôçèåß óå ðåñéðôþóåéò óåé-
ñéáêÞò ðñïóðÝëáóçò áñ÷åßïõ. Ìßá åíáëëáêôéêÞ ëýóç åßíáé íá áêïëïõèçèåß ç
åðáíáëáìâáíüìåíç äéáäéêáóßá íá ãåìßæåé ç ìíÞìç êáé êáôüðéí íá áêïëïõèåß ç
åðåîåñãáóßá. ¸ôóé èá ìåôáöÝñåôáé ç åðüìåíç óåëßäá áðü ôçí ðåñéöåñåéáêÞ óõ-
óêåõÞ óôçí áðïìïíùôéêÞ ìíÞìç, ìüíï üôáí ôåëåéþóåé ç åðåîåñãáóßá üëùí ôùí
åããñáöþí ôçò áðïìïíùôéêÞò ìíÞìçò. Ùóôüóï óýìöùíá ìå ìßá ðñï÷ùñçìÝíç
ìÝèïäï ìðïñåß íá ãßíåé áðïôåëåóìáôéêüôåñç ÷ñÞóç ôçò ìíÞìçò ìåôáöÝñïíôáò äå-
äïìÝíá ôáõôü÷ñïíá áðü ôçí ðåñéöåñåéáêÞ óõóêåõÞ ðñïò ôç ìíÞìç êáé áðü ôç
ìíÞìç óôçí ðåñéï÷Þ ôïõ ðñïãñÜììáôïò ôïõ ÷ñÞóôç (user program area), üðùò
öáßíåôáé óôï Ó÷Þìá 11.11. ÂÝâáéá ç ßäéá ôå÷íéêÞ ìðïñåß íá åöáñìïóèåß ãéá
ôçí ôáõôü÷ñïíç ìåôáöïñÜ äåäïìÝíùí êáôÜ ôçí áíôßóôñïöç óåéñÜ. Ç ìÝèïäïò
áõôÞ ìðïñåß íá õëïðïéçèåß ìå Ýíá ìç÷áíéóìü êõêëéêÞò ëßóôáò. Ç äéá÷åßñéóç ôçò
ëßóôáò áõôÞò ãßíåôáé ìå ôç âïÞèåéá äýï äåéêôþí ðïõ äåß÷íïõí ôçí ðñþôç äéáèÝ-
óéìç åããñáöÞ ãéá ôï ðñüãñáììá åöáñìïãÞò êáé ôçí ðñþôç äéáèÝóéìç èÝóç ãéá
áðïèÞêåõóç åããñáöþí áðü ôç äåõôåñåýïõóá óõóêåõÞ. ¸ôóé êáôÜ ôç äéÜñêåéá
ôçò åðåîåñãáóßáò ï Ýíáò äåßêôçò "êõíçãÜ" ôïí Üëëïí. ¼ôáí ï ðñþôïò öèÜóåé ôï
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 277
äåýôåñï, ôüôå ç áðïìïíùôéêÞ ìíÞìç åßíáé Üäåéá, åíþ óôçí áíôßèåôç ðåñßðôùóç ç
ìíÞìç åßíáé ãåìÜôç.
Óå ðåñßðôùóç óåéñéáêÞò ðñïóðÝëáóçò óåéñéáêïý áñ÷åßïõ ìðïñåß íá ÷ñçóéìï-
ðïéçèåß ìßá áêüìç áðïôåëåóìáôéêüôåñç ôå÷íéêÞ ðïõ ïíïìÜæåôáé double buffering.
Ãéá ôçí êáôáíüçóç ôçò ôå÷íéêÞò, ÷ùñßò âëÜâç ôçò ãåíéêüôçôáò áò õðïôåèåß üôé ç
áðïìïíùôéêÞ ìíÞìç áðïôåëåßôáé áðü äýï ðëáßóéá ìüíï. ¸óôù üôé áñ÷éêÜ áõôÜ ôá
äýï ðëáßóéá ãåìßæïõí ìå ôéò ðñþôåò äýï óåëßäåò ôïõ áñ÷åßïõ. Ìüëéò ïëïêëçñùèåß
ç åðåîåñãáóßá ôùí åããñáöþí ôïõ ðñþôïõ ðëáéóßïõ, ôüôå áõôü ìå íÝá áíÜãíùóç
îáíáãåìßæåé ìå ôï ðåñéå÷üìåíï ôçò ôñßôçò óåëßäáò ôïõ áñ÷åßïõ. ¸ôóé, ç ôñßôç
óåëßäá ðñïóöÝñåôáé ãéá åðåîåñãáóßá áìÝóùò ìüëéò ôåëåéþóåé ç åðåîåñãáóßá ôçò
äåýôåñçò óåëßäáò ðïõ âñßóêåôáé óôï äåýôåñï ðëáßóéï. Ìå ôïí ôñüðï áõôü, óå
ìßá ÷ñïíéêÞ óôéãìÞ ôï Ýíá ðëáßóéï äÝ÷åôáé äåäïìÝíá áðü ôï äßóêï êáé ôï Üëëï
óõììåôÝ÷åé óôçí åðåîåñãáóßá, åíþ óôçí åðüìåíç ÷ñïíéêÞ óôéãìÞ ïé ñüëïé ôùí
ðëáéóßùí áíôéóôñÝöïíôáé. Ç ôå÷íéêÞ áõôÞ áëëáãÞò ôùí ñüëùí ôùí äýï ìíçìþí
ïíïìÜæåôáé áíôáëëáãÞ áðïìïíùôéêþí ìíçìþí (buffer swapping). Áí ï ÷ñüíïò
åðåîåñãáóßáò ôùí åããñáöþí ôçò óåëßäáò (÷ñüíïò CPU) äåí åßíáé ìåãáëýôåñïò
áðü ôï ÷ñüíï ðñïóðÝëáóçò (÷ñüíïò É/Ï), ôüôå âÜóéìá ìðïñåß íá èåùñçèåß üôé
ï óõíïëéêüò ÷ñüíïò ôáõôßæåôáé ìå ôï ÷ñüíï ðñïóðÝëáóçò. Óôï Ó÷Þìá 11.12 ðá-
ñïõóéÜæåôáé áö’ åíüò ìßá óåéñÜ áðü ëåéôïõñãßåò åéóüäïõ/åîüäïõ ìå ôéò ÷ñïíéêÜ
áíôßóôïé÷åò ëåéôïõñãßåò åðåîåñãáóßáò êáé áö’ åôÝñïõ ôï ðåñéå÷üìåíï ôùí äýï
ðëáéóßùí. ÊáôÜ ôïí ßäéï ôñüðï ôá äýï ðëáßóéá ìðïñïýí íá óõíåñãáóèïýí ãéá ôç
óåéñéáêÞ áðïèÞêåõóç óôï áñ÷åßï.
Ðñþôï Äåýôåñï
I/O CPU ðëáßóéï ðëáßóéï
ÁíÜãíùóç A
ÁíÜãíùóç B Åðåîåñãáóßá A A
ÁíÜãíùóç C Åðåîåñãáóßá B A/C B
ÁíÜãíùóç D Åðåîåñãáóßá C C B/D
.. .. .. ..
. . . .
Áí ïé õðïëïãéóìïß åßíáé ðïëý óýíèåôïé êáé ÷ñïíïâüñïé, ôüôå ç ÷ñÞóç ôùí äýï
ðëáéóßùí äåí Ý÷åé ôüóï èåáìáôéêÜ áðïôåëÝóìáôá. Óôï Ó÷Þìá 11.13 ðáñïõóéÜ-
æåôáé ìßá ôÝôïéá ðåñßðôùóç, üðïõ ï ÷ñüíïò CPU åßíáé ôñéðëÜóéïò áðü ôï ÷ñüíï
åéóüäïõ/åîüäïõ. Áí ïé áðïìïíùôéêÝò ìíÞìåò Ý÷ïõí ìÝãåèïò ßóï ìå ìßá Üôñáêôï,
278 ÊåöÜëáéï 11. ÖõóéêÞ ÏñãÜíùóç ÂÜóåùí ÄåäïìÝíùí
Ðñþôï Äåýôåñï
I/O CPU ðëáßóéï ðëáßóéï
ÁíÜãíùóç A
ÁíÜãíùóç B Åðåîåñãáóßá A A
ÁíáìïíÞ Åðåîåñãáóßá A A B
ÁíáìïíÞ Åðåîåñãáóßá A A B
ÁíÜãíùóç C Åðåîåñãáóßá B A/C B
ÁíáìïíÞ Åðåîåñãáóßá B C B
ÁíáìïíÞ Åðåîåñãáóßá B C B
.. .. .. ..
. . . .
ôüôå ï ÷ñüíïò ðïõ áðáéôåßôáé ãéá ôç óåéñéáêÞ åðåîåñãáóßá ôïõ áñ÷åßïõ åßíáé:
dte × b × ebt
üðïõ ôï t åßíáé ï ëüãïò ôïõ ÷ñüíïõ CPU ðñïò ôï ÷ñüíï åéóüäïõ/åîüäïõ. Ãå-
íéêÜ ìåãáëýôåñïò ðáñáëëçëéóìüò ìðïñåß íá åðéôåõ÷èåß ìå ôç ÷ñÞóç ðïëëáðëþí
áðïìïíùôéêþí ìíçìþí (multiple buffering). ÁëëÜ êáé ðÜëé, áí ï ÷ñüíïò åðå-
îåñãáóßáò åßíáé ìåãáëýôåñïò áðü ôï ÷ñüíï åéóüäïõ/åîüäïõ, ôüôå ç ôå÷íéêÞ ôïõ
double buffering åßíáé åðáñêÞò.
ìÝóï Þ ôçí êñõöÞ ìíÞìç ôïõ åëåãêôÞ êáé áíôéãñÜöåôáé óôçí áðïìïíùôéêÞ ìíÞìç.
Áí áõôÞ åßíáé ðëÞñçò, ôüôå ðñÝðåé íá åðéëåãåß ìßá óåëßäá êáé íá áíôéêáôáóôáèåß
áðü ôç íÝá. Ï ðëÞèïò áðïôõ÷çìÝíùí ðñïóðåëÜóåùí êáèïñßæåé ôï ÷ñüíï ðïõ
áðáéôåßôáé ãéá ôçí ðñïóðÝëáóç äåäïìÝíùí áðü ôï öõóéêü ìÝóï áðïèÞêåõóçò. Óå
ìßá ðñþôç ðñïóÝããéóç Ý÷åé ðñïôáèåß íá åðéëÝãåôáé ìå ôñüðï ôõ÷áßï (random) ç
ðñïò áíôéêáôÜóôáóç óåëßäá. Óôç âéâëéïãñáößá Ý÷ïõí ðñïôáèåß ðïëëïß áëãüñéè-
ìïé áíôéêáôÜóôáóçò ìå äéáöïñåôéêÞ åðßäïóç êáé ðïëõðëïêüôçôá, ìå êõñéüôåñïõò
ôïõò åîÞò:
• Ðñþôç åñ÷üìåíç, ðñþôç áíôéêáèéóôþìåíç - FIFO (first-in first-out). Ç
ìÝèïäïò áíôéêáèéóôÜ ôéò óåëßäåò ìå ôç óåéñÜ ðïõ Ý÷ïõí åéóá÷èåß óôçí áðï-
ìïíùôéêÞ ìíÞìç. ÅðïìÝíùò, áíôéêáèßóôáôáé ç óåëßäá ðïõ âñßóêåôáé ôïí
ðåñéóóüôåñï ÷ñüíï áðïèçêåõìÝíç óôçí áðïìïíùôéêÞ ìíÞìç. Ç ìÝèïäïò
åßíáé ðïëý áðëÞ óôçí õëïðïßçóÞ ôçò, üìùò õóôåñåß óå åðßäïóç åðåéäÞ äåí
ëáìâÜíåé õð’ üøç ôç ÷ñçóéìüôçôá ôçò óåëßäáò, ìå áðïôÝëåóìá íá Ý÷ïõìå
áõîçìÝíï áñéèìü áðïôõ÷éþí.
• Ëéãüôåñï óõ÷íÜ ÷ñçóéìïðïéïýìåíç - LFU (least-frequently used). Ç ìÝèï-
äïò ëáìâÜíåé õð’ üøç ôç óõ÷íüôçôá ÷ñçóéìïðïßçóçò êÜèå óåëßäáò. Óåëßäåò
ðïõ ÷ñçóéìïðïéïýíôáé óõ÷íÜ äåí ðñÝðåé íá áíôéêáôáóôáèïýí. Ç åðßäïóç
ôçò LFU åßíáé êáôÜ ðïëý êáëýôåñç ôçò FIFO, üìùò Ý÷åé áõîçìÝíç ðïëõ-
ðëïêüôçôá åðåéäÞ êÜèå öïñÜ ðïõ ðñáãìáôïðïéåßôáé ðñïóðÝëáóç ðñÝðåé
íá åíçìåñþíïíôáé ïé ôéìÝò ôùí óõ÷íïôÞôùí. Ôï ìåéïíÝêôçìá ôçò ìåèüäïõ
åßíáé üôé ìßá óåëßäá ðïõ ÷ñçóéìïðïéÞèçêå ðïëý óõ÷íÜ óôï ðáñåëèüí êáé
äåí ÷ñçóéìïðïéåßôáé ðëÝïí, èá áñãÞóåé íá áíôéêáôáóôáèåß.
• Ëéãüôåñï ðñüóöáôá ÷ñçóéìïðïéçìÝíç - LRU (least-recently used). Ç ìÝ-
èïäïò åßíáé ç óõ÷íüôåñá ÷ñçóéìïðïéïýìåíç ìÝèïäïò áíôéêáôÜóôáóçò óåëß-
äùí. Ç óåëßäá ðïõ åðéëÝãåôáé ðñïò áíôéêáôÜóôáóç åßíáé áõôÞ ðïõ äåí Ý÷åé
÷ñçóéìïðïéçèåß ãéá ôï ìåãáëýôåñï ÷ñïíéêü äéÜóôçìá. ÅðïìÝíùò, óåëßäåò
ðïõ äåí ÷ñçóéìïðïéïýíôáé ãéá ìåãÜëá ÷ñïíéêÜ äéáóôÞìáôá èá åðéëåãïýí ãéá
áíôéêáôÜóôáóç, óå áíôßèåóç ìå áõôÝò ðïõ ÷ñçóéìïðïéÞèçêáí ðñüóöáôá êáé
ðáñáìÝíïõí óôç áðïìïíùôéêÞ ìíÞìç. Ç ðïëéôéêÞ áõôÞ õëïðïéåßôáé ìå ôç
âïÞèåéá ìßáò ïõñÜò, óôï ôÝëïò ôçò ïðïßáò ôïðïèåôïýíôáé ïé äéåõèýíóåéò ôùí
ðëáéóßùí ðïõ Ý÷ïõí pin count ßóï ìå 0. ¸ôóé ùò èýìá åðéëÝãåôáé ôï ðëáß-
óéï ðïõ âñßóêåôáé óôçí êåöáëÞ ôçò ïõñÜò. Ìå âÜóç ôçí áíôßèåôç ëïãéêÞ
Ý÷åé ðñïôáèåß ç ìÝèïäïò Ðåñéóóüôåñï ðñüóöáôá ÷ñçóéìïðïéçìÝíç - MRU
(most recently used) ÷ùñßò üìùò éäéáßôåñç åöáñìïãÞ.
• ÙñïëïãéáêÞ (clock). ÐáñáëëáãÞ ôçò ðñïçãïýìåíçò ðïëéôéêÞò, ç ïðïßá äåí
äéá÷åéñßæåôáé êÜðïéá ïõñÜ áëëÜ óôçñßæåôáé óå ìßá ìåôáâëçôÞ (current), ðïõ
280 ÊåöÜëáéï 11. ÖõóéêÞ ÏñãÜíùóç ÂÜóåùí ÄåäïìÝíùí
ÐáñÜäåéãìá
Èåùñïýìå üôé ôá äåäïìÝíá åßíáé áðïèçêåõìÝíá óå ôÝóóåñéò óåëßäåò Ó1, Ó2, Ó3,
Ó4. ¸óôù üôé ôï óýóôçìá äçìéïõñãåß ôçí åîÞò áêïëïõèßá áíáöïñþí óôéò óåëßäåò
áõôÝò:
ÕðïèÝóôå üôé ç áðïìïíùôéêÞ ìíÞìç ìðïñåß íá äå÷èåß ôï ðïëý ôñåéò óåëßäåò êáé
üôé áñ÷éêÜ åßíáé êåíÞ. ÅîåôÜæïõìå ôçí åðßäïóç ôùí ìåèüäùí FIFO êáé LRU óå
ó÷Ýóç ìå ôïí áñéèìü áðïôõ÷éþí ðïõ åìöáíßæåé ç êÜèå ìßá. Óôï Ó÷Þìá 11.14
ðáñïõóéÜæåôáé ç êáôÜóôáóç ôçò áðïìïíùôéêÞò ìíÞìçò ìåôÜ áðü êÜèå áíáöïñÜ
óåëßäáò. Ìßá óåëßäá ðáñïõóéÜæåôáé óêéáóìÝíç üôáí åßíáé ç åðüìåíç ðïõ èá
áíôéêáôáóôáèåß. Ï êýêëïò äßðëá óôçí áðïìïíùôéêÞ ìíÞìç äçëþíåé üôé óôç óõ-
ãêåêñéìÝíç áíáöïñÜ Ý÷ïõìå áðïôõ÷ßá. Ðáñáôçñïýìå üôé ç ìÝèïäïò LRU Ý÷åé
êáëýôåñç áðüäïóç áðü ôçí FIFO ãéá ôç óõãêåêñéìÝíç áêïëïõèßá áíáöïñþí. Ãéá
ðåñéóóüôåñåò óåëßäåò êáé ìåãáëýôåñåò ÷ùñçôéêüôçôåò ôçò áðïìïíùôéêÞò ìíÞìçò
ç äéáöïñÜ óôçí áðüäïóç åßíáé ìåãáëýôåñç.
Σ 1
Σ 1 Σ 1
Σ 2
Σ 1 Σ 2 Σ 1 Σ 2
Σ 3
Σ 1 Σ 2 Σ 3 Σ 1 Σ 2 Σ 3
Σ 4
Σ 4 Σ 2 Σ 3 Σ 4 Σ 2 Σ 3
Σ 2
Σ 4 Σ 2 Σ 3 Σ 4 Σ 2 Σ 3
Σ 2
Σ 4 Σ 2 Σ 3 Σ 4 Σ 2 Σ 3
Σ 1
Σ 4 Σ 1 Σ 3 Σ 4 Σ 2 Σ 1
Σ 2
Σ 4 Σ 1 Σ 2 Σ 4 Σ 2 Σ 1
Σ 1
Σ 4 Σ 1 Σ 2 Σ 4 Σ 2 Σ 1
Σ 1
Σ 4 Σ 1 Σ 2 Σ 4 Σ 2 Σ 1
11.6 Óýíïøç
Ç öõóéêÞ ïñãÜíùóç ôùí äåäïìÝíùí ôçò âÜóçò ó÷åôßæåôáé Üìåóá ìå ôçí áðü-
äïóç ôïõ óõóôÞìáôïò. Ãéá ôï ëüãï áõôü, ðïëëÝò áðü ôéò ëåéôïõñãßåò äéá÷åßñéóçò
áñ÷åßùí ðïõ ðáñáäïóéáêÜ âñßóêïíôáé óôç äéêáéïäïóßá ôïõ ëåéôïõñãéêïý óõóôÞ-
ìáôïò åêôåëïýíôáé áðü ôï ÓÄÂÄ.
Ôá äåäïìÝíá ôçò âÜóç áðïèçêåýïíôáé óå áñ÷åßá. ÊÜèå áñ÷åßï áðïôåëåßôáé
áðü Ýíá óýíïëï åêôÜóåùí. Ç Ýêôáóç óôç óõíÝ÷åéá äéá÷ùñßæåôáé óå óåëßäåò, êáé
ôÝëïò êÜèå óåëßäá ðåñéÝ÷åé Ýíá óýíïëï åããñáöþí óôáèåñïý Þ ìåôáâëçôïý ìÞêïõò,
áíáëüãùò ìå ôçí õëïðïßçóç.
Ç ìåôáöïñÜ äåäïìÝíùí áðü êáé ðñïò ôç äåõôåñåýïõóá ìíÞìç ðñáãìáôïðïéåß-
ôáé ìå ôç âïÞèåéá ôùí áðïìïíùôéêþí ìíçìþí. Ç áðïìïíùôéêÞ ìíÞìç åßíáé Ýíá
ôìÞìá ôçò êýñéáò ìíÞìçò ôïõ óõóôÞìáôïò ôï ïðïßï ÷ñçóéìïðïéåßôáé áðïêëåéóôéêÜ
áðü ôï ÓÄÂÄ. Ç áíáæÞôçóç ôùí äåäïìÝíùí ðñáãìáôïðïéåßôáé ðñþôá óôç áðïìï-
íùôéêÞ ìíÞìç, êáé ìüíï óå ðåñßðôùóç áðïôõ÷ßáò ðñáãìáôïðïéåßôáé ðñïóðÝëáóç
óôç äåõôåñåýïõóá ìíÞìç. Ìå ôïí ôñüðï áõôü ï ÷ñüíïò åðåîåñãáóßáò ìåéþíåôáé
äñáóôéêÜ, êáèþò ìßá ðñïóðÝëáóç óôï Ý÷åé áñêåôÜ ìåãáëýôåñï ÷ñïíéêü êüóôïò
óå ó÷Ýóç ìå ìßá ðñïóðÝëáóç óôçí êýñéá ìíÞìç.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 283
11.3. Ãéá ôá äåäïìÝíá ôçò ¢óêçóçò 11.1, íá õðïëïãéóèåß ï ìÝóïò ÷ñüíïò ðïõ
áðáéôåßôáé ãéá
11.4. ¸óôù üôé ìüíï 90% ôùí öïéôçôþí Ý÷ïõí ôçëÝöùíï, åíþ ëåßðïõí ôá äå-
äïìÝíá ó÷åôéêÜ ìå ôç äéåýèõíóç êáé ôïí ôñüðï åéóáãùãÞò ãéá ôï 60% êáé ôï
80% ôùí öïéôçôþí, áíôéóôïß÷ùò. Íá åðéëõèåß êáé ðÜëé ç ¢óêçóç 11.1 èåùñþíôáò
åããñáöÝò ìåôáâëçôïý ìÞêïõò êáé ÷ñçóéìïðïéþíôáò ôç ìÝèïäï ôùí äéá÷ùñéóôþí.
Ðïéü ìÝãåèïò ãéá ôïõò äéá÷ùñéóôÝò èåùñåßôáé ëïãéêü;
284 ÊåöÜëáéï 11. ÖõóéêÞ ÏñãÜíùóç ÂÜóåùí ÄåäïìÝíùí
11.6. Äßíåôáé áñ÷åßï ìå 30.000 åããñáöÝò ôùí 100 bytes. ÊÜèå ìÞíá ãßíïíôáé
1000 ôõ÷áßåò ðñïóðåëÜóåéò ãéá ìßá åããñáöÞ êáé ìßá óåéñéáêÞ ðñïóðÝëáóç üëïõ
ôïõ áñ÷åßïõ êáôÜ êÜäïõò. Áí óôçí êýñéá ìíÞìç õðÜñ÷åé Ýíáò ðßíáêáò ìå ôéò
äéåõèýíóåéò ôùí êÜäùí ðïõ ðåñéÝ÷ïõí ôéò åããñáöÝò, ôüôå ðïéü åßíáé ôï âÝëôéóôï
ìÝãåèïò ôïõ êÜäïõ êáé ðüóï åßíáé ôï áíôßóôïé÷ï êüóôïò ãéá ôéò ëåéôïõñãßåò áõôÝò;
Íá âñåèïýí ïé áíôßóôïé÷åò ôéìÝò üôáí óå ìßá óåéñéáêÞ áíÜãíùóç áíôéóôïé÷ïýí
10.000 ôõ÷áßåò ðñïóðåëÜóåéò.
11.7. ¸óôù üôé ôï ðñïçãïýìåíï áñ÷åßï åßíáé áðïèçêåõìÝíï óå äßóêï ÉÂÌ 3380.
Ðïéü åßíáé ôï êüóôïò ãéá ôçí áíÜãíùóç ïëüêëçñïõ ôïõ áñ÷åßïõ êáôÜ åããñáöÝò
êáé êáôÜ óåëßäåò üôáí ï êÜäïò áðïôåëåßôáé áðü 9600, 19.200 êáé 48.000 bytes.
11.8. Íá âñåèåß ï ÷ñüíïò ðïõ áðáéôåßôáé áðü ìßá óõóêåõÞ ÉÂÌ 3380, ãéá ìßá
ôñïðïðïßçóç áñ÷åßïõ ðïõ áðáñôßæåôáé áðü 10.000 óåëßäåò ôùí 2.400 bytes, áí ï
êÜäïò áðïôåëåßôáé áðü 1, 2 Þ 10 óåëßäåò êáé ôÝëïò áí ï êÜäïò Ý÷åé ôï ìÝãåèïò
åíüò ôïìÝá.
11.11. Ôé óçìáßíåé ç Ýêöñáóç üôé ìßá óåëßäá åßíáé êáñöùìÝíç óôç äåîáìåíÞ
ìíçìþí; Ðïéüò åßíáé õðåýèõíïò ãéá ôï êÜñöùìá êáé ôï îåêÜñöùìá ôùí óåëßäùí;
11.13. ¸óôù üôé ìßá óõóêåõÞ äßóêùí CD ðñüêåéôáé ìå ôç âïÞèåéá ìßáò äéåðáöÞò
íá óõíäåèåß ìå Ýíá ìéêñïûðïëïãéóôÞ ãéá áðïèÞêåõóç áñ÷åßùí. ¸íáò äßóêïò CD
áðïèçêåýåé 60 ëåðôÜ ìïõóéêÞò, åíþ ï êáôÜëïãïò ôïõ ìðïñåß íá ðåñéÝ÷åé ìÝ÷ñé
99 åéóüäïõò. Ç ôá÷ýôçôá ðåñéóôñïöÞò åßíáé 500 óôñïöÝò/ëåðôü êáé ç ôá÷ýôçôá
ìåôáöïñÜò äåäïìÝíùí åßíáé 100 bytes/ms. Ç êåöáëÞ áíÜãíùóçò/áðïèÞêåõóçò
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 285
11.14. ¸íá áñ÷åßï áðïôåëåßôáé áðü 4 óåëßäåò (Ó1, Ó2, Ó3 êáé Ó4). ÕðïèÝóôå üôé
ç áðïìïíùôéêÞ ìíÞìç ìðïñåß íá áðïèçêåýóåé 3 óåëßäåò. Áí ðñáãìáôïðïéçèïýí
ïé áêüëïõèåò áíáöïñÝò óåëßäùí Ó1, Ó1, Ó2, Ó3, Ó4, Ó1, Ó2, Ó4, Ó4, Ó1, Ó4, Ó4,
Ó3, Ó2, Ó1, Ó3, Ó4 íá äþóåôå ôá ðåñéå÷üìåíá ôçò áðïìïíùôéêÞò ìíÞìçò óå êÜèå
áíáöïñÜ èåùñþíôáò üôé ï áëãüñéèìïò áíôéêáôÜóôáóçò óåëßäùí åßíáé ï LRU.
Ï êáôÜëïãïò åßíáé ìßá äïìÞ ðïõ õëïðïéåß ìßá óõíÜñôçóç: ôï üñéóìá ôçò óõíÜñ-
ôçóçò åßíáé ç ôéìÞ ôïõ êëåéäéïý, åíþ ç ôéìÞ ôçò óõíÜñôçóçò åßíáé ï áñéèìüò ôçò
åããñáöÞò. ÄçëáäÞ, åßíáé äõíáôü ìå ôç âïÞèåéá ôïõ êáôáëüãïõ íá âñåèåß ï áñéè-
ìüò (Þ ç èÝóç) ìßáò åããñáöÞò ìå âÜóç ôï êëåéäß ôçò. ¸íáò Üëëïò ôñüðïò ãéá ôçí
åðßôåõîç áõôïý ôïõ óêïðïý åßíáé ç ìÝèïäïò ôïõ êáôáêåñìáôéóìïý, ðïõ äåí áðáé-
ôåß ìßá óõãêåêñéìÝíç äïìÞ üðùò ï êáôÜëïãïò, áëëÜ õðïöÝñåé áðü ôï ðñüâëçìá
ôùí óõíùíõìéþí.
ÃåíéêÜ, ï êáôÜëïãïò åßíáé áíåîÜñôçôïò áðü ôï áñ÷åßï, êáé ëïãéêÜ áëëÜ êáé
öõóéêÜ. Ôï êüóôïò áíáæÞôçóçò óôïí êáôÜëïãï åßíáé ó÷åôéêÜ ìéêñü, êáé óå êÜèå
ðåñßðôùóç ðïëý ìéêñüôåñï áðü ôï êüóôïò áíáæÞôçóçò ïëüêëçñçò ôçò åããñáöÞò
êáô’ åõèåßáí ìÝóá óôï áñ÷åßï. Óå Ýíáí êáôÜëïãï ôï êëåéäß ìðïñåß íá åßíáé Ýíá
ìüíï ÷áñáêôçñéóôéêü, Ýíá ôìÞìá ÷áñáêôçñéóôéêïý Þ óõíäõáóìüò ðïëëþí ÷áñá-
êôçñéóôéêþí. ÃåíéêÜ, ôï ìÞêïò ìßáò åããñáöÞò êáôáëüãïõ ðñÝðåé íá êñáôçèåß üóï
ôï äõíáôü ìéêñüôåñï. Óå áðëïýò êáôáëüãïõò êÜèå åããñáöÞ áðïôåëåßôáé áðü ôçí
ôéìÞ ôïõ êëåéäéïý (Þ áíôéóôïß÷ùò, ôéìÝò êëåéäéþí) êáé ôïí áíôßóôïé÷ï äåßêôç. Ìé-
êñÝò åããñáöÝò óôïí êáôÜëïãï åðéôñÝðïõí ìåãáëýôåñï óõíôåëåóôÞ ïìáäïðïßçóçò,
ïðüôå Ýôóé åðéôõã÷Üíåôáé ïéêïíïìßá óôï ÷þñï áðïèÞêåõóçò êáé óôï ÷ñüíï åéóü-
äïõ/åîüäïõ ôùí äåäïìÝíùí. Åðßóçò, ìðïñåß íá õðÜñ÷åé ìüíï Ýíáò êáôÜëïãïò,
287
288 ÊåöÜëáéï 12. ÄåíäñéêÝò ÌÝèïäïé ÐñïóðÝëáóçò
áëëÜ ìðïñåß íá õðÜñ÷ïõí êáé ðåñéóóüôåñïé ôïõ åíüò êáôÜëïãïé ãéá Ýíá óõãêå-
êñéìÝíï áñ÷åßï. Óôï Ó÷Þìá 12.1 ðáñïõóéÜæåôáé äéáãñáììáôéêÜ ìßá ðåñßðôùóç
áñ÷åßïõ ìå äýï äéáöïñåôéêïýò áíåîÜñôçôïõò êáôáëüãïõò.
? ?
Êýñéï áñ÷åßï äåäïìÝíùí
Óôá Ó÷Þìáôá 12.3 êáé 12.4 ðáñïõóéÜæïíôáé äýï ðáñáäåßãìáôá ïìïãåíïýò êáé
åôåñïãåíïýò äÝíäñïõ, áíôéóôïß÷ùò. Ìßá âáóéêÞ äéáöïñÜ ìåôáîý åôåñïãåíþí êáé
ïìïãåíþí äÝíäñùí åßíáé ôï ýøïò ôïõ äÝíäñïõ, ðïõ Ý÷åé ùò áðïôÝëåóìá äéáöïñå-
ôéêÞ åðßäïóç óôçí áíáæÞôçóç. Ç ìÝóç ôéìÞ ðñïóðåëÜóåùí ãéá áíáæÞôçóç åßíáé
ìåãáëýôåñç ãéá ôá åôåñïãåíÞ äÝíäñá, ãéáôß ç áíáæÞôçóç öèÜíåé ïðùóäÞðïôå
ìÝ÷ñé ôá öýëëá ôïõ äÝíäñïõ. Ôï ó÷åôéêü ðëåïíÝêôçìá ôùí ïìïãåíþí äÝíäñùí
áíôéóôáèìßæåôáé áðü ôïí åðéðëÝïí áðáéôïýìåíï ÷þñï ãéá äåßêôåò.
"v
ÃÃÃZ``
à à ÃÃà "" Z `````
à à " Z ```
ÃÃÃ
v "
v Zv ``v
½¯ LZ ½¯ Z
L ½ ¯ Z
L ½¯ LZ
½¯ L Z ½¯ L Z ½¯ L Z ½¯ L Z
½ ¯ L Z ½ ¯ L Z ½ ¯ L Z ½ ¯ L Z
C ¶¤S
¶¤S C ¶¤S
C ¶¤S
C ¶¤S
C ¶¤S
C ¶¤S
C ¶¤S
C ¶¤S
C ¶¤S
C ¶¤S
C ¶¤S
C ¶¤CS ¶¤S
C ¶¤S
C ¶¤CS
Óôï äÝíäñï ôïõ Ó÷Þìáôïò 12.4 ï ëüãïò äéáêëÜäùóçò (branching factor, fanout)
åßíáé m=4, ïðüôå ôï äÝíäñï óôá 3 åðßðåäá ôïõ ìðïñåß íá áðïèçêåýóåé 64 êëåéäéÜ.
290 ÊåöÜëáéï 12. ÄåíäñéêÝò ÌÝèïäïé ÐñïóðÝëáóçò
12.1 Â-äÝíäñá
Ç äïìÞ áõôÞ ðñïôÜèçêå áðü ôïõò Bayer êáé McCreight ôï 1972 [Bayer 1972].
ËÝãåôáé üôé ç ïíïìáóßá ôïõ äÝíäñïõ, ôï "Â", ðñïÝñ÷åôáé áðü ôï åðþíõìï ôïõ
Bayer, Þ áðü ôçí ïíïìáóßá ôçò åôáéñåßáò Boeing üðïõ åñãáæüôáí ï Âayer, Þ
áêüìç üôé ðñïÝñ÷åôáé áðü ôç ëÝîç balanced (éóïæõãéóìÝíï). Ôï âÝâáéï åßíáé üôé
äåí ðñïÝñ÷åôáé áðü ôç ëÝîç binary (äõáäéêü).
Ôï Â-äÝíäñï åßíáé ìßá ìåñéêÞ ðåñßðôùóç ôïõ äÝíäñïõ áíáæÞôçóçò m äñüìùí
(m-way search tree). Óýìöùíá ìå Ýíáí ïñéóìü, ùò Â-äÝíäñï ôÜîçò m ïñßæåôáé
ôï ïìïãåíÝò äÝíäñï ìå ôá åîÞò ÷áñáêôçñéóôéêÜ:
• ïé åóùôåñéêïß êüìâïé (åêôüò ôçò ñßæáò) Ý÷ïõí ôï åëÜ÷éóôï dm/2e ðáéäéÜ êáé
ôï ìÝãéóôï m ðáéäéÜ,
A 5
© HH
©© H
B 3 G 11
¢¢ AA ¢¢ AA
D 1 2 E 4 Z 8 9 H 14 16
n = mh − 1
Óõíåðþò ç ôéìÞ ôïõ ýøïõò åíüò Â-äÝíäñïõ ðåñéêëåßåôáé ìåôáîý ôùí ïñßùí:
n+1
logm (n + 1) ≤ h ≤ 1 + logm/2
2
Ç åýñåóç ôçò âÝëôéóôçò ôéìÞò ôïõ m åßíáé Ýíá åíäéáöÝñïí ðñüâëçìá. Óå
ìßá ðñáêôéêÞ õëïðïßçóç åíüò êáôáëüãïõ ìå ôç äïìÞ ôïõ Â-äÝíäñïõ ïé åããñáöÝò
èá áðïôåëïýíôáé áðü ìßá ôñéÜäá ðåäßùí: ôï êëåéäß, ôï äåíäñéêü äåßêôç êáé ôï
äåßêôç ôùí äåäïìÝíùí (áãíïþíôáò ôï ìÝãåèïò ôïõ åðéðëÝïí äåíäñéêïý äåßêôç
áíÜ êüìâï). ÅðïìÝíùò óõíïëéêÜ ôï ìÝãåèïò åíüò êüìâïõ åßíáé m × (K + 2P )
bytes ðåñßðïõ. Ï ÷ñüíïò ãéá ôçí áíÜãíùóç åíüò ôõ÷áßïõ êüìâïõ åßíáé:
K + 2P
s+r+m×
t0
ÄïèÝíôïò ôïõ êüìâïõ ç åýñåóç åíüò êëåéäéïý ìðïñåß íá ãßíåé ìå äõáäéêÞ áíáæÞ-
ôçóç óå ÷ñüíï:
c × log m + d
üðïõ ôá c êáé d åßíáé óôáèåñÝò. Áðëïðïéþíôáò ôïí ôýðï áõôü ðñïêýðôåé üôé óôç
÷åéñüôåñç ðåñßðôùóç ôï ýøïò åßíáé:
log n+1
2
e×
log m
üðïõ ôï e óôáèåñÜ. ÅðïìÝíùò ï ìÝãéóôïò ÷ñüíïò áíáæÞôçóçò äßíåôáé áðü ôïí
ôýðï: Ã !
n+1 s + r + d + m×(K+2P
t0
)
e × log × +c
2 log m
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 293
(á) åéóáãùãÞ 10 Á 5
» » H
»»» HH
 3 à 9 11
© HH
¢¢ AA ©© H
Ä 1 2 Å 4 Æ 8 È 10 Ç 14 16
¢¢ AA ¢¢ AA ¢¢ AA
Ä 1 2 Å 4 Æ 6 É 8 È 10 Ç 14 16
(ä) åéóáãùãÞ 13 Î 9
» XX
»» XXX
»»» X
Á 5 Í 13
© H © H
©© HH ©© HH
 3 à 7 Ê 11 Ì 15
¢¢ AA ¢¢ AA ¢¢ AA ¢¢ AA
Ä 1 2 Å 4 Æ 6 É 8 È 10 Ç 12 Ë 14 Ê 16
Á 10
(á)
³ ³ ```
```
³³
³ `
`
 3 6 à 13 17 20 23
¡ Q ³³ ´ aa
¡ Q
Q ³³ ´
³ ´ @
@ aa
1 2 4 5 7 8 9 11 12 14 15 16 18 19 21 22 24 25 26
Ä Å Æ Ç È É Ê Ë
(ã) äéáãñáöÞ 2 Á 13
³³ PP
³³
³ PP
P
 7 10 à 17 20 23
H ´ H
%% ee HH ´
´ @
@ HH
1 3 4 6 8 9 11 12 14 15 16 18 19 21 22 24 25
Ä Æ Ç È É Ê Ë
(ä) äéáãñáöÞ 17 A 13
!! PP
!! PP
P
B 7 10 Ã 16 20 23
© ©
©© @
@ ©© ¡
¡ @
@
1 3 4 6 8 9 11 12 14 15 18 19 21 22 24 25
Ä Æ H È I K Ë
(å) äéáãñáöÞ 10 A 13
!! PP
!! PP
P
B 6 9 Ã 16 20 23
" @ © ¡
"
" @ ©© ¡ @
@
1 3 4 7 8 11 12 14 15 18 19 21 22 24 25
Ä Z H È I K Ë
(óô) äéáãñáöÞ 13 A 16
XX
!! XXX
!!
B 6 12 Ã 20 23
" @ ¡ @
"
" @ ¡ @
1 3 4 7 8 9 11 14 15 18 19 21 22 24 25
Ä Z È I K Ë
(æ) äéáãñáöÞ 20 B 6 12 16 23
à XXX
ÃÃÃ ©© HH
ÃÃÃ © H XXX
1 3 4 7 8 9 11 14 15 18 19 21 22 24 25
Ä Z È I Ë
@¡ @¡@¡
¡@ ¡@¡@
¢ @ " Q
" Q
¢ @ " Q
@¡@¡ @¡@¡ @¡ @¡ @¡
¡@¡@ ¡@¡@ ¡@ ¡@ ¡@
Óôïí Ðßíáêá 12.1 ãéá êÜèå äïìÞ äßíïíôáé ç ìÝóç ôéìÞ ðñïóðåëÜóåùí ãéá åðé-
ôõ÷Þ áíáæÞôçóç, êáèþò êáé ï óõíïëéêüò êáôáëáìâáíüìåíïò ÷þñïò, áíôéóôïß÷ùò.
Áðü ôïí ðßíáêá áõôüí ðñïêýðôåé ï åîÞò êáíüíáò:
Ç äéáðßóôùóç áõôÞ äéêáéïëïãåßôáé áðü ôï ãåãïíüò üôé ïé äïìÝò (â) êáé (óô), ðïõ
êáôáëáìâÜíïõí ôïí åëÜ÷éóôï ÷þñï ôùí 9 êüìâùí, Ý÷ïõí ÷ñïíéêü êüóôïò 2,60 ðïõ
åßíáé ìüëéò 8,3% ðåñéóóüôåñï áðü ôçí åëÜ÷éóôç ôéìÞ ôùí 2,40 ðñïóðåëÜóåùí.
300 ÊåöÜëáéï 12. ÄåíäñéêÝò ÌÝèïäïé ÐñïóðÝëáóçò
v
© © HH
© HH
© © Hv
(á) v v (â)
¡@ ¡@ ´Q
¡ @ ´ Q
@ ¡ ´ Q
¡
v @v ¡
v @v ´
v Qv
¢A ¢A ¢A ¢A ¡@ ¡@
¢ A ¢ A ¢ A ¢ A ¡ @ ¡ @
¢
v Av v
¢ Av ¢
v Av v
¢ Av v
¡ v @v ¡
v v @v
¡@ ¡@ ¡@ ¡@ ¡@ ¡@ ¡@ ¡@ ¡@ ¡@ ¡@ ¡@ ¡@ ¡@
(ã) !v
! PP ©HH
v (ä)
! P ©
!! PP
PP © HH
v!
! v Pv v©
© v Hv
¢A ¡@ ¡@ ¢A ¢A ¢A
¢ A ¡ @ ¡ @ ¢ A ¢ A ¢ A
¢v Av v
¡ v @v v
¡ v @v ¢
v Av ¢
v Av ¢
v Av
¡ @ ¡ @ ¡@ ¡ @ ¡ @ ¡ @ ¡ @ ¡ @ ¡@ ¡ @ ¡ @ ¡ @ ¡@ ¡@
(å) v v (óô)
© ©HH ´Q
© HH ´ Q
´ Q
v©
© v Hv ´
v Qv
¢A ¢A ¢A ¡@ ¡@
¢ A ¢ A ¢ A ¡ @ ¡ @
¢v Av ¢v Av ¢v Av ¡
v v @v ¡
v v @v
¡ @ ¡ @ ¡@ ¡@ ¡ @ ¡ @ ¡@ ¡ @ ¡ @ ¡@ ¡@ ¡@
(æ) v v (ç)
©a
aa ©a
aa
©© aa ©© aa
v©
© v aav v©
© v aav
¢A ¢A ¡@ ¢A ¢A ¡@
¢ A ¢ A ¡ @ ¢ A ¢ A ¡ @
¢v Av ¢v Av ¡
v v @v ¢
v Av v
¢ Av v
¡ v @v
¡ @ ¡ @ ¡@ ¡ @ ¡ @ ¡ @ ¡ @ ¡@ ¡ @ ¡ @ ¡ @ ¡@ ¡@ ¡ @
(è) v
a v
a (é)
©© aa
a
©© aa
a
©
v©© v
aa
av ©
v ©© v
aa
av
¢A ¢A ¡@ ¢A ¢A ¡@
¢ A ¢ A ¡ @ ¢ A ¢ A ¡ @
¢v Av ¢v Av ¡
v v @v ¢
v Av ¢
v Av ¡
v v @v
¡ @ ¡ @ ¡@ ¡@ ¡ @ ¡ @ ¡ @ ¡@ ¡@ ¡ @ ¡ @ ¡@ ¡@ ¡@
ÁíôéèÝôùò ç äïìÞ (ã), ðïõ åßíáé ç êáëýôåñç áðü ðëåõñÜò ÷ñüíïõ, êáôáëáìâÜíåé
12 êüìâïõò ðïõ åßíáé 33,3% ðåñéóóüôåñï áðü ôçí åëÜ÷éóôç ôéìÞ ôùí 9 êüìâùí.
Ç äéáðßóôùóç áõôÞ áíÞêåé óôïõò Rosenberg êáé Snyder (1981) [Rosenberg 1981].
ÂÝâáéá, ç ìïñöÞ åíüò Â-äÝíäñïõ ðñïóäéïñßæåôáé áðü ôç óåéñÜ Üöéîçò ôùí
êëåéäéþí êáé äåí åßíáé äõíáôüí íá ãßíåé åðéëïãÞ åê ìÝñïõò ôïõ ÷ñÞóôç. Ùóôüóï,
ôï ðñáêôéêü óõìðÝñáóìá åßíáé üôé ìå ìßá Üëëç ðïëéôéêÞ äéá÷åßñéóçò ôùí äéá-
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 301
12.2 Â∗ -äÝíäñá
Ç ìÝóç ôéìÞ ôïõ ðáñÜãïíôá ÷ñçóéìïðïßçóçò ÷þñïõ (Å[U ]=69%) åíüò Â-äÝíäñïõ
åßíáé äõíáôü íá áõîçèåß áí êáôÜ ôçí åéóáãùãÞ åöáñìoóèåß ç åîÞò ôå÷íéêÞ. Áí
êÜðïéá åéóáãùãÞ ðñïêáëÝóåé õðåñ÷åßëéóç, ôüôå íá ìçí ãßíåé äéÜóðáóç (ïðüôå èá
ðñïêýøïõí äýï êüìâïé ìå ðåñéåêôéêüôçôá 50%), áëëÜ êÜðïéá êëåéäéÜ íá áðï-
èçêåõèïýí óå Ýíá ãåéôïíéêü êüìâï ðïõ äåí åßíáé 100% ðëÞñçò. Áí êáé ïé äýï
ãåéôïíéêïß êüìâïé åßíáé ðëÞñåéò, ôüôå äéáóðþíôáé äýï êüìâïé (ï õðåñ÷åéëßæùí êáé
Ýíáò ãåéôïíéêüò) êáé ðñïêýðôïõí ôñåéò. Ìå áõôü ôï ôÝ÷íáóìá ç åëÜ÷éóôç ôéìÞ
ôïõ ðáñÜãïíôá ÷ñçóéìïðïßçóçò ÷þñïõ êáèßóôáôáé Umin =67%, åíþ ìå áíôéêáôÜ-
óôáóç óôïí ôýðï ôïõ Leung) ðñïêýðôåé ìÝóç ôéìÞ Å[U ]=81%. ¢ëëï ðëåïíÝêôçìá
åßíáé üôé ç áíáæÞôçóç ãßíåôáé ôá÷ýôåñá, åíþ ôï ìåéïíÝêôçìá åßíáé ôï áõîçìÝíï
êüóôïò êáôÜ ôéò åéóáãùãÝò êáé ôéò äéáãñáöÝò. Ôá Â∗ -äÝíäñá, ðïõ ðñïôÜèçêáí
åðßóçò áðü ôïõò Bayer êáé McCreight, ïñßæïíôáé êáô’ áíáëïãßá ðñïò ôá Â-äÝíäñá.
Óýìöùíá ìå Ýíáí ïñéóìü ôï Â∗ -äÝíäñï ôÜîçò m åßíáé Ýíá äÝíäñï áíáæÞôçóçò
m äñüìùí üðïõ:
(á) 4 5 10 12 19 52
(â) 12
¡ @
¡ @
4 5 10 19 52 56
(ã) 12 71
»
» »»»» ´´ Q
Q
»
» ´
´ Q
Q
4 5 10 19 52 56 90 100 113 142 146
(ä) 12 71
»
» » »»» ´´ HH
HH
»
» ´
´
4 5 10 19 52 56 90 100 113 142 146 150
(å) 12 71 142
ÃÃÃ ! PP
à à ÃÃà !!! ¢ PP
PP
Ã
à !
! ¢ P
4 5 10 19 52 56 90 100 113 146 150 175 193 202 215
åéóáãùãÞ ôïõ Ýíáôïõ. Óôï Ó÷Þìá 12.11â ðáñïõóéÜæåôáé ç äéÜóðáóç ôçò ñßæáò
êáé ç ãÝíåóç äýï êüìâùí-ðáéäéþí. Ç ñßæá óôï Â∗ -äÝíäñï ìðïñåß íá ðñïóöÝñåé
óôÝãç óå ðåñéóóüôåñá êëåéäéÜ áðü ôçí ôÜîç ôïõ äÝíäñïõ, þóôå ìå ôç äéÜóðáóç
ôçò ñßæáò íá ðñïêýøïõí êüìâïé ðëÞñåéò êáôÜ 67%.
Ç äéáäéêáóßá ôùí åéóáãùãþí óõíå÷ßæåôáé. Ôá êëåéäéÜ 10, 11 êáé 12 êáôåõèý-
íïíôáé óôï äåîéü ðáéäß ôçò ñßæáò ôïõ Â∗ -äÝíäñïõ ôïõ Ó÷Þìáôïò 12.11â êáé ðñï-
êáëïýí ôçí õðåñ÷åßëéóç ôïõ, ü÷é üìùò êáé ôç äéÜóðáóÞ ôïõ. Óôï Ó÷Þìá 8.11ã
ðáñïõóéÜæåôáé ôï Â∗ -äÝíäñï ìåôÜ ôçí åéóáãùãÞ ôïõ êëåéäéïý 13. Åßíáé öáíåñü
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 303
(á) 4 5 10 12 19 52 56 71
(â) 19
´ Q
´ Q
´
´ Q
Q
4 5 10 12 52 56 71 90
(ã) 56
! !! aa
aa
!!
! a
a
4 5 10 12 19 52 71 90 100 113 142 146
(ä) 19 100
³ ³³ PP
PP
³
³³
³ PP
P
4 5 10 12 52 56 71 90 113 142 146 150
(å) 19 142
à XXX
ÃÃ ÃÃÃ ¡ XX
à XXX
ÃÃÃ
à ¡ X
4 5 10 12 52 56 71 90 100 113 146 150 175 193 202 215
üôé ìåñéêÜ êëåéäéÜ Ý÷ïõí ðåñÜóåé óôïí áñéóôåñü ãåéôïíéêü êüìâï ìå áíÜëïãç ñýè-
ìéóç ôùí êëåéäéþí ôçò ñßæáò. Ôï Ó÷Þìá 12.10ã ðáñïõóéÜæåé áíôßóôïé÷ï Â-äÝíäñï
ðïõ ðåñéÝ÷åé ôá ßäéá êëåéäéÜ. Óôçí ðåñßðôùóç áõôÞ êáôáëáìâÜíïíôáé 4 êüìâïé
Ýíáíôé ôùí 3 ôïõ Â∗ -äÝíäñïõ.
Áí õðÜñîåé õðåñ÷åßëéóç óå êüìâï åíüò Â∗ -äÝíäñïõ êáé äåí õðÜñ÷åé ÷þñïò óå
ãåéôïíéêü êüìâï, ôüôå äçìéïõñãåßôáé Ýíáò íÝïò êüìâïò. Ôáõôü÷ñïíá ôá êëåéäéÜ
ôïõ êüìâïõ ðïõ õðåñ÷åéëßæåé êáé åíüò ãåéôïíéêïý êüìâïõ (ìå ðñïôåñáéüôçôá óôá
áñéóôåñÜ) áíáäéáíÝìïíôáé ðëÝïí óôïõò ôñåéò êüìâïõò. Ãéá ðáñÜäåéãìá, Ýóôù üôé
304 ÊåöÜëáéï 12. ÄåíäñéêÝò ÌÝèïäïé ÐñïóðÝëáóçò
óôá äÝíäñá ôùí Ó÷çìÜôùí 12.10ã êáé 12.11ã åéóÜãåôáé ôï êëåéäß 14. Ç åðéëïãÞ ôùí
äýï ìåóáßùí êëåéäéþí ðïõ èá áíÝëèïõí óôï áíþôåñï åðßðåäï ðñïêýðôåé ìå ôçí
åîÞò áðëÞ ìÝèïäï. Ôá êëåéäéÜ ðïõ õðåéóÝñ÷ïíôáé óôç äéáäéêáóßá ôçò áíáäéáíïìÞò
åßíáé ôá êëåéäéÜ ôùí äýï êüìâùí, ôï êëåéäß áðü ôï áíþôåñï åðßðåäï êáé ôï åéóá-
ãüìåíï êëåéäß, Üñá ôï ðëÞèïò êëåéäéþí åßíáé 2m. Ôï ðñþôï êëåéäß ðïõ åðéëÝãåôáé
åßíáé ôï a=d(2m + 1)/3e-ïóôü, åíþ ôï äåýôåñï åßíáé ôï d(2m+1−a)/2e-ïóôü. Ôá
Ó÷Þìáôá 12.10ä êáé 12.11ä äåß÷íïõí ôç íÝá ìïñöÞ ôùí äÝíäñùí. Áí êáé ôá äýï
äÝíäñá Ý÷ïõí áðü ôÝóóåñéò êüìâïõò, åíôïýôïéò ïé äýï êüìâïé ôïõ Â-äÝíäñïõ åßíáé
ðëÞñåéò êáôÜ 50% êáé Ýíáò êáôÜ 100%, åíþ üëïé ïé êüìâïé ôïõ Â∗ -äÝíäñïõ åßíáé
ðëÞñåéò êáôÜ 50%. Ç äéáäéêáóßá ôùí áößîåùí íÝùí åããñáöþí óõíå÷ßæåôáé ìå ôá
êëåéäéÜ 15, 16, 17 êáé 18. Ïé íÝåò ìïñöÝò ôùí äÝíäñùí öáßíïíôáé óôá Ó÷Þìáôá
12.10å êáé 12.11å.
¼ðùò öáßíåôáé ôá Â∗ -äÝíäñá åßíáé ðëÝïí ÷ñïíïâüñá áðü ôá Â-äÝíäñá êáôÜ
ôçí åéóáãùãÞ êáé êáôÜ ôç äéáãñáöÞ, üìùò êÜíïõí êáëýôåñç ÷ñÞóç ôïõ ÷þñïõ
áðü ôá Â-äÝíäñá, åðåéäÞ äéáêñßíïíôáé áðü ìéêñüôåñï ýøïò êáé ëéãüôåñïõò êüì-
âïõò ãéá ôï ßäéï ðëÞèïò êëåéäéþí. ÅðéðëÝïí ðñïóöÝñïõí êáëýôåñïõò ÷ñüíïõò
áíáæÞôçóçò, äçëáäÞ ç ìÝóç ôéìÞ ôùí ðñïóðåëÜóåùí ãéá áíáæÞôçóç åíüò êëåéäéïý
óå äÝíäñï ôÜîçò m ìå n êëåéäéÜ óôç ÷åéñüôåñç ðåñßðôùóç åßíáé:
n+1
Taccess ≤ 1 + log(2m−2)/3
2
Óôçí åñãáóßá [Eisenbarth 1982] Ý÷åé áðïäåé÷èåß üôé ç ðéèáíüôçôá íá ãßíåé ìßá
Þ ðåñéóóüôåñåò äéáóðÜóåéò êáôÜ ôçí åéóáãùãÞ ôïõ (n+1)-êëåéäéïý åßíáé:
1
+ O(m−2 )
m−1
Óõãêñßíïíôáò ôïí ôýðï áõôü ìå ôïí áíôßóôïé÷ï ôýðï áðü ôá Â-äÝíäñá ðñïêýðôåé
áìÝóùò üôé óôá Â∗ -äÝíäñá ãßíåôáé óðáíéüôåñá äéÜóðáóç.
Áðü ôçí ðñïçãïýìåíç áíÜðôõîç ãßíåôáé öáíåñü üôé ãéá ôçí õëïðïßçóç ôçò
äïìÞò áõôÞò ðñÝðåé íá èåùñçèåß äéáöïñåôéêüò ôýðïò åããñáöÞò ãéá ôç ñßæá. Ëé-
ãüôåñï óõ÷íÜ óõíáíôÜôáé óôç âéâëéïãñáößá Ýíáò ðáñáëëáãìÝíïò ïñéóìüò ôïõ Â∗ -
äÝíäñïõ, üðïõ ï êüìâïò ôçò ñßæáò äÝ÷åôáé ôï ßäéï ìÝãéóôï ðåñéå÷üìåíï ìå ôïõò
õðüëïéðïõò êüìâïõò, åíþ ç ðïëéôéêÞ äéá÷åßñéóçò ôçò õðåñ÷åßëéóçò åßíáé êïéíÞ. Ç
ôå÷íéêÞ ôçò äéÜóðáóçò äýï êüìâùí óå ôñåéò ìðïñåß íá ãåíéêåõèåß ìå äéÜóðáóç
ôñéþí êüìâùí óå ôÝóóåñéò, ôåóóÜñùí êüìâùí óå ðÝíôå ê.ï.ê. Óôéò ðåñéðôþóåéò
áõôÝò ç åëÜ÷éóôç ôéìÞ ôïõ ðáñÜãïíôá ÷ñçóéìïðïßçóçò ÷þñïõ èá éóïýôáé áíôéóôïß-
÷ùò ìå 75%, 80% ê.ï.ê., åíþ ç ìÝóç ôéìÞ ðñïêýðôåé áðü ôïí ôýðï ôïõ Leung.
ÂÝâáéá åßíáé åõíüçôï üôé ôï ôßìçìá Ýíáíôé ôïõ êÝñäïõò áõôïý óå êáôáëáìâáíü-
ìåíï ÷þñï åßíáé ôï áõîçìÝíï êüóôïò óôïí áðáéôïýìåíï ÷ñüíï ãéá åéóáãùãÝò êáé
äéáãñáöÝò.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 305
12.3 Â+ -äÝíäñá
Ç äïìÞ ðïõ ÷ñçóéìïðïéåßôáé ðåñéóóüôåñï óå åìðïñéêÜ ðáêÝôá ãéá ôç äçìéïõñãßá
êáôáëüãùí åßíáé ôá Â+ -äÝíäñá. Ç äïìÞ áõôÞ ðñïôÜèçêå áðü ôïí Knuth óôï
âéâëßï [Knuth 1973] êáé ïñßæåôáé ùò åîÞò. Óå Ýíá Â+ -äÝíäñïõ âáèìïý d:
• ç ñßæá Ý÷åé ôï åëÜ÷éóôï äýï ðáéäéÜ, åêôüò áí åßíáé öýëëï,
56
³³³ PP
PP
³
)³
³ PP
q
10 19 90 113
´ Q ´ Q
´ Q ´ Q
+́ ? Q
s +́ ? s
Q
4 5 - 10 12 - 19 52 - 56 71 - 90 100 - 113 142
G
» aa
»»» aa
»»»
BH CY S
©©
HH ¡ @
©
© H
H ¡ @
A B BH C CY F G R S SC
3 8 4 5 1 2 10 23 2 10
29 110 51 56 9 25 132 237 20 102
P
i
PP Y
HH» H
Y
HH : ³³
»
»» 1 HH ³³³
HHH
H
Y Y 1
6PP»» H»H
³
³H
³
H³³ 6
HH
» P ³ ³
»»» ³ P HHHH
P³ ³³ HH H
9 20 25 29 51 56 102 110 132 237
@ ¡ H
H ©
©
HH
@ ¡ ©©
25 102 132
aa »»
aa »» »»»
51
ôçóç ìå âÜóç åßôå ôï ðñùôåýïí, åßôå ôï äåõôåñåýïí êëåéäß. ¼ìùò áí ìßá åããñáöÞ
Ý÷åé ðïëëÜ ðåäßá, äåí åßíáé áðáñáßôçôï íá äçìéïõñãçèåß Ýíáò êáôÜëïãïò ãéá
êÜèå ðåäßï, ãéáôß Ýôóé ç ßäéá ðëçñïöïñßá èá åðáíáëáìâáíüôáí äýï öïñÝò êáé
èá ÷ñåéáæüôáí ðïëëáðëÜóéïò ÷þñïò áðü ôï ÷þñï ôùí êõñßùò äåäïìÝíùí. ¸íá
Üëëï óïâáñü ìåéïíÝêôçìá åßíáé üôé ôï êüóôïò åíçìÝñùóçò ôùí êáôáëüãùí èá
Þôáí éäéáßôåñá ìåãÜëï áêüìç êáé ãéá ìßá áðëÞ åéóáãùãÞ íÝáò åããñáöÞò. Åõèýíç
ôïõ äéá÷åéñéóôÞ ôïõ ÓÄÂÄ åßíáé íá áðïöáóßóåé ôï ðüóïõò êáé ðïéïýò êáôáëüãïõò
ðñÝðåé íá äçìéïõñãÞóåé, ãéáôß áí ãßíåé åñþôçìá ìå âÜóç äåõôåñåýïí êëåéäß ãéá
ôï ïðïßï äåí õðÜñ÷åé áíôßóôïé÷ïò êáôÜëïãïò, ôüôå ç áíáæÞôçóç ôáõôßæåôáé ìå ôçí
áíáæÞôçóç óå áñ÷åßï óùñïý.
Ç áíáæÞôçóç óå Â+ -äÝíäñá ãßíåôáé ìå ôçí åîÞò ìÝèïäï. Îåêéíþíôáò áðü ôç
ñßæá, ïé äåßêôåò ðñïò ôï êáôþôåñï åðßðåäï ïíïìÜæïíôáé áðü 0 ùò k êáé ôá êëåéäéÜ
áðü 1 ùò k. Áí ôï êëåéäß ðïõ áíáæçôåßôáé åßíáé ìéêñüôåñï áðü ôï ðñþôï êëåéäß ôçò
ñßæáò, ôüôå ëáìâÜíåôáé ï äåßêôçò õð’ áñéèìü 0. ÃåíéêÜ, áí ôï áíáæçôïýìåíï êëåéäß
åßíáé ìåãáëýôåñï áðü ôï i-ïóôü êëåéäß êáé ìéêñüôåñï áðü ôï (i+1)-ïóôü êëåéäß,
ôüôå áêïëïõèåßôáé ï i-ïóôüò äåßêôçò. Ç äéáäéêáóßá áõôÞ åêôåëåßôáé ãéá üëá ôá
åðßðåäá ôïõ äÝíäñïõ. ¸ôóé ç áíáæÞôçóç öèÜíåé óôá öýëëá, üðïõ åíôïðßæåôáé
ç ó÷åôéêÞ åããñáöÞ áí ôï Â+ -äÝíäñï åßíáé ðñùôåýùí êáôÜëïãïò, åíþ áí ôï Â+ -
äÝíäñï åßíáé äåõôåñåýùí êáôÜëïãïò ôüôå áêïëïõèåßôáé ï ó÷åôéêüò äåßêôçò ðñïò
ôçí áíôßóôïé÷ç åããñáöÞ.
n × (s + r + dtt)
Texhaustive (primary) = bk × (s + r + dtt) =
Bkf r × ln 2
Áõôüò ï ôýðïò ðñïûðïèÝôåé üôé óå êÜèå öýëëï õðÜñ÷åé Ýíáò äåßêôçò ðñïò ôï
åðüìåíï öýëëï. Áí áõôÞ ç óõíèÞêç äåí éó÷ýåé, ôüôå åíáëëáêôéêÜ ìðïñåß íá
åöáñìïóèåß ìßá åíäïäéáôåôáãìÝíç äéÜó÷éóç ìå áìåëçôÝï åðéðëÝïí ÷ñïíéêü êü-
óôïò. Ãéá ðáñÜäåéãìá, áí õðïôåèåß üôé ï âáèìüò ôïõ äÝíäñïõ åßíáé 100, ôüôå
ï ëüãïò äéáêëÜäùóçò åßíáé 140. ¢ñá, ãéá êÜèå 140 öýëëá ðñÝðåé íá ãßíåé ìßá
áêüìç åðßóêåøç óôïí êüìâï ðáôÝñá, ðïõ Þäç âñßóêåôáé óå êÜðïéá áðïìïíùôéêÞ
ìíÞìç.
ÐñÝðåé íá óçìåéùèåß üôé ôï ÷ñïíéêü êüóôïò ðïõ ðñïêýðôåé áðü ôç ó÷Ýóç
áõôÞ åßíáé ìåãáëýôåñï áðü ôï êüóôïò åîáíôëçôéêÞò áíÜãíùóçò åíüò óåéñéáêïý
ôáîéíïìçìÝíïõ áñ÷åßïõ, åðåéäÞ ïé äéáäï÷éêÝò åéóáãùãÝò êáé äéáãñáöÝò óõíôåëïýí
óôç öõóéêÞ áðïìÜêñõíóç ëïãéêÜ äéðëáíþí êüìâùí. ¸ôóé, áðáéôïýíôáé óõíå÷þò
íÝåò ðñïóðåëÜóåéò ìå êüóôïò åíôïðéóìïý ôïõ êáôÜëëçëïõ êõëßíäñïõ.
Ï áðáéôïýìåíïò ÷ñüíïò ãéá ôçí åîáíôëçôéêÞ áíÜãíùóç åíüò Â+ -äÝíäñïõ ðïõ
÷ñçóéìåýåé ùò äåõôåñåýùí êáôÜëïãïò åßíáé:
s + r + btt
Texhaustive (secondary) = n × (s + r + dtt) + n ×
2d × ln 2
Ï ðñþôïò üñïò áíáöÝñåôáé óôï êüóôïò áíÜãíùóçò ôùí åããñáöþí ìßá ðñïò ìßá,
åíþ ï äåýôåñïò áíáöÝñåôáé óôï êüóôïò áíÜãíùóçò ôïõ ôåëåõôáßïõ åðéðÝäïõ ôïõ
Â+ -äÝíäñïõ. Ï äåýôåñïò üñïò åßíáé óçìáíôéêÜ ìéêñüôåñïò êáé ìðïñåß íá ðáñá-
ëåéöèåß.
Tinsert = Taccess + 2r
åßíáé Ýíáò ëüãïò ðïõ ôï áñ÷åßï áõôü êáôáëáìâÜíåé ðåñéóóüôåñï ÷þñï áðü Ýíá
áñ÷åßï óùñïý.
Áí ôï Â+ -äÝíäñï ÷ñçóéìïðïéåßôáé ùò äåõôåñåýùí êáôÜëïãïò, ôüôå êÜèå åîù-
ôåñéêüò êüìâïò ðñÝðåé íá ðåñéÝ÷åé áðü d ùò 2d êëåéäéÜ. ¸ôóé, óôïí ðáëéü êáé óôï
íÝï êüìâï áðïèçêåýïíôáé d êáé d+1 êëåéäéÜ, áíôéóôïß÷ùò. Êáé óôéò äýï ðåñéðôþ-
óåéò, ç ôéìÞ ôïõ ìéêñüôåñïõ êëåéäéïý ôïõ íÝïõ êüìâïõ êáèþò êáé ç äéåýèõíóç ôïõ
íÝïõ êüìâïõ ðñÝðåé íá áíÝëèïõí ðñïò ôïí êüìâï ðáôÝñá. Áí áõôü ôï æåýãïò ðïõ
áíôëåßôáé ðñïò ôá åðÜíù äåí ÷ùñÜ óôïí ðáôÝñá êüìâï, ôüôå ðñÝðåé íá ãßíåé íÝá
äéÜóðáóç. Ùóôüóï, óôï óçìåßï áõôü õðÜñ÷åé ç åîÞò ìéêñÞ äéáöïñÜ. ¼ôáí óôïõò
åóùôåñéêïýò êüìâïõò õðÜñîåé äéÜóðáóç, ôüôå ôá ðñþôá d êëåéäéÜ áðïèçêåýï-
íôáé óôïí ðáëéü êüìâï, ôá ôåëåõôáßá d êëåéäéÜ áðïèçêåýïíôáé óôï íÝï êüìâï,
åíþ ôï ìåóáßï êëåéäß áíôëåßôáé ðñïò ôï áíþôåñï åðßðåäï. ÄçëáäÞ, ç äéáöïñÜ
Ýãêåéôáé óôï ãåãïíüò üôé ôï ìåóáßï êëåéäß áíÝñ÷åôáé óôï áíþôåñï åðßðåäï áðü
ôïõò åîùôåñéêïýò êüìâïõò, áëëÜ äåí áíÝñ÷åôáé áðü ôïõò åóùôåñéêïýò êüìâïõò.
Ç äéáäéêáóßá áõôÞ ìðïñåß íá óõíå÷éóèåß ìÝ÷ñé ôç ñßæá. Óôï Ó÷Þìá 12.14 äßíåôáé
Ýíá ðáñÜäåéãìá åéóáãùãÞò ôïõ êëåéäéïý 12 óôï Â+ -äÝíäñï ðïõ åßíáé âáèìïý 2.
19 71 146 175
» PPXXX
» »»» ´´ @ PP XX
»
» » ´ @ PP XX
X
4 5 10 12 19 52 56 71 90 100 113 146 150 175 193
100
```
! !! ```
!! ``
`
19 71 146 175
© H ´
© A HH ´ @
©© A H ´ @
4 5 10 12 19 52 56 71 90 100 113 142 146 150 175 193
1
+ O(Bkf r−2 )
Bkf r × ln 2
312 ÊåöÜëáéï 12. ÄåíäñéêÝò ÌÝèïäïé ÐñïóðÝëáóçò
Óôçí ðåñßðôùóÞ ìáò èåùñåßôáé ðñïóåããéóôéêÜ üôé åßíáé éóïðßèáíï óå Ýíáí åîùôå-
ñéêü êüìâï íá åßíáé áðïèçêåõìÝíåò Bkf r/2, ..., Bkf r åããñáöÝò. Ç ðéèáíüôçôá
ìßá íÝá åããñáöÞ íá ìçí ÷ùñÜ óå êÜðïéïí åîùôåñéêü êüìâï åßíáé Bkf1r/2 = Bkf2
r.
2
¢ñá, ç ðéèáíüôçôá ìßá íÝá åããñáöÞ íá ÷ùñÜ óôïí åîùôåñéêü êüìâï åßíáé 1- Bkf r .
Ìå ôï ßäéï óêåðôéêü ç ðéèáíüôçôá íá äéáóðáóèåß ï ðáôñéêüò êüìâïò åßíáé 1/d.
Óõíåðþò, èåùñþíôáò üôé üëá ôá åðßðåäá ôïõ äÝíäñïõ ðëçí ôùí äýï ôåëåõôáßùí
åßíáé áðïèçêåõìÝíá óôçí êýñéá ìíÞìç, ôåëéêÜ ðñïêýðôåé üôé ôï êüóôïò åéóáãùãÞò
óå Â+ -äÝíäñï åßíáé:
µ ¶
2 s + r + btt
Tinsert = Taccess + 2r + × (s + r + dtt) + (s + r + btt) +
Bkf r d
ÅðåéäÞ ï âáèìüò ôïõ äÝíäñïõ åßíáé ìåãÜëïò (üðùò d=100), ìðïñåß ç ó÷Ýóç íá
áðëïðïéçèåß: µ ¶
2
Tinsert = 1 + × Taccess + 2r
Bkf r
Áí Bkf r=10 êáé ôï ìÝãåèïò ôçò óåëßäáò åßíáé 2400 bytes, ôüôå ðñïêýðôåé üôé ï
áðáéôïýìåíïò ÷ñüíïò ãéá ìßá åéóáãùãÞ åßíáé:
µ ¶
2
Tinsert = 1 + × 25, 1 + 16, 6 = 77 ms
5
ôïõ ðñùôåýïíôïò êëåéäéïý. Ôï ðëåïíÝêôçìá ôùí óõóôçìÜôùí áõôþí åßíáé üôé äåí
åíçìåñþíïíôáé ãéá êÜèå åéóáãùãÞ üëïé ïé äåõôåñåýïíôåò êáôÜëïãïé. Áðü ôçí
áëç ðëåõñÜ, ôï ìåéïíÝêôçìá åßíáé üôé ãéá ôçí åýñåóç ìßáò åããñáöÞò ìå âÜóç ôï
äåõôåñåýïí êëåéäß ðñÝðåé íá ãßíåé ðñïóðÝëáóç êáé óôïõò äýï êáôáëüãïõò.
(á) 12 52
´ HH
´´ H
H
4 5 10 12 19 52 56 71 90
(â) äéáãñáöÞ 52 12 52
´ Q
´´ QQ
4 5 10 12 19 56 71 90
(ã) äéáãñáöÞ 19 10 52
¡ Q
¡ QQ
4 5 10 12 56 71 90
(ä) äéáãñáöÞ 90 10 52
¡ @
¡ @
4 5 10 12 56 71
(å) äéáãñáöÞ 12 52
¢ @
¢ @
4 5 10 56 71
áðü d êëåéäéÜ, ôüôå ôï ðñüâëçìá ìåôáöÝñåôáé êáôÜ Ýíá åðßðåäï ðñïò ôç ñßæá.
Óôï Ó÷Þìá 12.16 ðáñïõóéÜæåôáé Ýíá ðáñÜäåéãìá äéáãñáöÞò óå Â+ -äÝíäñï ðïõ
êáôáëÞãåé óå óõã÷þíåõóç åóùôåñéêþí êüìâùí.
(á) 56
³ XX
³ ³³ XXX
³³ X
X
10 19 90 113 146
¡ @ © © ¡ @
¡ @ ©© ¡ @
4 5 10 12 19 52 56 71 90 100 113 142 146 150
(â) äéáãñáöÞ 4 90
! aa
!! aa
!! a
19 56 113 146
" l ¡ @
"" l ¡ @
5 10 12 19 52 56 71 90 100 113 142 146 150
ñßæá, þóôå ï ëüãïò äéáêëÜäùóçò óôá õøçëÜ åðßðåäá íá åßíáé ìåãÜëïò. Ôï ÷áñá-
êôçñéóôéêü ôçò äïìÞò áõôÞò êáé ôùí ó÷åôéêþí áëãïñßèìùí åßíáé üôé åöáñìüæïíôáé
ìüíï óå óôáôéêÜ êáé ãíùóôÜ áðü ôçí áñ÷Þ äåäïìÝíá.
Óôçí êáôçãïñßá ôùí Â-äÝíäñùí ìéêñÞò ôÜîçò åìðßðôïõí ðïëëÝò ðáñáëëáãÝò.
Ôá 2-3 äÝíäñá êáé ôá 1-2 äÝíäñá åßíáé Â-äÝíäñá ôÜîçò 3 êáé 2 áíôéóôïß÷ùò, äçëáäÞ
ðåñéÝ÷ïõí 1 ùò 2 êáé 0 ùò 1 åããñáöÝò áíôéóôïß÷ùò. Ôá 2-3 äÝíäñá áäåëöþí (2-3
Brother trees) åßíáé 2-3 äÝíäñá ìå ôïí åðéðñüóèåôï ðåñéïñéóìü üôé Ýíáò êüìâïò
ìå ìßá åããñáöÞ ðñÝðåé íá Ý÷åé ïðùóäÞðïôå áäåëöü êüìâï ìå äýï åããñáöÝò.
Ðáñüìïéïò ðåñéïñéóìüò éó÷ýåé êáé óôá 1-2 äÝíäñá áäåëöþí. Ôá 2-3 äÝíäñá õéþí
(2-3 Son trees) åßíáé 2-3 äÝíäñá ìå ôïí åðéðñüóèåôï ðåñéïñéóìü üôé äåí ìðïñåß
íá õðÜñîåé Ýíá æåýãïò êüìâùí ìå ó÷Ýóç ðáôÝñá-ðáéäéïý, üðïõ êáé ïé äýï êüìâïé
íá Ý÷ïõí ìßá ìüíï åããñáöÞ. Ðáñüìïéïò ðåñéïñéóìüò éó÷ýåé ãéá ôá 1-2 äÝíäñá
õéþí (1-2 Son trees). Åßíáé åõêïëïíüçôï üôé ïé ðåñéïñéóìïß áõôïß êáèéóôïýí
äýóêïëï êáèÞêïí ôçí áíÜðôõîç ôùí ó÷åôéêþí áëãïñßèìùí äéá÷åßñéóçò ôùí äïìþí.
¼ëåò áõôÝò ïé ðáñáëëáãÝò áðïôåëïýí ðåñéóóüôåñï èåùñçôéêÝò áíáæçôÞóåéò ðáñÜ
ïñãáíþóåéò ìå ðñáêôéêÞ åöáñìïãÞ. Ï åíäéáöåñüìåíïò áíáãíþóôçò ãéá ôéò äïìÝò
áõôÝò ìðïñåß íá áíáôñÝîåé óôï âéâëßï ôïõ Gonnet [Gonnet 1984], üðïõ èá âñåé
ðåñéóóüôåñá óôïé÷åßá êáé áíáöïñÝò.
Ôá ÄõáäéêÜ Â-äÝíäñá åßíáé ìßá óõãêåêñéìÝíç õëïðïßçóç ôùí 2-3 äÝíäñùí ìå
÷ñÞóç óõíäåäåìÝíùí ëéóôþí ìÝóá óå êÜèå êüìâï. ¸ôóé óôç äïìÞ óõíõðÜñ÷ïõí
ïé äåíäñéêïß äåßêôåò êáé ïé äåßêôåò ôùí êüìâùí, ïðüôå ôåëéêÜ ôï äÝíäñï ìïéÜæåé
ìå Ýíá áðëü äõáäéêü äÝíäñï. Óôçí åêäï÷Þ áõôÞ ï äåîéüò äåíäñéêüò êüìâïò ìðï-
ñåß íá êáôáóôåß ïñéæüíôéïò ðñïò ôïí áäåëöü êüìâï, åðïìÝíùò óå êÜèå åããñáöÞ
÷ñåéÜæåôáé êáé Ýíá åðéðëÝïí ðåäßï ðïõ äçëþíåé áí ï äåîéüò äåßêôçò åßíáé êá-
ôáêüñõöïò Þ ïñéæüíôéïò. Ôá óõììåôñéêÜ äõáäéêÜ Â-äÝíäñá åðéôñÝðïõí êáé ôïí
áñéóôåñü äåßêôç íá åßíáé ïñéæüíôéïò [Bayer 1972b]. ÌÜëéóôá óçìåéþíåôáé üôé ôá
äÝíäñá AVL åßíáé õðïðåñßðôùóç ôùí óõììåôñéêþí äõáäéêþí Â-äÝíäñùí.
¼ëåò áõôÝò ïé ðáñáëëáãÝò åßíáé äïìÝò ðïõ ëüãù åðßäïóçò áíáöÝñïíôáé
êõñßùò óôçí êýñéá ìíÞìç. ÁíôéèÝôùò, ôá ÐñïèåìáôéêÜ Â+ -äÝíäñá, ðïõ ðñïôÜ-
èçêáí áðü ôïõò Bayer êáé Unteraurer [Bayer 1977], Ý÷ïõí ðáñüìïéá äïìÞ ìå ôá
Â+ -äÝíäñá êáé åßíáé ìßá Üëëç ðáñáëëáãÞ ãéá õëïðïßçóç êõñßùò óå äåõôåñåýïõóá
ìíÞìç. Ç âáóéêÞ éäÝá åßíáé üôé áí ôï êëåéäß åßíáé óõìâïëïóåéñÜ, ôüôå åßíáé ðñïôé-
ìüôåñï óôïõò åóùôåñéêïýò êüìâïõò ôïõ êáôáëüãïõ íá áðïèçêåýåôáé ìüíï åêåßíï
ôï ðñüèåìá ôïõ êëåéäéïý, ôï ïðïßï åßíáé áðáñáßôçôï ãéá ôç äéáäéêáóßá áíáæÞôç-
óçò. ¸ôóé ï êáôÜëïãïò ðåñéÝ÷åé ôïõò ëåãüìåíïõò äéá÷ùñéóôÝò (separators) ðïõ
åßíáé ìåôáâëçôïý ìÞêïõò. Ôï ìÞêïò ôùí äéá÷ùñéóôþí ðïéêßëåé áðü Ýíá ìüíï
byte ìÝ÷ñé êáé Ýíá ðëÞñåò êëåéäß, êáèþò åîáñôÜôáé áðü ôéò ôéìÝò ôùí ãåéôïíéêþí
êëåéäéþí ôùí åããñáöþí. ¸íá ðáñÜäåéãìá öáßíåôáé óôï Ó÷Þìá 12.17, üðïõ ï
318 ÊåöÜëáéï 12. ÄåíäñéêÝò ÌÝèïäïé ÐñïóðÝëáóçò
··· f ···
³ ³³ PP
PP
³³
³ P
P
base bit data file graph tree
? ? ? ? ?
Gregg Hildreth Johns Johnson Jones King
12.5 Óýíïøç
Ïé äåíäñéêÝò äïìÝò ðñïóðÝëáóçò Ý÷ïõí åöáñìïóèåß ìå ìåãÜëç åðéôõ÷ßá ãéá ôçí
ïñãÜíùóç ôùí áðïèçêåõìÝíùí äåäïìÝíùí. Ïé äåíäñéêÝò äïìÝò ðñïóöÝñïõí áðï-
äïôéêÞ åéóáãùãÞ, äéáãñáöÞ, åíçìÝñùóç êáé áíáæÞôçóç äåäïìÝíùí. Åðßóçò Ý÷ïõí
ðïëý êáëÞ áðüäïóç óôá åñùôÞìáôá ðåñéï÷Þò.
Ç åöáñìïãÞ ôùí äåíäñéêþí äïìþí Ý÷åé óçìáíôéêÜ ðëåïíåêôÞìáôá Ýíáíôé ôçò
óåéñéáêÞò áíáæÞôçóçò äåäïìÝíùí. Óôçí ðåñßðôùóç ôçò óåéñéáêÞò áíáæÞôçóçò
ãéá ôçí áíáæÞôçóç åíüò Þ ðåñéóóïôÝñùí åããñáöþí ðñÝðåé íá ðñïóðåëáóèåß ôï
óýíïëï ôçò ÂÜóçò ÄåäïìÝíùí. ÁíôéèÝôùò, ìå ôçí åöáñìïãÞ ôùí äåíäñéêþí äï-
ìþí äåí åîåôÜæåôáé ìåãÜëï ìÝñïò ôçò âÜóçò, äéüôé åßíáé âÝâáéï üôé äåí ðåñéÝ÷åé
äåäïìÝíá ðïõ ó÷åôßæïíôáé ìå ôï åñþôçìá.
Ç äïìÞ ôïõ Â-äÝíäñïõ åßíáé áðü ôéò ðëÝïí äéáäåäïìÝíåò êáé ÷ñçóéìïðïéåßôáé
åõñýôáôá áðü ôá ÓÄÂÄ ùò ðñùôåýùí Þ äåõôåñåýùí êáôÜëïãïò. Ïé äïìÝò Â+ -
äÝíäñï êáé Â∗ -äÝíäñï áðïôåëïýí ôéò ãíùóôüôåñåò ðáñáëëáãÝò ôïõ. ÊÜèå êüìâïò
ôïõ äÝíäñïõ áðïôåëåß ìßá óåëßäá äåõôåñåýïõóáò ìíÞìçò. ÓçìáíôéêÞ ðáñÜìåôñïò
ðïõ åðçñåÜæåé ôçí åðßäïóç åßíáé ï ðáñÜãïíôáò äéáêëÜäùóçò ðïõ óôçí ïõóßá
êáèïñßæåé êáé ôï ýøïò ôïõ äÝíäñïõ.
12.2. Â-äÝíäñï ôÜîçò m=6 ðåñéÝ÷åé 17 åããñáöÝò ìå êëåéäéÜ 8, 13, 26, 28, 41, 49,
54, 67, 83, 84, 96, 107, 132, 146, 151, 154, 170 êáé áðïôåëåßôáé áðü ôñßá åðßðåäá.
Íá ó÷åäéáóèåß ôï äÝíäñï êáé íá öáíåß ç äïìÞ ôïõ ìåôÜ ôéò äéáãñáöÝò ôùí åããñá-
öþí ìå êëåéäéÜ 83, 67 êáé 26.
12.3. Íá ó÷åäéáóèåß ôï Â∗ -äÝíäñï ôÜîçò m=6 ðïõ äçìéïõñãåßôáé ìåôÜ áðü äéá-
äï÷éêÝò åéóáãùãÝò ôùí åããñáöþí ìå êëåéäéÜ 25, 26, 24, 39, 32, 9, 28, 45, 13, 41,
5, 23, 19, 27, 6, 14, 34, 21, 31, 11 êáé 28. Óôç óõíÝ÷åéá íá ó÷åäéáóèåß ç äïìÞ ôïõ
äÝíäñïõ ìåôÜ áðü äéáãñáöÝò ôùí åããñáöþí ìå êëåéäéÜ 26, 21, 11, 9, 45, 13, 39, 6
êáé 14.
12.4. Óôï Â-äÝíäñï ôÜîçò m=3 ôïõ åðüìåíïõ ó÷Þìáôïò ìå x óçìåéþíïíôáé èÝóåéò
åããñáöþí. Óôéò èÝóåéò áõôÝò íá ôïðïèåôçèïýí åããñáöÝò ìå êëåéäéÜ P , Y , A, Q,
F , W , J, T , B, L, M , D êáé U . Íá ó÷åäéáóèåß ôï äÝíäñï êáé íá öáíåß ç äïìÞ
ôïõ ìåôÜ áðü åéóáãùãÞ åããñáöÞò ìå êëåéäß X, äéáãñáöÞ åããñáöÞò ìå êëåéäß Q,
320 ÊåöÜëáéï 12. ÄåíäñéêÝò ÌÝèïäïé ÐñïóðÝëáóçò
@
¡
¡
@
! PP
!!
! PP
@
¡@
@¡
¡ ¡
@ @
¡@
@¡
¡ ¡
@
´ Q ´ Q
´ Q ´ Q
@
¡@
¡
@¡@ @
¡ ¡
¡
@ @
¡
¡
@ @
¡
¡
@ @
¡
¡
@ @
¡@
¡
@¡¡
@
12.5. Èåùñþíôáò ôçí ôå÷íéêÞ ôçò äéÜóðáóçò ôñéþí êüìâùí óå ôÝóóåñéò, íá ó÷å-
äéáóèåß ôï Â∗ -äÝíäñï ôÜîçò m=3 ðïõ äçìéïõñãåßôáé ìåôÜ áðü äéáäï÷éêÝò åéóá-
ãùãÝò ôùí åããñáöþí ìå êëåéäéÜ 25, 26, 24, 39, 32, 9, 28, 45, 13, 41, 5, 23, 19, 27,
6, 14, 34, 21, 31, 11 êáé 28. Óôç óõíÝ÷åéá íá ó÷åäéáóèåß ç äïìÞ ôïõ äÝíäñïõ ìåôÜ
áðü äéáãñáöÝò ôùí åããñáöþí ìå êëåéäéÜ 26, 21, 11, 9, 45, 13, 39, 6 êáé 14.
12.8. Äßíåôáé Ýíá Â+ -äÝíäñï ìå 6.000.000 åããñáöÝò ôùí 400 bytes. Ðüóïò ÷þñïò
áðáéôåßôáé ãéá ôï ôåëåõôáßï åðßðåäï; Ðüóïò åßíáé ï áðáéôïýìåíïò ÷þñïò ãéá ôï
åðßðåäï åðÜíù áðü ôá öýëëá, áí ôï æåýãïò êëåéäß-äåßêôçò áðïôåëåßôáé áðü 12
bytes, åíþ êÜèå êÜäïò áðïôåëåßôáé áðü 1 Þ áðü 4 óåëßäåò; Ãéá êÜèå ðåñßðôùóç
ðüóïò åßíáé ï ÷ñüíïò ãéá ôçí åîáíôëçôéêÞ ôïõ áíÜãíùóç;
12.9. ¸óôù üôé óôï áñ÷åßï ôçò ðñïçãïýìåíçò Üóêçóçò åêôåëåßôáé ìßá åîáíôëç-
ôéêÞ áíÜãíùóç êÜèå 5000 áðëÝò áíáæçôÞóåéò. Ï åóùôåñéêüò êÜäïò Ý÷åé óôáèåñü
ìÝãåèïò ìßá óåëßäá ôùí 2400 bytes. Ðïéü åßíáé ôï âÝëôéóôï ìÝãåèïò ôïõ êÜäïõ
äåäïìÝíùí;
ñïý;
12.11. Ãéá áñ÷åßï ðïõ áðïôåëåßôáé áðü 100.000 åããñáöÝò ôùí 400 bytes êôßæåôáé
ùò äåõôåñåýùí êáôÜëïãïò Â+ -äÝíäñï ìå ìÝãåèïò ôåñìáôéêþí êüìâùí 2400 bytes.
¸óôù üôé ðñÝðåé íá äïèåß ëßóôá åããñáöþí ìå ôéìÞ óôï äåõôåñåýïí ðåäßï ìåãá-
ëýôåñç áðü ìßá óõãêåêñéìÝíç ôéìÞ. Áí ïé êáôÜëëçëåò åããñáöÝò óôçí Ýîïäï åßíáé
25% (Þ 10% Þ 5%) ôïõ óõíüëïõ ôùí åããñáöþí, ìÞðùò åßíáé ðñïôéìüôåñï íá ãßíåé
åîáíôëçôéêÞ áíÜãíùóç ôïõ áñ÷åßïõ êáé êáôüðéí íá ôáîéíïìçèïýí ïé åããñáöÝò
ðñéí äïèïýí óôï ÷ñÞóôç.
12.12. Óå Â+ -äÝíäñï ôÜîçò d=1 êáé Bkf r=2 íá åöáñìïóèåß äéáäï÷éêÜ ï áëãü-
ñéèìïò åéóáãùãÞò ãéá ôéò åããñáöÝò ìå êëåéäéÜ 4, 12, 6, 1, 3, 15, 5, 9, 7, 14, 16, 10
êáé 11. Êáôüðéí íá ãßíïõí äéáäï÷éêÝò äéáãñáöÝò ôùí åããñáöþí ìå êëåéäéÜ 1, 3
êáé 4. Ãéá ôá ßäéá äåäïìÝíá íá åîåôáóèåß Ýíá Â+ -äÝíäñï ôÜîçò d=3 êáé Bkf r=2.
12.14. Ôï áñ÷åßï ôùí 6.000.000 åããñáöþí ôùí 400 bytes åßíáé ðñïôéìüôåñï íá
êôéóèåß ùò Â+ -äÝíäñï ìå 6.000.000 åéóáãùãÝò Þ ìå ôáîéíüìçóç ôùí äåäïìÝíùí
êáé ìåôÜ áðïèÞêåõóç;
12.15. ¸íá áñ÷åßï áðïôåëåßôáé áðü 20.000 åããñáöÝò ìå êëåéäß 9 bytes. Ôï ìÝ-
ãåèïò ôçò óåëßäáò åßíáé 2000 åããñáöÝò, åíþ ï äåßêôçò áðïôåëåßôáé áðü 4 bytes.
Åðßóçò Ýóôùóáí äýï ðåñéðôþóåéò ìÞêïõò åããñáöÞò: 15 Þ 180 bytes. Íá èåùñç-
èïýí ïé åîÞò ðåñéðôþóåéò: óôáôéêü äåíäñéêü áñ÷åßï, óôáôéêüò ðõêíüò êáôÜëïãïò
êáé êýñéï áñ÷åßï, ðñùôåýùí êáé äåõôåñåýùí êáôÜëïãïò Â-äÝíäñïõ êáé êýñéï áñ-
÷åßï. Ãéá êÜèå ðåñßðôùóç íá âñåèåß ôï óõíïëéêü ìÝãåèïò óå óåëßäåò êáé ôï ìÝóï
êüóôïò ðñïóðÝëáóçò.
13
Êáôáêåñìáôéóìüò
Ôá ôõ÷áßá Þ Üìåóá (random, direct) áñ÷åßá åßíáé ìßá åîáéñåôéêÜ ÷ñÞóéìç äïìÞ ãéá
ôç öõóéêÞ ïñãÜíùóç ôùí äåäïìÝíùí, ôüóï óôçí êýñéá üóï êáé óôç äåõôåñåýïõóá
ìíÞìç. Áí ôá áñ÷åßá áõôÜ åßíáé óùóôÜ ó÷åäéáóìÝíá, ôüôå áðïôåëïýí ìßá éäáíéêÞ
ïñãÜíùóç ãéá on-line åöáñìïãÝò, ãéáôß åíôïðßæïõí ôç æçôïýìåíç åããñáöÞ ìå ðïëý
ëßãåò ðñïóðåëÜóåéò (ßóùò êáé ìüíï ìßá). Ôï âáóéêü ìåéïíÝêôçìá ôçò äïìÞò áõôÞò
åßíáé üôé äåí ðñïóöÝñåôáé ãéá óåéñéáêÞ áíÜêôçóç ôáîéíïìçìÝíùí åããñáöþí êáôÜ
ïðïéïäÞðïôå êëåéäß Þ ãéá áíáæçôÞóåéò ðåñéï÷Þò.
Ç âáóéêÞ éäÝá ôçò ìåèüäïõ åßíáé ç åöáñìïãÞ êÜðïéïõ áðëïý áëãåâñéêïý
ìåôáó÷çìáôéóìïý óôçí ôéìÞ ôïõ êëåéäéïý, þóôå íá ðñïêýøåé ç áðüëõôç äéåýèõíóç
ôçò åããñáöÞò. Ç áðüëõôç äéåýèõíóç åîáñôÜôáé áðü ôï õëéêü êáé áðïôåëåßôáé
áðü ôçí ôñéÜäá: áñéèìüò êõëßíäñïõ, áñéèìüò áôñÜêôïõ êáé áñéèìüò åããñáöÞò.
Ùóôüóï, åßíáé äõíáôüí ç ìÝèïäïò íá åöáñìïóèåß êáé êáôÜ ôñüðï ðïõ íá ìçí
åîáñôÜôáé áðü ôï õëéêü.
Ôá êëåéäéÜ ëÝãïíôáé ðõêíÜ (dense) üôáí ïé ôéìÝò ôïõò åßíáé óõíå÷üìåíåò. Óôçí
áðëïýóôåñç ðåñßðôùóç ðõêíþí êëåéäéþí ïé ôéìÝò ôïõò áñ÷ßæïõí áðü ôç ìïíÜäá.
Ãéá ðáñÜäåéãìá, Ýóôù üôé ïé ôéìÝò ôùí êëåéäéþí åßíáé áðü ôï 1 ùò ôï 5000 êáé üôé ç
÷ùñçôéêüôçôá ôùí óåëßäùí åßíáé ìßá åããñáöÞ. Óôçí ðåñßðôùóç áõôÞ äçìéïõñãåßôáé
323
324 ÊåöÜëáéï 13. Êáôáêåñìáôéóìüò
Ýíá áñ÷åßï ôùí 5000 óåëßäùí, ïðüôå ç i-ïóôÞ åããñáöÞ èá áðïèçêåõèåß óôçí (i-
1)-ïóôÞ óåëßäá. Èá ìðïñïýóå ïé ôéìÝò ôùí ðõêíþí êëåéäéþí íá ìçí áñ÷ßæïõí áðü
ôç ìïíÜäá áëëÜ, ãéá ðáñÜäåéãìá, íá êõìáßíïíôáé áðü ôï 10.001 ùò ôï 15.000.
Ôüôå áöáéñþíôáò ìßá óôáèåñÞ ôéìÞ áðü ôçí ôéìÞ ôïõ êëåéäéïý (óôç óõãêåêñéìÝíç
ðåñßðôùóç ôï 10.000), êáé ðÜëé âñßóêåôáé åýêïëá ç êáôÜëëçëç óåëßäá ôïõ áñ÷åßïõ.
Tá áñ÷åßá áõôÜ ëÝãïíôáé áõôïäåéêôïäïôçìÝíá (self-indexing) êáé õëïðïéïýíôáé
áðëïýóôáôá óå üëåò ôéò ãëþóóåò ðñïãñáììáôéóìïý.
Áí ôá êëåéäéÜ äåí åßíáé ðõêíÜ, ôüôå ìå ôçí ôå÷íéêÞ áõôÞ ôï ìåãáëýôåñï ìÝñïò
ôïõ áñ÷åßïõ èá ðáñáìåßíåé êåíü êáé èá óðáôáëçèåß ç äåõôåñåýïõóá ìíÞìç. Ç
ðåñßðôùóç áõôÞ áíôéìåôùðßæåôáé ìåôáó÷çìáôßæïíôáò ôçí ôéìÞ ôïõ êëåéäéïý, Ýôóé
þóôå ôï äéÜóôçìá ôùí êëåéäéþí íá áíôéóôïé÷åß óå Ýíá ðïëý ìéêñüôåñï äéÜóôçìá
ôéìþí äéåõèýíóåùí. Ç ìÝèïäïò áõôÞ ïíïìÜóèçêå áñ÷éêÜ ìåôáó÷çìáôéóìüò ôïõ
êëåéäéïý óå äéåýèõíóç (key-to-address transformation), áëëÜ ôåëéêÜ åðéêñÜôçóå
ï üñïò êáôáêåñìáôéóìüò (hashing), êáé ãé’ áõôü ôá ôõ÷áßá áñ÷åßá ëÝãïíôáé êáé
áñ÷åßá êáôáêåñìáôéóìïý (hashed files).
ÊáôÜ ôç öüñôùóç ôïõ áñ÷åßïõ äåóìåýåôáé êÜðïéïò ÷þñïò ôïõ äßóêïõ, ï ïðïßïò
ïíïìÜæåôáé êýñéá ðåñéï÷Þ (main area). Óå ìåñéêÝò ðáñáëëáãÝò ôçò ìåèüäïõ
ðñïâëÝðåôáé åðéðëÝïí êáé ç ìåëëïíôéêÞ ÷ñÞóç ðåñéï÷Þò õðåñ÷åßëéóçò (overflow
area), ðïõ óõíÞèùò âñßóêåôáé óôïí ßäéï êýëéíäñï ìå ôçí êýñéá ðåñéï÷Þ, þóôå
íá ìçí õðÜñ÷åé ÷ñïíéêü êüóôïò åíôïðéóìïý. ¼ìùò óå Üëëåò ðáñáëëáãÝò äåí
ðñïâëÝðåôáé îå÷ùñéóôÞ ðåñéï÷Þ ãéá ôéò åããñáöÝò õðåñ÷åßëéóçò. ÐáñÜãïíôáò äé-
åõèýíóåùí (address factor) åßíáé ôï êëÜóìá ôïõ ìåãÝèïõò ôçò êýñéáò ðåñéï÷Þò
ðñïò ôï óõíïëéêü ìÝãåèïò ôïõ áñ÷åßïõ. Áí ï ÷þñïò ðïõ Ý÷åé êñáôçèåß áðü ôï
áñ÷åßï äåí áõîïìåéþíåôáé ìå ôçí ðÜñïäï ôïõ ÷ñüíïõ, ôüôå ôï áñ÷åßï åßíáé óôá-
ôéêü. ¼ìùò óôçí ðñÜîç ïé åöáñìïãÝò åßíáé äõíáìéêÝò, äçëáäÞ ÷áñáêôçñßæïíôáé
áðü åéóáãùãÝò êáé äéáãñáöÝò åããñáöþí. ¸ôóé, áðü ôï 1980 êáé åíôåýèåí Ý÷åé
ðñïôáèåß ìßá óåéñÜ äïìþí äõíáìéêþí ôõ÷áßùí áñ÷åßùí ðïõ ìåãåèýíïíôáé êáé
óõññéêíþíïíôáé, áíáëüãùò ìå ôï ðëÞèïò ôùí åéóáãùãþí êáé ôùí äéáãñáöþí åã-
ãñáöþí, áíôéóôïß÷ùò. Ìå Üëëá ëüãéá, ïé äïìÝò áõôÝò äåí ðáñáìÝíïõí ðáèçôéêÝò
óôéò åéóáãùãÝò êáé äéáãñáöÝò åããñáöþí áëëÜ ðñïóáñìüæïíôáé, þóôå êáé íá ìç
ãßíåôáé óðáôÜëç ÷þñïõ áëëÜ êáé ç åðßäïóç íá ìçí åêöõëßæåôáé.
Óôç óõíÝ÷åéá èá åîåôáóèïýí áðü áëãïñéèìéêÞ Þ/êáé áíáëõôéêÞ Üðïøç ïé åîÞò
ïñãáíþóåéò: ï äõíáìéêüò êáôáêåñìáôéóìüò (dynamic hashing), o åðåêôáôüò êá-
ôáêåñìáôéóìüò (extendible hashing), ï åêèåôéêüò êáôáêåñìáôéóìüò ìå ðåñéïñé-
óìÝíï êáôÜëïãï (bounded index exponential hashing), êáé ôÝëïò ï ãñáììéêüò
êáôáêåñìáôéóìüò (linear hashing). ÊÜèå ìßá áðü ôéò ðñïçãïýìåíåò ôå÷íéêÝò ìå
ôá ðñïôåñÞìáôá êáé ôá ìåéïíåêôÞìáôá óå ó÷Ýóç ìå ôéò õðüëïéðåò áðáíôÜ ìå óýí-
èåôïõò áëãïñßèìïõò óôá ðñïâëÞìáôá:
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 325
• ðùò ïé åããñáöÝò áðü ôïõò äýï ðáëéïýò êÜäïõò áðïäßäïíôáé óôï íÝï êÜäï.
6ðñïóðå- ôñåéò
2,5
ëÜóåéò
äýï óå
ìßá èÝóç
1,75
1,5
1,25 äýï
ìßá óýãêñïõóç
1
êáìßá
óýãêñïõóç
0
0 100 200 300 400 500 600 625
Ãéá Üëëåò ôéìÝò ôùí m êáé n ôï ó÷Þìá èá åßíáé ðáñüìïéï. Ï áñéèìüò ôùí âçìÜôùí
áõîÜíåé ðïëý ãñÞãïñá ãéá ìåãáëýôåñá m êáé n êáé ç óõíÜñôçóç ïìáëïðïéåßôáé.
Óôç âéâëéïãñáößá áíáöÝñïíôáé ðïëëÝò ìÝèïäïé ãéá ôçí åýñåóç óõíáñôÞóåùí
êáôáêåñìáôéóìïý ðïõ äåí ðáñÜãïõí óõíþíõìá. Ïé óõíáñôÞóåéò áõôÝò ëÝãïíôáé
ôÝëåéåò (perfect) êáé óõíÞèùò ÷ñçóéìïðïéïýíôáé óôçí ðñÜîç ìüíï óå ìéêñïýò
ðßíáêåò ôçò êýñéáò ìíÞìçò ãéá åéäéêÝò åöáñìïãÝò üðùò, ãéá ðáñÜäåéãìá, óå ìå-
ôáöñáóôÝò ãéá áðïèÞêåõóç äåóìåõìÝíùí ëÝîåùí, óå åðåîåñãáóßá öõóéêÞò ãëþó-
óáò ãéá öéëôñÜñéóìá ëÝîåùí õøçëÞò óõ÷íüôçôáò ê.ë.ð. Áí ìßá ôÝëåéá óõíÜñôçóç
äåóìåýåé ôïí åëÜ÷éóôï äõíáôü ÷þñï, ôüôå ëÝãåôáé åëÜ÷éóôç (minimal). Ìßá åðé-
ðëÝïí éäéáéôåñüôçôá ôùí ôÝëåéùí ìåèüäùí êáôáêåñìáôéóìïý åßíáé üôé óõíÞèùò
ðñïûðïèÝôïõí ôçí åê ôùí ðñïôÝñùí ãíþóç ôùí ôéìþí ôùí êëåéäéþí, ðñïûðüèåóç
ðïõ äåí óõíáíôÜôáé óôçí ðñÜîç. ÌÜëéóôá Ý÷ïõí ðñïôáèåß êáé ôÝëåéåò ìÝèïäïé
êáôáêåñìáôéóìïý ãéá ðåñéðôþóåéò ïãêùäþí óôáôéêþí áëëÜ êáé äõíáìéêþí áñ-
÷åßùí. Ïé ìÝèïäïé áõôÝò áðïôåëïýí ìßá êëÜóç ìåèüäùí ðïõ ïíïìÜæåôáé åîùôå-
ñéêüò ôÝëåéïò êáôáêåñìáôéóìüò (external perfect hashing) êáé äåí èá åîåôáóèåß
óôç óõíÝ÷åéá ëüãù ôçò åîáéñåôéêÞò ðïëõðëïêüôçôÜò ôïõò. Åî Üëëïõ ðáñÜ ôç èå-
ùñçôéêÞ ôïõò áñôéüôçôá, äåí ÷ñçóéìïðïéçèÞêáí åõñÝùò óôçí ðñÜîç ðáñÜ ìüíï
óå ðñùôüôõðá óõóôÞìáôá.
Ï ëüãïò ôùí êáôåéëçììÝíùí èÝóåùí ðñïò ôï óýíïëï ôùí èÝóåùí ôïõ áñ÷åßïõ
ïíïìÜæåôáé ðáñÜãïíôáò öüñôéóçò (load factor, Lf ), êáé éóïýôáé ìå:
n
Lf =
bkm × Bkf r
üðïõ bkm åßíáé ôï ðëÞèïò ôùí êÜäùí óôçí êýñéá ðåñéï÷Þ ôïõ áñ÷åßïõ. ÕðÜñ÷åé
Üìåóç ó÷Ýóç ôçò ôéìÞò ôïõ ðáñÜãïíôá öüñôéóçò êáé ôçò óõ÷íüôçôáò ôùí óõãêñïý-
óåùí. ¼óï ìéêñüôåñïò åßíáé ï ðáñÜãïíôáò öüñôéóçò, ôüóï ìéêñüôåñç åßíáé ç
ðéèáíüôçôá óýãêñïõóçò, êáé ôï áíôßóôñïöï. Áñìïäéüôçôá ôïõ äéá÷åéñéóôÞ ôïõ
ÓÄÂÄ åßíáé íá âñåé ôçí éóïññïðßá ìåôáîý ôïõ ðëÞèïõò ôùí óõãêñïýóåùí êáé ôïõ
ðïóïóôïý á÷ñçóéìïðïßçôïõ ÷þñïõ ôïõ áñ÷åßïõ.
Õðåñ÷åßëéóç óõìâáßíåé üôáí ìßá åããñáöÞ ðñÝðåé íá áðïèçêåõèåß óå Ýíá
ðëÞñç êÜäï. Ôüôå ç åããñáöÞ êáôåõèýíåôáé ãéá áðïèÞêåõóç óå Üëëïí êÜäï.
¼óï ìåãáëýôåñïò åßíáé ï êÜäïò, ôüóï ìéêñüôåñç åßíáé ç ðéèáíüôçôá íá õðÜñ÷åé
õðåñ÷åßëéóç. Ùóôüóï, üóï ìåãáëýôåñï åßíáé ôï ìÝãåèïò ôïõ êÜäïõ, ôüóï ðåñéó-
óüôåñï ÷ñïíïâüñá åßíáé ç ðñïóðÝëáóç óôï äßóêï. ¢ñá, êáé ó’ áõôü ôï óçìåßï
ðñÝðåé íá âñåèåß ìßá éóïññïðßá.
Ç óôáôéóôéêÞ êáôáíïìÞ ðïõ ÷áñáêôçñßæåé ôçí êáôáíïìÞ ôùí åããñáöþí óôïõò
êÜäïõò åßíáé ç äéùíõìéêÞ. Áí ïé åããñáöÝò ìïéñÜæïíôáé ôõ÷áßá óôïõò êÜäïõò, ôüôå
328 ÊåöÜëáéï 13. Êáôáêåñìáôéóìüò
Óôïí Ðßíáêá 13.1 äßíåôáé ç ìÝóç ôéìÞ ôïõ ðïóïóôïý ôùí åããñáöþí ðïõ õðåñ-
÷åéëßæïõí ùò óõíÜñôçóç ôïõ ìåãÝèïõò ôïõ êÜäïõ êáé ôïõ ðáñÜãïíôá öüñôéóçò.
Ôï ìÝãåèïò ôïõ áñ÷åßïõ Ý÷åé ëçöèåß ßóï ìå 200 êÜäïõò.
ÌÝãåèïò ÐáñÜãïíôáò öüñôéóçò
êÜäïõ 50% 55% 60% 65% 70% 75% 80% 85% 90% 95%
2 10,3 11,9 13,6 15,3 16,9 18,7 20,5 22,0 23,7 25,4
3 5,9 7,3 8,8 10,3 11,9 13,6 15,3 17,0 18,8 20,6
5 2,4 3,4 4,5 5,7 7,1 8,6 10,2 11,9 13,7 15,6
8 0,8 1,3 2,0 2,9 3,9 5,2 6,7 8,3 10,0 11,9
12 0,2 0,5 0,8 1,4 2,1 3,1 4,3 5,8 7,5 9,4
17 0,1 0,2 0,3 0,6 1,1 1,9 2,8 4,1 5,7 7,5
23 0,0 0,0 0,1 0,3 0,6 1,1 1,9 3,0 3,0 6,2
• ÌåôáôñïðÞ ôçò ñßæáò (radix conversion). Èåùñåßôáé üôé ç ôéìÞ ôïõ êëåé-
äéïý äåí åßíáé áñéèìüò ôïõ äåêáäéêïý óõóôÞìáôïò êáé åðïìÝíùò ðñÝðåé íá
ìåôáôñáðåß óå áñéèìü ôïõ óõóôÞìáôïò áõôïý. ¸ôóé áí õðïôåèåß üôé ï óõ-
ãêåêñéìÝíïò áñéèìüò Ý÷åé ùò âÜóç ôï 11, ôüôå ìå ôç ìåôáôñïðÞ ðñïêýðôåé:
äåßêôåò ðñïò ôïõò äýï êÜäïõò. ÊáôÜ óýìâáóç, ï áñéóôåñüò êüìâïò äåß÷íåé óôïí
õðÜñ÷ïíôá êÜäï, åíþ ï äåîéüò êüìâïò äåß÷íåé óôï íÝï êÜäï. ÁõôÞ ç äéáäéêáóßá
åðÝêôáóçò ôùí äõáäéêþí äÝíäñùí ãßíåôáé áíáëüãùò ìå ôéò åéóáãùãÝò ôùí íÝùí
åããñáöþí. Áí ç óõíÜñôçóç h1 äéáóðåßñåé ôõ÷áßá ôéò åããñáöÝò óôá äõáäéêÜ äÝí-
äñá, ôüôå ôá äÝíäñá Ý÷ïõí ðåñßðïõ ôï ßäéï ìÝãåèïò, åíþ åêôéìÜôáé üôé ôá äÝíäñá
åßíáé éóïæõãéóìÝíá åðåéäÞ ç øåõäïôõ÷áßá óõíÜñôçóç h2 ðáñÜãåé éóïðßèáíá ôá 0
êáé 1.
Åßíáé åõíüçôï üôé ïé ôýðïé ôùí åóùôåñéêþí êáé ôùí åîùôåñéêþí êüìâùí åßíáé
äéáöïñåôéêïß. Ðéï óõãêåêñéìÝíá, êÜèå åóùôåñéêüò êüìâïò áðïôåëåßôáé áðü ôá
åîÞò ôÝóóåñá ðåäßá: óçìáßá, äåíäñéêüò äåßêôçò ðñïò ôïí ðáôÝñá êüìâï, äåíäñé-
êüò äåßêôçò ðñïò ôïí áñéóôåñü áðüãïíï êáé äåíäñéêüò äåßêôçò ðñïò ôïí äåîéü
áðüãïíï. áíôéóôïß÷ùò êÜèå åîùôåñéêüò êüìâïò áðïôåëåßôáé áðü ôá åîÞò ôÝóóåñá
ðåäßá: óçìáßá, äåíäñéêüò äåßêôçò ðñïò ôïí ðáôÝñá êüìâï, äåßêôçò ðñïò ôïí êÜäï
ôïõ áñ÷åßïõ êáé ìåôñçôÞò åããñáöþí ðïõ åßíáé áðïèçêåõìÝíåò óôïí áíôßóôïé÷ï
êÜäï. Ç óçìáßá ôùí åóùôåñéêþí êáé ôùí åîùôåñéêþí êüìâùí ëáìâÜíåé ôçí ôéìÞ
0 êáé 1, áíôéóôïß÷ùò.
Ç ðñïçãïýìåíç äéáäéêáóßá öáßíåôáé óôï ðáñÜäåéãìá ðïõ áêïëïõèåß. ¸óôù
üôé óå êåíü áñ÷åßï äõíáìéêïý êáôáêåñìáôéóìïý ìå êÜäïõò ìåãÝèïõò äýï åããñá-
öþí ðñüêåéôáé íá åéóá÷èïýí äéáäï÷éêÜ åããñáöÝò ìå ôéìÝò êëåéäéþí 4, 5, 10, 12,
19, 52, 56, 71 êáé 90. Áñ÷éêÜ ôï áñ÷åßï ó÷åäéÜæåôáé þóôå íá Ý÷åé ôñåéò êÜäïõò,
Üñá ðñÝðåé ùò ðñþôç óõíÜñôçóç êáôáêåñìáôéóìïý íá ÷ñçóéìïðïéçèåß ç óõíÜñ-
ôçóç h1 = key mod 3, ðïõ ÷ùñßæåé ôï äÜóïò ôïõ êáôáëüãïõ óå ôñßá äéáêñéôÜ
äõáäéêÜ äÝíäñá. ÐñÝðåé åðßóçò íá ÷ñçóéìïðïéçèåß êáé ìßá äåýôåñç óõíÜñôçóç
ãéá ôï êôßóéìï ôùí äõáäéêþí äÝíäñùí. ¸óôù, ëïéðüí, üôé åðéëÝãåôáé ç óõíÜñôçóç
key mod 10, þóôå áðü ôï êëåéäß íá ðñïêýøåé õðüëïéðï áðü 0 ùò 9. ÊÜèå ôéìÞ
ôïõ õðïëïßðïõ ìðïñåß íá èåùñçèåß ùò óðüñïò óå ìßá øåõäïôõ÷áßá ãåííÞôñéá,
R(), ðïõ íá ðáñÜãåé äõáäéêÜ øçößá 0 êáé 1 ìå ôçí ßäéá ðéèáíüôçôá (äçëáäÞ,
50%). Ôï áðïôÝëåóìá ìßáò ôÝôïéáò ãåííÞôñéáò ãéá êÜèå óðüñï öáßíåôáé óôïí
Ðßíáêá 13.2. Óôï Ó÷Þìá 13.2 öáßíåôáé ôï ôåëéêü áðïôÝëåóìá ôçò åéóáãùãÞò ôùí
åããñáöþí ìå ôç äçìéïõñãßá ôïõ êáôáëüãïõ ôùí ôñéþí äÝíäñùí êáé ôïõ áñ÷åßïõ
ôùí ðÝíôå êÜäùí.
R(0) R(1) R(2) R(3) R(4) R(5) R(6) R(7) R(8) R(9)
1011 0000 0100 0110 1111 0101 0001 1110 1001 0011
0 1 2
r r
0 ´Q 1 0 ´Q 1 Êýñéá
´
r´ Q
Qr ´
r´ Q
Qr r ìíÞìç
? ? ? ? ? Äåõôåñåýïõóá
12 71 90 4 10 19 52 5 56 ìíÞìç
ñåß íá âñåèåß åîùôåñéêüò êüìâïò ôïõ äõáäéêïý äÝíäñïõ ìå ìåôñçôÞ åããñáöþí ßóï
ìå ìçäÝí. ¢ñá óôçí ðåñßðôùóç áõôÞ ôï áíôßóôïé÷ï ÷ñïíéêü êüóôïò áíåðéôõ÷ïýò
áíáæÞôçóçò èá åßíáé ìçäÝí áðü ôçí Üðïøç ôùí ðñïóðåëÜóåùí óôï äßóêï.
Áðü ôïí Scholl [Scholl 1981] Ý÷ïõí ðñïôáèåß äýï ðáñáëëáãÝò ôïõ äõíáìéêïý
êáôáêåñìáôéóìïý ãéá ôç âåëôßùóç ôçò åðßäïóçò ôçò áíáæÞôçóçò. Óýìöùíá ìå
ìßá ðáñáëëáãÞ áðü áõôÝò, äåí ãßíåôáé äéÜóðáóç ôïõ êÜäïõ üôáí ó’ áõôüí êáôåõ-
èõíèåß ç (Bkf r+1)-ïóôÞ åããñáöÞ áëëÜ äçìéïõñãåßôáé áëõóßäá õðåñ÷åßëéóçò ìå
Ýíá äåýôåñï êÜäï. Ôï æåýãïò áõôü ôùí êÜäùí èá äéáóðáóèåß êáé ï êáôÜëïãïò
èá åíçìåñùèåß áíôéóôïß÷ùò üôáí èá Ý÷ïõí åéóá÷èåß β × Bkf r åããñáöÝò, üðïõ
1 ≤ β ≤ 2. Ç ôå÷íéêÞ áõôÞ ëÝãåôáé áíáâïëÞ äéÜóðáóçò (deferred splitting). ¸ôóé
âÝâáéá ãéá ìåñéêÝò ðåñéðôþóåéò èá ÷ñåéÜæåôáé ìßá ðñïóðÝëáóç óôï äßóêï, åíþ
ãéá Üëëåò ðåñéðôþóåéò èá ÷ñåéÜæïíôáé äýï ðñïóðåëÜóåéò. Ôï ðëåïíÝêôçìá üìùò
åßíáé üôé ï êáôÜëïãïò èá åßíáé ìéêñüôåñïò êáôÜ β öïñÝò êáé èá ÷ùñÜ óôçí êýñéá
ìíÞìç. Áí ôï áñ÷åßï ìåãáëþóåé õðåñâïëéêÜ, ôüôå ìðïñåß äßíïíôáò óôï β ìåãá-
ëýôåñåò ôéìÝò íá åðéôñáðïýí áëõóßäåò õðåñ÷åßëéóçò ìåãáëýôåñïõ ìÞêïõò, þóôå ï
êáôÜëïãïò íá ÷ùñÜ ïðùóäÞðïôå óôçí êýñéá ìíÞìç. Åýêïëá óõìðåñáßíåôáé üôé
óôç ÷åéñüôåñç ðåñßðôùóç èá ãßíïõí dβe ðñïóðåëÜóåéò óôï äßóêï. Ï åíäéáöåñü-
ìåíïò áíáãíþóôçò ìðïñåß áðü ôçí áíáöïñÜ íá âñåé ðåñéóóüôåñåò ëåðôïìÝñåéåò
ãéá ôéò ðáñáëëáãÝò ôïõ äõíáìéêïý êáôáêåñìáôéóìïý.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 333
- d0 =2
d=3 Á
©*
© H(key)=00...
©
- d0 =3
Â
H(key)=010...
Q
QQ
s d0 =3
Ã
@ H(key)=011...
H@H@
R
j
H
- d0 =1
Ä
*
© H(key)=1...
©©
Êýñéá ìíÞìç Äåõôåñåýïõóá ìíÞìç
óôçí õð’ áñéèìü 3 åßóïäï ôïõ ðßíáêá (ðïõ ïõóéáóôéêÜ åßíáé ç ôÝôáñôç åßóïäïò ôïõ
ðßíáêá) âñßóêåôáé ï êáôÜëëçëïò äåßêôçò ðïõ áíáöÝñåôáé óôïí êÜäï Ã. Åðßóçò áò
ðñïóå÷èåß üôé êÜèå êÜäïò óõíïäåýåôáé áðü ìßá ðáñÜìåôñï, ôçí d0 , ðïõ ëÝãåôáé
âÜèïò (depth) Þ åðßðåäï (level) ôïõ êÜäïõ. Ç ðáñÜìåôñïò áõôÞ äçëþíåé ôï ðëÞèïò
ôùí bits ðïõ åßíáé êïéíüò ãéá ôá êëåéäéÜ üëùí ôùí åããñáöþí ôïõ êÜäïõ êáé åßíáé
ðÜíôá ìéêñüôåñç Þ ßóç áðü ôï âÜèïò ôïõ êáôáëüãïõ d. Óõíåðþò, ôï ðëÞèïò ôùí
0
äåéêôþí ðïõ áíáöÝñïíôáé óå Ýíá äåäïìÝíï êÜäï åßíáé 2d−d .
Áíáêåöáëáéþíïíôáò, ç áíáæÞôçóç óôïí åðåêôáôü êáôáêåñìáôéóìü ãßíåôáé ìå
ðÝíôå âÞìáôá. Ðñþôïí, åöáñìüæåôáé ìßá óõíÜñôçóç êáôáêåñìáôéóìïý óôï êëåéäß.
Äåýôåñïí, åîÜãïíôáé ôá ðñþôá d bits. Ôñßôï, ÷ñçóéìïðïéåßôáé ï êáôÜëïãïò ãéá íá
åíôïðéóèåß ï êáôÜëëçëïò äåßêôçò. ÔÝôáñôï, ìå âÜóç ôï äåßêôç ãßíåôáé ðñïóðÝëáóç
óôïí êÜäï. ÐÝìðôï, ãßíåôáé áíáæÞôçóç ìÝóá óôïí êÜäï ãéá ôïí åíôïðéóìü ôïõ
êëåéäéïý.
H åðåîåñãáóßá ôùí åéóáãùãþí êáé ôùí äéáãñáöþí åããñáöþí åßíáé áñêåôÜ
ðïëýðëïêç. ¸íáò âáóéêüò êáíüíáò åßíáé üôé ç ðåñéåêôéêüôçôá åíüò êÜäïõ äåí
ìðïñåß íá åßíáé ìåãáëýôåñç áðü 100%, êáé äåí ðñÝðåé íá åßíáé ìéêñüôåñç áðü
Ýíá ðïóïóôü ðïõ ïñßæåôáé áðü ôï ÷ñÞóôç, ãéá ðáñÜäåéãìá 50%. ¼ôáí áõôüò ï
êáíüíáò ðáñáâéÜæåôáé, ôüôå áëëÜæåé ç äïìÞ ôïõ áñ÷åßïõ.
¸óôù üôé óôïí êÜäï Ä ôïõ áñ÷åßïõ ôïõ Ó÷Þìáôïò 13.4 ðñüêåéôáé íá åéóá÷èåß
ìßá åããñáöÞ. Áí ï êÜäïò Ä åßíáé Þäç ðëÞñçò, ôüôå ç íÝá åããñáöÞ äåí ìðïñåß
íá áðïèçêåõèåß åêåß êáé ðñïêáëåßôáé åðÝêôáóç ôïõ áñ÷åßïõ. ¸ôóé, Ýíáò íÝïò
êÜäïò Å ðñïóôßèåôáé óôï áñ÷åßï. Ïé ìéóïß áðü ôïõò äåßêôåò ðïõ ðñéí áíáöÝñï-
íôáí óôïí êÜäï Ä, ôþñá áëëÜæïõí êáé áíáöÝñïíôáé óôïí êÜäï Å. Ïé áíôßóôïé÷åò
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 335
åããñáöÝò ìåôáöÝñïíôáé áðü ôïí êÜäï Ä óôïí êÜäï Å. ¸ôóé ôåëéêÜ, ïé äýï êÜäïé
Ä êáé Å Ý÷ïõí ðåñéåêôéêüôçôá 50% êáé õðÜñ÷åé áñêåôüò ÷þñïò ãéá ìåëëïíôéêÝò
åéóáãùãÝò. Ç ôåëéêÞ ìïñöÞ ôïõ áñ÷åßïõ öáßíåôáé óôï Ó÷Þìá 13.5. Áò ðñïóå÷èåß
üôé ðñéí ôç äéÜóðáóç óôïí êÜäï Ä âñéóêüôáí üëåò ïé åããñáöÝò ôùí ïðïßùí ï
ìåôáó÷çìáôéóìüò ôïõ êëåéäéïý Üñ÷éæå áðü 1... ÌåôÜ ôç äéÜóðáóç óôïí êÜäï Ä
êáé óôïí êÜäï Å áðïèçêåýïíôáé üëåò ïé åããñáöÝò ôùí ïðïßùí ï ìåôáó÷çìáôéóìüò
ôïõ êëåéäéïý áñ÷ßæåé áðü 10... êáé 11... áíôéóôïß÷ùò.
- d0 =2
d=3 Á
©*
© H(key)=00...
©
- d0 =3
Â
H(key)=010...
Q
QQ
s d0 =3
Ã
@ H(key)=011...
H@@R
HHj d0 =2
Ä
@ H(key)=10...
H@H@
R
j
H d0 =2
Å
H(key)=11...
d0 =2
¡
µ Á
¡¡
µ H(key)=00...
7
¶
¡
¡ ¶Á
d=4 ¡¶ d0 =3
¶ ¡µ Â
H(key)=010...
¡¡
µ
¡¡
¡ d0 =4
- Ã
H(key)=0110...
BXX
B - z
X d0 =2
B ³- Ä
1 H(key)=10...
³B³
XXX z
B- d0 =2
B-
1
³
Å
H(key)=11...
³³B
BBN
d0 =4
Æ
H(key)=0111...
-
- 10 d0 =1 d=4 10 12 d0 =4
d=1 XXX Q
z S QQ
s
142 d0 =1 @S 19 d0 =4
S@S
(â) åéóáãùãÞ 52, 56 RS
@ S@w
@ @S 52 56 d0 =3
@@@RS
w
* 10
© d0 =3 S@ R
@
©© @ S@
@ S
R d0 =2
d=3 - R
@@
H 52 56 d0 =3 XPqX
P
XzRS
@w
HH H
j - 142 d0 =1
Hj -
Q H d0 =2 ³³
³
1
QQQs
PQ
XPqQ
s
XX
z 142 d0 =1
óôï Ó÷Þìá 13.7 ðáñïõóéÜæåôáé Ýíá áñ÷åßï ìå äýï êÜäïõò ÷ùñçôéêüôçôáò äýï
åããñáöþí, üðïõ áñ÷éêÜ åéóÜãïíôáé äýï åããñáöÝò ìå êëåéäéÜ 10 (= 000010102 )
êáé 142 (= 100011102 ). Óôç óõíÝ÷åéá åéóÜãïíôáé ïé åããñáöÝò ìå êëåéäéÜ 52 (=
001101002 ) êáé 56 (= 001110002 ), ïðüôå ãßíïíôáé äýï äéáäï÷éêïß äéðëáóéáóìïß
ôïõ ìåãÝèïõò ôïõ êáôáëüãïõ, åðåéäÞ ôá êëåéäéÜ 10, 52 êáé 56 Ý÷ïõí êïéíÜ ôá
ðñþôá äýï bits. Äéðëáóéáóìüò ôïõ êáôáëüãïõ ãßíåôáé êáé ìå ôçí åéóáãùãÞ ôùí
åããñáöþí ìå êëåéäéÜ 12 (= 000011002 ) êáé 19 (= 000100112 ). ¸ôóé ï êáôÜëïãïò
Ý÷åé 24 =16 åéóüäïõò, ïðüôå õðÜñ÷ïõí áñêåôïß äéáêñéôïß äåßêôåò ðïõ äåß÷íïõí
åßôå óå Ýíá êåíü êÜäï åßôå óå Ýíá êïéíü êÜäï.
Åî áéôßáò äéáäï÷éêþí äéáãñáöþí åããñáöþí ìðïñåß íá ðñïêëçèåß ç áíôß-
óôñïöç äõúêÞ äéáäéêáóßá ôçò óõññßêíùóçò ôïõ áñ÷åßïõ. Äýï êÜäïé óõóóùìá-
ôþíïíôáé óå Ýíáí êÜäï õðü ôñåéò ðñïûðïèÝóåéò:
• ç ìÝóç ðåñéåêôéêüôçôá ôùí äýï êÜäùí äåí õðåñâáßíåé ôï 50%, ãéáôß óå áíôß-
èåôç ðåñßðôùóç äåí èá õðÞñ÷å ÷þñïò óå Ýíáí êÜäï ãéá üëåò ôéò åããñáöÝò,
• ôá êëåéäéÜ ôùí åããñáöþí ôùí äýï êÜäùí Ý÷ïõí êïéíÜ ôá ðñþôá d0 −1 øçößá
ôïõ áðïôåëÝóìáôïò ôïõ ìåôáó÷çìáôéóìïý êáôáêåñìáôéóìïý.
ôüôå áðïäåéêíýåôáé üôé åßíáé ìçäáìéíÞ ç ðéèáíüôçôá íá ðÝóåé êÜôù áðü 50% ç ðå-
ñéåêôéêüôçôá åíüò êÜäïõ. Ç ôåëåõôáßá õðüèåóç óçìáßíåé üôé ç ÷ùñçôéêüôçôá ôùí
êÜäùí åßíáé ðåñßðïõ ç ßäéá, Üñá üëïé ïé êÜäïé äéáóðþíôáé ðåñßðïõ ôáõôü÷ñïíá.
Óå êÜðïéá ÷ñïíéêÞ óôéãìÞ, ëïéðüí, êÜðïéïé êÜäïé èá Ý÷ïõí ðåñéåêôéêüôçôá ðåñß
ôï 100%, åíþ Üëëïé èá Ý÷ïõí ðåñéåêôéêüôçôá ðåñß ôï 50%.
Ç ìÝóç ðåñéåêôéêüôçôá ôùí êÜäùí åßíáé ðåñßðïõ 69%, Üñá ç ìÝóç ôéìÞ ôïõ
n
ðëÞèïõò ôùí êÜäùí ôïõ áñ÷åßïõ åßíáé Bkf r×ln 2 . Ç ìÝóç ôéìÞ ôïõ ðëÞèïõò ôùí
n
åéóüäùí ôïõ êáôáëüãïõ åßíáé Bkf r×(ln 2)2 . Áðü ôçí ôåëåõôáßá ó÷Ýóç öáßíåôáé
üôé üôáí ôï áñ÷åßï äéïãêùèåß áñêåôÜ, áíôéóôïß÷ùò äéïãêþíåôáé êáé ï êáôÜëïãïò.
Óå åîáéñåôéêÝò ðåñéðôþóåéò ï êáôÜëïãïò ìðïñåß íá ãßíåé ôüóï ìåãÜëïò, þóôå íá
ìçí ÷ùñÜ óôçí êýñéá ìíÞìç, ïðüôå èá ðñÝðåé íá áðïèçêåõèåß óôç äåõôåñåýïõóá
ìíÞìç êáé èá áðáéôïýíôáé åðéðëÝïí ðñïóðåëÜóåéò óôï äßóêï ãéá åðåîåñãáóßá ôïõ
ðßíáêá. Áõôü áðïôåëåß Ýíá óïâáñü ìåéïíÝêôçìá ôçò ìåèüäïõ. Áõôü ôï ðñüâëçìá
åðéëýåôáé óå ìßá ðáñáëëáãÞ ôçò ìåèüäïõ ðïõ ëÝãåôáé åêèåôéêüò êáôáêåñìáôéóìüò
ìå ðåñéïñéóìÝíï êáôÜëïãï êáé ðáñïõóéÜæåôáé óôç óõíÝ÷åéá. ¸íá Üëëï ìåéïíÝ-
êôçìá ôçò ìåèüäïõ åßíáé üôé äåí ðñïóöÝñåôáé ãéá åñùôÞóåéò ðåñéï÷Þò, üðùò ãéá
ðáñÜäåéãìá ç äïìÞ ôïõ Â+ -äÝíäñïõ.
ðïõ ïöåßëïíôáé óôéò ðïëëÝò êáé ôáõôü÷ñïíåò äéáóðÜóåéò ôùí êÜäùí ôïõ áñ÷åßïõ
êáé ôïõ êáôáëüãïõ. Ç ïñãÜíùóç ôïõ åêèåôéêïý êáôáêåñìáôéóìïý ìå ðåñéïñé-
óìÝíï êáôÜëïãï, ðïõ ðñïôÜèçêå áðü ôï Lomet [Lomet 1983], åðéëýåé êáé ôá äýï
ðñïâëÞìáôá.
¼óïí áöïñÜ óôï ðñþôï ìåéïíÝêôçìá, ï êáôÜëïãïò äåí ìðïñåß íá õðåñâåß
Ýíá ìÝãéóôï ìÝãåèïò ðïõ êáèïñßæåôáé áðü ôç äéáèÝóéìç êýñéá ìíÞìç. ÄçëáäÞ,
ôï ðëÞèïò ôùí óåëßäùí ðïõ óõìðåñéëáìâÜíïíôáé óå Ýíáí êáôÜëïãï åßíáé äýíáìç
ôïõ äýï êáé Üñá äéáäï÷éêÜ äéðëáóéÜæåôáé ìÝ÷ñé ôïõ óçìåßïõ íá öèÜóåé óôéò 2max
óåëßäåò. Ãéá ðáñÜäåéãìá, ãéá ìåãÜëá áñ÷åßá ôï ìÝãåèïò áõôü èá ìðïñïýóå íá
åßíáé 64, 128 ê.ï.ê. óåëßäåò. ¸ôóé ï êáôÜëïãïò äéðëáóéÜæåôáé ìÝ÷ñé íá öèÜóåé
áõôü ôï ïñéáêü ìÝãåèïò êáé åðïìÝíùò ðáñáìÝíåé óôáèåñü êáé ôï ðëÞèïò ôùí
êÜäùí ðïõ äåéêôïäïôïýíôáé áðü ôïí êáôÜëïãï. ¸ôóé, ìåôÜ áðü áõôü ôï óçìåßï
ôï áñ÷åßï ìåãáëþíåé áõîÜíïíôáò ü÷é ôï ðëÞèïò ôùí êÜäùí áëëÜ ôï ìÝãåèüò ôïõò.
¼óïí áöïñÜ óôï äåýôåñï ìåéïíÝêôçìá, ï ìåôáó÷çìáôéóìüò ôïõ êëåéäéïý óå
ôÝôïéá áñ÷åßá áêïëïõèåß Ýíáí áñéèìü âçìÜôùí. Áñ÷éêÜ, ôá êëåéäéÜ ìåôáó÷ç-
ìáôßæïíôáé ìå âÜóç ìßá óõíÜñôçóç þóôå íá ðñïêýøåé ìßá ïìïéüìïñöç êáôáíïìÞ.
¾óôåñá, ôï áðïôÝëåóìá ôçò óõíÜñôçóçò áíáêáôáíÝìåôáé åêèåôéêÜ ìå âÜóç ôïí
ôýðï:
exhash(k) = 2h(k) − 1
üðïõ k åßíáé ôï êëåéäß, h(k) åßíáé ôï áðïôÝëåóìá ôïõ ðñþôïõ ìåôáó÷çìáôéóìïý,
êáé exhash(k) åßíáé ôï áðïôÝëåóìá ôïõ äåýôåñïõ. Ôåëéêü áðïôÝëåóìá åßíáé ç
ïìïéüìïñöç êáôáíïìÞ íá áíôéêáôáóôáèåß ìå ìßá Üëëç ðïõ äéáêñßíåôáé ãéá ôç
óõóóþñåõóç ôùí êëåéäéþí ðñïò ôï êÜôù Üêñï ôïõ äéáóôÞìáôïò ôùí äéåõèýíóåùí.
¸ôóé ïé êÜäïé äåí äÝ÷ïíôáé ôïí ßäéï áñéèìü åããñáöþí êáé ç åðßäïóç ôçò åéóá-
ãùãÞò åßíáé ðåñßðïõ óôáèåñÞ óå üëç ôç äéÜñêåéá ôçò æùÞò ôïõ áñ÷åßïõ. Óôïí Ðß-
íáêá 13.3 ðáñáôçñïýìå üôé ç áðüóôáóç ìåôáîý äéáäï÷éêþí ôéìþí ôçò exhash(k)
ìåãáëþíåé êáèþò ïé ôéìÝò ôçò h(k) áõîÜíïíôáé. Ãéá ðáñÜäåéãìá, áí êáé ç áðü-
óôáóç ìåôáîý äéáäï÷éêþí ôéìÝò ôçò h(k) åßíáé 0,067, åí ôïýôïéò ç áðüóôáóç ôùí
ðñþôùí äýï ôéìþí ôçò exhash(k) åßíáé 0,47, åíþ ç áðüóôáóç ôùí ôåëåõôáßùí
ôéìþí ôçò exhash(k) åßíáé 0,90.
Ôá ðñþôá bits ôïõ exhash(k) êáèïñßæïõí ôç óåëßäá ôïõ êáôáëüãïõ, üðïõ åßíáé
áðïèçêåõìÝíïò ï äåßêôçò ðñïò ôïí êáôÜëëçëï êÜäï. Ç åðéëïãÞ ôçò óåëßäáò (áðü
ôï óýíïëï ôùí óåëßäùí ôïõ êÜäïõ), üðïõ èá ðñÝðåé íá óõíå÷éóèåß ç áíáæÞôçóç,
ãßíåôáé ìå âÜóç ìåñéêÜ áðü ôá åðüìåíá bits áðü ôï exhash(k). Áêüìç óå êÜèå
êÜäï áíôéóôïé÷åß ìßá ðåñéï÷Þ õðåñ÷åßëéóçò, ðïõ åßíáé ïñãáíùìÝíç ùò äõáäéêü
äÝíäñï ðïõ ïíïìÜæåôáé ï-äÝíäñï (áðü ôï overflow). Ï êáôÜëïãïò ãéá áõôü ôï
äÝíäñï áðïèçêåýåôáé óôçí ðñþôç óåëßäá ôïõ áíôßóôïé÷ïõ êÜäïõ. ÊáôÜ ðáñüìïéï
ôñüðï, ç äéá÷åßñéóç ôçò ðåñéï÷Þò õðåñ÷åßëéóçò ãßíåôáé ìå ôá åðüìåíá bits ôïõ
exhash(k).
00
-
000 4
01
0- Â 10
Á 001 1
11
0-
010 2
1 ÄÝíäñï
- õðåñ÷åßëéóçò
011 2
0 -
1 000 1 00
à 100 8 001 6 01
- ¡ Å
- Ä 010 -
101 2 01
0 011 -?
Æ
110 1 1 Ç 100
101 ¡
? 0- 110 1
111 1 ?-
?
111 È
Êýñéá ìíÞìç Äåõôåñåýïõóá ìíÞìç
Óôç óõíÝ÷åéá, áò õðïôåèåß üôé ðñÝðåé íá áíáæçôçèåß ôï êëåéäß 641. ÊáôÜ ôïí
ßäéï ôñüðï, Ýóôù üôé éó÷ýåé exhash(641) = .10001011002 . Ôá ôñßá ðñþôá bits
åßíáé ôá 100, Üñá ç áíáæÞôçóç êáôåõèýíåôáé óôçí ðÝìðôç óåëßäá ôïõ êáôáëüãïõ,
ôç óåëßäá Ã. ÅðåéäÞ ç åßóïäïò ôïõ ìåãÝèïõò óôïí êáôÜëïãï åßíáé 8, ï áíôßóôïé÷ïò
äåßêôçò áíáöÝñåôáé óå êÜäï ìå ïêôþ óåëßäåò êáé óõíåðþò ðñÝðåé íá ÷ñçóéìï-
ðïéçèïýí ôá ôñßá åðüìåíá bits ãéá ôç äéåõêñßíçóç ôçò óõãêåêñéìÝíçò óåëßäáò,
üðïõ ðñÝðåé íá óõíå÷éóèåß ç áíáæÞôçóç. ÁõôÜ ôá bits åßíáé 010 êáé óõíåðþò ç
áíáæÞôçóç óõíå÷ßæåôáé óôçí ôñßôç óåëßäá, ôç óåëßäá Ä. Áí ç óåëßäá Ä äåí ðåñéÝ-
÷åé ôï êëåéäß, ôüôå ç áíáæÞôçóç ðñÝðåé íá óõíå÷éóèåß óôï ï-äÝíäñï. Óôç óåëßäá
Ä õðÜñ÷åé äåßêôçò ðïõ áíáöÝñåôáé óôçí ðñþôç óåëßäá ôïõ äÝíäñïõ, ôç óåëßäá Å
ôïõ êáôáëüãïõ ôïõ äÝíäñïõ. Áí ôï ôÝôáñôï êáé ôï ðÝìðôï bit åßíáé 00 Þ 01, ôüôå
ôï êëåéäß ðåñéÝ÷åôáé óôç óåëßäá Å Þ óôç óåëßäá Æ, áíôéóôïß÷ùò. ÅéäÜëëùò, áí ôï
ôÝôáñôï bit åßíáé 1, ôüôå ç áíáæÞôçóç óõíå÷ßæåôáé óôç óåëßäá Ç. ¸ôóé, óôçí ðåñß-
ðôùóç áíáæÞôçóçò ôïõ êëåéäéïý 641 áðáéôïýíôáé ôñåéò ðñïóðåëÜóåéò óôï äßóêï,
äçëáäÞ äéáäï÷éêÜ óôéò óåëßäåò Ä, Å êáé Æ. Áí ðáñïõóéáóèåß ôï öáéíüìåíï íá
÷ñåéáóèïýí ðåñéóóüôåñï áðü äýï ðñïóðåëÜóåéò, ôüôå ïé äåßêôåò áëëÜæïõí þóôå
íá óõíôïìåõèåß ç äéáäéêáóßá. ¸ôóé ï äåßêôçò ôçò óåëßäáò Ä äåí èá äåß÷íåé ðëÝïí
óôç óåëßäá Å áëëÜ óôç óåëßäá Æ.
ÔÝëïò, áò õðïôåèåß üôé ðñÝðåé íá áíáæçôçèåß ôï êëåéäß 670. ÊáôÜ ôïí ßäéï
ôñüðï, éó÷ýåé exhash(670) = .10010010112 . Ôá ôñßá ðñþôá bits åßíáé ôá 100,
Üñá ç áíáæÞôçóç êáé ðÜëé êáôåõèýíåôáé óôç óåëßäá Ã. Ôá ôñßá åðüìåíá bits åßíáé
100 êáé óõíåðþò ç áíáæÞôçóç óõíå÷ßæåôáé óôçí ðÝìðôç óåëßäá ðïõ ïíïìÜæåôáé
Ç. Áí ôï êëåéäß äåí åßíáé áðïèçêåõìÝíï óôç óåëßäá Ç, ôüôå ç áíáæÞôçóç ðñÝðåé
íá óõíå÷éóèåß óôï ï-äÝíäñï. Óôç óåëßäá Ç õðÜñ÷åé äåßêôçò ðïõ áíáöÝñåôáé óôç
óåëßäá È, ðïõ åßíáé ôåñìáôéêüò êüìâïò ôïõ ï-äÝíäñïõ. ÄçëáäÞ, ôåëéêÜ ôï êëåéäß
670 âñßóêåôáé Þ óôç óåëßäá Ç Þ óôç óåëßäá È.
¼ðùò áíáöÝñèçêå üôáí Ýíáò êÜäïò ãåìßóåé, ôüôå ôï ìÝãåèïò ôïõ äéðëáóéÜæå-
ôáé êáé åíçìåñþíåôáé êáôÜëëçëá ç áíôßóôïé÷ç åßóïäïò ôïõ êáôáëüãïõ. Ï êÜäïò
ìåôáöÝñåôáé áðü ôï óõãêåêñéìÝíï óçìåßï ôïõ äßóêïõ êáé åðáíá-áðïèçêåýåôáé
óå êÜðïéá Üëëç ðåñéï÷Þ ôïõ äßóêïõ þóôå íá ìçí ÷ñåéÜæïíôáé äýï ðñïóðåëÜóåéò.
Ìßá Üëëç óõíçèéóìÝíç ôå÷íéêÞ åßíáé íá áöÞíïíôáé åããñáöÝò óôçí õðåñ÷åßëéóç
ðáñÜ íá äéðëáóéÜæåôáé óõíå÷þò ôï ìÝãåèïò ôïõ êÜäïõ, ïðüôå ìå áõîçìÝíï êü-
óôïò áíáæÞôçóçò åðéôõã÷Üíåôáé êáëýôåñç ÷ñÞóç ôïõ ÷þñïõ. Óå ó÷Ýóç ìå ôçí
áðëÞ ìÝèïäï ôïõ åðåêôáôïý êáôáêåñìáôéóìïý õðÜñ÷ïõí ôá åîÞò ðëåïíåêôÞìáôá:
äåí ÷ñåéÜæåôáé ðñïóðÝëáóç óôï äßóêï ãéá ôïí êáôÜëïãï, åíþ áðáéôåßôáé ìüíï ìßá
ðñïóðÝëáóç óôï äßóêï áí äåí õðÜñ÷åé õðåñ÷åßëéóç.
342 ÊåöÜëáéï 13. Êáôáêåñìáôéóìüò
0000
0001 113 193
0010 90 146
* 011 19
100 4 12 52 - 100
101 5
110 12 = 0000 1100
111 71 52 = 0011 0100
1000 56 71 = 0100 0111
1001 90 = 0101 1010
1010 10 100 = 0110 0100
íôáé áðü ôá ôåëåõôáßá k bits. Óôçí åðéêåöáëßäá êÜèå áñ÷åßïõ ãñáììéêïý êáôá-
êåñìáôéóìïý áðïèçêåýåôáé ç ïñéáêÞ ôéìÞ êáé ç áíôßóôïé÷ç ôéìÞ ôïõ k. Óôï Ó÷Þìá
13.10 ïé ôéìÝò áõôÝò åßíáé 011 êáé 3 áíôéóôïß÷ùò.
ðáñáôçñïýìå üôé óôçí ðñþôç ðåñßðôùóç ï áñéèìüò ôùí ðñïóðåëÜóåùí åßíáé óõíÞ-
èùò ìåãáëýôåñïò, üôáí ï ðáñÜãïíôáò öüñôéóçò åßíáé ßäéïò. Áõôü ïöåßëåôáé óôï
ãåãïíüò üôé ïé åããñáöÝò äåí êáôáíÝìïíôáé ïìïéüìïñöá ìåôáîý ôùí êÜäùí óôï
áñ÷åßï ôïõ ãñáììéêïý êáôáêåñìáôéóìïý. Ïé êÜäïé ðïõ áíáöÝñïíôáé ìå k bits
äÝ÷ïíôáé óõíÞèùò ðåñéóóüôåñåò åããñáöÝò áð’ üôé ïé êÜäïé ðïõ áíáöÝñïíôáé ìå
k+1 bits. ¼ìùò, áò ðñïóå÷èåß üôé ï áñéèìüò ôùí ðñïóðåëÜóåùí äåí åîáñôÜôáé
áðü ôïí áñéèìü ôùí åããñáöþí óôï áñ÷åßï. ÄçëáäÞ, áêüìç êáé áí óôï áñ÷åßï åé-
óá÷èïýí ðïëëáðëÜóéåò åããñáöÝò ç åðßäïóç èá ðáñáìåßíåé óôáèåñÞ. Áõôü åßíáé
ôï ìåãÜëï ðëåïíÝêôçìá ôçò ìåèüäïõ áõôÞò Ýíáíôé ôùí Üëëùí ìåèüäùí ïñãÜíù-
óçò áñ÷åßùí êáé éäéáßôåñá Ýíáíôé ôçò áðëÞò ôå÷íéêÞò êáôáêåñìáôéóìïý ìå ÷ñÞóç
áëõóßäùí.
*000 @¡
¡ @¡
@¡@¡
@¡@¡@¡@
001 @¡
¡ @¡
@¡ @¡
@¡@ -
010 @¡
¡ @¡
@¡ @@
¡@¡@¡¡@¡@¡@ @
¡¡@@
¡
011 @¡
¡ @
@¡
100 @¡
¡ @¡
@¡ @¡
@
101 @¡
¡ @@
@¡ ¡@
¡¡@¡@¡@¡@
110 @¡
¡ ¡@
@@ ¡@
¡@ ¡@¡
111 @@
¡ ¡@
¡@ ¡@
¡
0000 @¡
¡ @¡
@¡ @
*001 @¡
¡ @¡
@¡ @¡@¡ @¡
@¡ @¡
@ -
010 @¡
¡ @¡
@¡ @@¡@ ¡@
¡@ ¡@
¡@¡ @
¡¡@@
¡
011 @¡
¡ @
@¡
100 @¡
¡ @¡
@¡ @@¡ -
101 @¡
¡ @¡
@¡ @@
¡¡ @¡
@¡ @¡
@¡ @ @
¡
110 @¡
¡ @@
@¡ ¡@
¡@ ¡@
¡@¡@
¡
111 @¡
¡ ¡@
@@ ¡@¡
1000 @@
¡ ¡@
¡@ ¡
*00 4 12
01 5
10 10
11 19 71 175 - 215
(á)
000 56
000 56 001 113
*01 5 *10 10
- 215
10 10 11 19 71 175
11 19 71 175 - 215 100 4 12 52 - 100
100 4 12 52 101 5
ðïõ ðñïóåããßæåé ðïëý ôçí ðåéñáìáôéêÞ ôéìÞ. Ôï áîéïðñüóåêôï åßíáé üôé ôï êüóôïò
åéóáãùãÞò ìßáò åããñáöÞò åßíáé ëßãï ðåñéóóüôåñï áðü äýï ðñïóðåëÜóåéò óôï äß-
óêï. ÄçëáäÞ, öáßíåôáé üôé ôï êüóôïò áõôü åßíáé ó÷åôéêÜ ìåãÜëï êáé ìÜëéóôá áí
óõãêñéèåß ìå ôï áíôßóôïé÷ï êüóôïò åéóáãùãÞò óå óôáôéêü áñ÷åßï êáôáêåñìáôéóìïý
ìå áëõóßäåò. Ùóôüóï, ôá öáéíüìåíá áðáôïýí. Ôï êüóôïò åéóáãùãÞò åããñáöÞò
óå áñ÷åßï ãñáììéêïý êáôáêåñìáôéóìïý óõìðåñéëáìâÜíåé êáé ôï êüóôïò ôïðéêÞò
áíáäéïñãÜíùóçò. ÁíôéèÝôùò, óôï óôáôéêü áñ÷åßï ç áíáäéïñãÜíùóç ãßíåôáé ðå-
ñéïäéêÜ. Óå ôåëåõôáßá áíÜëõóç, ç åéóáãùãÞ äåí åßíáé ÷ñïíïâüñá ðñÜîç.
áñ÷åßïõ åßíáé êáôÜ Bkf r × Lf ìéêñüôåñïò áðü áõôüí ðïõ õðáãïñåýåôáé áðü
ôï óõãêåêñéìÝíï ðáñÜãïíôá öüñôéóçò, ôüôå ôï áñ÷åßï óõññéêíþíåôáé êáôÜ Ýíá
êÜäï.
Õðü áõôÝò ôéò óõíèÞêåò ôï ÷ñïíéêü êüóôïò ãéá ôç äéáãñáöÞ åããñáöÞò åßíáé:
0000 @¡
¡ @¡
@¡@
*001 @¡
¡ @¡
@¡ @¡@¡@¡
@¡@¡
@ -
010 @¡
¡ @¡
@¡ @@¡@¡@
¡@¡@
¡@¡ @
¡¡@@
¡
011 @¡
¡ @
@¡
100 @¡
¡ @¡
@¡ @¡@ -
101 @¡
¡ @¡
@¡ @@
¡¡ @¡
@¡ @¡
@¡ @ @
¡
110 @¡
¡ @@
@¡ ¡@
¡@ ¡@
¡@¡@
¡
111 @¡
¡ ¡@
@@ ¡@¡
1000 @@
¡ ¡@
¡@ ¡
*000 @¡
¡ @¡
@¡@¡
@@¡¡
@¡@
001 @
¡¡ @¡
@¡ ¡¡
@@ @@
¡¡@@¡
010 ¡@
@ ¡@
¡@ ¡@
¡@¡@
¡¡@¡@
011 @
¡
100 @¡
¡ @¡
@¡@¡
@ -
101 @¡
¡ @¡
@¡ @¡
@¡ @¡
@¡@¡@¡@ @
¡
110 @¡
¡ ¡@
@@ ¡@
¡@ ¡@
¡¡@@¡
111 @@
¡ ¡@
¡@ ¡@
¡
13.6 Óýíïøç
Ï êáôáêåñìáôéóìüò áðïôåëåß ìßá ìÝèïäï ïñãÜíùóçò äåäïìÝíùí, ç ïðïßá Ý÷åé
÷ñçóéìïðïéçèåß ìå åðéôõ÷ßá ôüóï óôçí êýñéá üóï êáé óôç äåõôåñåýïõóá ìíÞìç.
Ôï âáóéêü ÷áñáêôçñéóôéêü ôïõ êáôáêåñìáôéóìïý åßíáé ç äéáóðïñÜ ôùí äåäïìÝ-
íùí óå êÜäïõò ìå ôõ÷áßï ôñüðï. Ãéá ôï ëüãï áõôü ÷ñçóéìïðïéïýíôáé áíôßóôïé÷åò
óõíáñôÞóåéò êáôáêåñìáôéóìïý. Ç ôõ÷áßá äéáóðïñÜ ôùí äåäïìÝíùí åðéôá÷ýíåé ôç
äéáäéêáóßá áíáæÞôçóçò åíüò êëåéäéïý, üìùò áðïôñÝðåé ôçí õðïóôÞñéîç åñùôçìÜ-
ôùí ðåñéï÷Þò.
Ç åðéëïãÞ ôçò óõíÜñôçóçò êáôáêåñìáôéóìïý èåùñåßôáé ðïëý óçìáíôéêÞ ãéá
ôçí åðßäïóç ôçò ìåèüäïõ. Óôü÷ïò ôçò óõíÜñôçóçò åßíáé ç áðïöõãÞ ôùí óõãêñïý-
óåùí. Óýãêñïõóç Ý÷ïõìå üôáí ãéá äýï äéáöïñåôéêÝò ôéìÝò êëåéäéþí Ý÷ïõìå ôçí
ßäéá ôéìÞ ôçò óõíÜñôçóçò êáôáêåñìáôéóìïý. ¸÷ïõí ðñïôáèåß ðïëëÝò ðïëéôéêÝò
åðßëõóçò ôùí óõãêñïýóåùí, ôüóï óå ðåñéâÜëëïí êýñéáò üóï êáé óå ðåñéâÜëëïí
äåõôåñåýïõóáò ìíÞìçò.
Óôç âéâëéïãñáößá Ý÷ïõí ðñïôáèåß áñêåôÝò ïñãáíþóåéò áñ÷åßùí äõíáìéêïý
êáôáêåñìáôéóìïý, åê ôùí ïðïßùí ïé ãíùóôüôåñåò åßíáé ïé åîÞò: á) äõíáìéêüò
êáôáêåñìáôéóìüò, â) åðåêôáôüò êáôáêåñìáôéóìüò, ã) åêèåôéêüò êáôáêåñìáôéóìüò
ìå ðåñéïñéóìÝíï êáôÜëïãï êáé ä) ãñáììéêüò êáôáêåñìáôéóìüò.
13.4. Íá åðéëõèåß ç ðñþôç Üóêçóç èåùñþíôáò üôé ïé äåßêôåò ôïõ êáôáëüãïõ ìðï-
ñïýí íá ðÜñïõí ôéìÝò NULL.
13.5. Ðïéüò åßíáé ï åëÜ÷éóôïò áñéèìüò bits ðïõ áðáéôåßôáé óå áñ÷åßï åðåêôáôïý
êáôáêåñìáôéóìïý ìå
êáé 33. Áñ÷éêÜ ôï áñ÷åßï áðïôåëåßôáé áðü ôÝóóåñéò êÜäïõò. Ïé ôéìÝò ôùí êëåé-
äéþí íá ìåôáôñáðïýí óå åðôáøÞöéïõò äõáäéêïýò áñéèìïýò êáé íá áðïìïíùèïýí
ôá ôåëåõôáßá øçößá. Ç Üóêçóç íá åðáíáëçöèåß ãéá Bkf r=3 êáé Lf =0.67.
13.9. Óôï áñ÷åßï ôçò ðñïçãïýìåíçò Üóêçóçò íá åéóá÷èïýí äÝêá åããñáöÝò, þóôå
íá ðñïêëçèåß õðåñ÷åßëéóç ìå áëõóßäá äýï êÜäùí.
353
354 ÊåöÜëáéï 14. Âåëôéóôïðïßçóç êáé Åðåîåñãáóßá ÅñùôçìÜôùí
ìßá óôÞëç, ôüôå ìðïñïýìå íá åêôåëÝóïõìå ìßá ðñÜîç åðéëïãÞò åßôå ÷ñçóéìïðïéþ-
íôáò ôïí êáôÜëïãï åßôå ÷ùñßò. Ôï ðëÜíï åêôÝëåóçò äéï÷åôåýåôáé óôç ìç÷áíÞ
åêôÝëåóçò (execution engine), üðïõ ãßíåôáé ç åðåîåñãáóßá ôïõ åñùôÞìáôïò êáé
ç ðáñáãùãÞ ôïõ ôåëéêïý áðïôåëÝóìáôïò. Ç äéáäéêáóßá ðáñáãùãÞò ôïõ ðëÜíïõ
åêôÝëåóçò ðáñïõóéÜæåôáé äéáãñáììáôéêÜ óôï Ó÷Þìá 14.1.
Ε ρ ώ τ η α S Q L
Α ν ά λ υ σ η Ε ρ ω τ ή α τ ο ς Σ
χ ή α Β ά σ η ς
ε δ ο έ ν ω ν
Ε ρ ώ τ η ) α σ ε ε σ ω τ ε ρ ι κ ή α ν α π α ρ ά σ τ α σ η
Κ α τ ά λ ο γ ο ς
υ σ τ ή α τ ο ς
Β ε λ τ ι σ τ ο π ο ι η τ ή ς
Α λ γ ε β ρ ι κ ο ί
Μ ε τ α σ χ η α τ ι σ ο ί
Π α ρ α γ ω γ ή Ε κ τ ί η σ η
Π λ ά ν ο υ Κ ό σ τ ο υ ς Π λ ά ν ο υ
τ α τ ι σ τ ι κ ά
Ε κ τ έ λ ε σ η ς Ε κ τ έ λ ε σ η ς
ε δ ο έ ν α
Μ έ θ ο δ ο ι
Υ λ ο π ο ί η σ η ς
Π ρ ά ξ ε ω ν
Α π ο δ ο τ ι κ ό π λ ά ν ο ε κ τ έ λ ε σ η ς
ε δ ο έ ν α Β ά σ η ς
Μ η χ α ν ή Ε κ τ έ λ ε σ η ς
Α π ο τ έ λ ε σ α
öïñÜ ðïõ áðáéôåßôáé ç åðåîåñãáóßá ôïõ. Ìå ôïí ôñüðï áõôü õðÜñ÷åé ç åããýçóç
üôé ðÜíôá ôï åðéëåãüìåíï ðëÜíï åêôÝëåóçò åðéëÝãåôáé ìå âÜóç ôá ôñÝ÷ïíôá äå-
äïìÝíá ôçò âÜóçò. Ôï ìåéïíÝêôçìá åßíáé üôé êÜèå öïñÜ ðñÝðåé íá äáðáíçèåß Ýíá
÷ñïíéêü äéÜóôçìá ãéá ôçí ïëïêëÞñùóç ôçò äéáäéêáóßáò âåëôéóôïðïßçóçò. ÁíôéèÝ-
ôùò, ç óôáôéêÞ âåëôéóôïðïßçóç åíåñãåß ìßá ìüíï öïñÜ óå êÜèå åñþôçìá, êé Ýôóé
áðïöåýãåôáé ôï åðéðëÝïí ÷ñïíéêü êüóôïò ãéá ôçí åðéëïãÞ åíüò êáëïý ðëÜíïõ áðÜ-
íôçóçò. Ùóôüóï, ïé áëëáãÝò ðïõ ðñáãìáôïðïéïýíôáé óôç âÜóç ëüãù åéóáãùãþí,
äéáãñáöþí êáé åíçìåñþóåùí áëëÜæïõí, óôç ãåíéêÞ ðåñßðôùóç, ôçí áðüäïóç ôùí
äéáöïñåôéêþí ðëÜíùí åêôÝëåóçò. ¸ôóé, Ýíá ðëÜíï ðïõ èåùñåßôáé êáëü ãéá ôç
óõãêåêñéìÝíç ÷ñïíéêÞ óôéãìÞ, ìðïñåß íá ìçí åßíáé ôüóï áðïäïôéêü ôçí åðüìåíç
öïñÜ ðïõ èá áðáéôçèåß ç åðåîåñãáóßá ôïõ åñùôÞìáôïò, ëüãù ôùí áëëáãþí óôç
ÂÜóç ÄåäïìÝíùí. Óçìåéþíåôáé üôé óôáôéêÞ êáé äõíáìéêÞ âåëôéóôïðïßçóç ìðïñïýí
íá óõíäõáóèïýí Ýôóé þóôå íá ðñïêýøåé Ýíá õâñéäéêü ó÷Þìá.
• p, q, w åßíáé óõíèÞêåò.
3. ΠA ΠB ΠC (X) = ΠA (X)
5. X × Y = Y × X êáé X 1 Y = Y 1 X
8. X ∪ Y = Y ∪ X êáé X ∩ Y = Y ∩ X
9. σp (X ∪ Y ) = σp (X) ∪ σp (Y ) σp (X ∩ Y ) = σp (X) ∩ σp (Y ) σp (X − Y ) =
σp (X) − σp (Y )
10. ΠA (X ∪ Y ) = ΠA (X) ∪ ΠA (Y )
11. (X 1 Y ) × Z = X 1 (Y × Z) êáé (X 1 Y ) 1 Z = X 1 (Y 1 Z)
(X 1p Y ) 1q∧w Z = X 1p∧w (Y 1q Z)
12. (X ∪ Y ) ∪ Z = X ∪ (Y ∪ Z) (X ∩ Y ) ∪ Z = X ∩ (Y ∩ Z)
σ p
, … ,
Π α 1 α N
Κ α ν ό ν α ς 4
σ p
, … ,
Χ Χ
Κ α ν ό ν α ς 1 1
Ζ
Χ
Χ Υ
Υ Ζ
ÐáñáôçñÞóôå üôé ðñüêåéôáé ãéá Ýíá åñþôçìá ðïõ ðåñéÝ÷åé óýíäåóç êáé ôïí ðåñéï-
ñéóìü üôé ï áñéèìüò ôùí óõíäñïìçôþí ìßáò ãíùóôéêÞò ðåñéï÷Þò ðñÝðåé íá åßíáé
ìåãáëýôåñïò áðü 100. Ôï ðñüâëçìá ðïõ Ý÷åé íá áíôéìåôùðßóåé ï âåëôéóôïðïéçôÞò
ôïõ ÓÄÂÄ åßíáé ï ðñïóäéïñéóìüò ôïõ ôñüðïõ ðñáãìáôïðïßçóçò ôçò åðåîåñãáóßáò
ôïõ åñùôÞìáôïò. ¼ðùò ðáñïõóéÜæåôáé óôï Ó÷Þìá 14.3, ï âåëôéóôïðïéçôÞò Ý÷åé óôç
äéÜèåóÞ ôïõ ôñåéò äéáöïñåôéêÝò ìåèïäïëïãßåò åêôÝëåóçò ôïõ åñùôÞìáôïò, áðü ôéò
ïðïßåò èá åðéëåãåß ìßá. Ï ôñüðïò ðáñáãùãÞò ôùí ôñéþí äéáöïñåôéêþí äÝíäñùí
ìå âÜóç ôïõò êáíüíåò ìåôáó÷çìáôéóìïý áöÞíåôáé ùò Üóêçóç ãéá ôïí áíáãíþóôç.
Ìå ðïéüí ôñüðï èá åðéëåãåß ôï áðïäïôéêüôåñï ðëÜíï åêôÝëåóçò; Ç áðÜíôçóç èá
äïèåß óôç óõíÝ÷åéá áöïý ðñþôá ìåëåôçèïýí ìåñéêÜ áêüìç âáóéêÜ æçôÞìáôá.
σ α ρ ι θ ό ς σ υ ν δ ρ ο η τ ώ ν > 1 0 0
Γ ν ω σ τ ι κ ή , Π ε ρ ι ο χ ή . κ ω δ ι κ ό ς = Ά ρ θ ρ ο . κ ω δ ι κ ό ς , γ ν ω σ τ ι κ ή ς , π ε ρ ι ο χ ή ς
Γ ν ω σ τ ι κ ή , Π ε ρ ι ο χ ή . κ ω δ ι κ ό ς = Ά ρ θ ρ ο . κ ω δ ι κ ό ς , γ ν ω σ τ ι κ ή ς , π ε ρ ι ο χ ή ς
σ α ρ ι θ ό ς σ υ ν δ ρ ο η τ ώ ν > 1 0 0
Ά ρ θ ρ ο
Γ ν ω σ τ ι κ ή Π ε ρ ι ο χ ή Γ ν ω σ τ ι κ ή Π ε ρ ι ο χ ή Ά ρ θ ρ ο
( α )
( β )
Π Γ ν ω σ τ ι κ ή D Π ε ρ ι ο χ ή . κ ω δ ι κ ό ς , Ά ρ θ ρ ο . κ ω δ ι κ ό ς D γ ν ω σ τ ι κ ή ς D π ε ρ ι ο χ ή ς
Γ ν ω σ τ ι κ ή , Π ε ρ ι ο χ ή . κ ω δ ι κ ό ς = Ά ρ θ ρ ο . κ ω δ ι κ ό ς , γ ν ω σ τ ι κ ή ς , π ε ρ ι ο χ ή ς
Π κ ω κ
Π κ ω κ ω κ ή ή
δ ι ό ς , τ ί τ λ ο ς
δ ι ό ς γ ν σ τ ι ς π ε ρ ι ο χ ς , τ ί τ λ ο ς
σ α ρ ι θ ό ς σ υ ν δ ρ ο η τ ώ ν > 1 0 0
Ά ρ θ ρ ο
Π κ ω κ
δ ι ό ς , τ ί τ λ ο ς , α ρ ι θ ό ς σ υ ν δ ρ ο η τ ώ ν
Γ ν ω σ τ ι κ ή Π ε ρ ι ο χ ή
( γ )
¼ðùò åßíáé ãíùóôü, ç ðñÜîç ôçò åðéëïãÞò ìåéþíåé ôï ðëÞèïò ôùí ãñáììþí ìßáò
ó÷Ýóçò. ÅðïìÝíùò, ìå ôç ÷ñÞóç ôïõ êáíüíá ìåôáó÷çìáôéóìïý 1 ìðïñïýìå íá
äéáóðÜóïõìå ìßá ðñÜîç åðéëïãÞò ìå óýíèåôç óõíèÞêç óå áðëïýóôåñåò êáé óôç
óõíÝ÷åéá ìå ôç ÷ñÞóç ôùí êáíüíùí 2, 4, 6 êáé 9 ìðïñïýìå íá ôñïðïðïéÞóïõìå ôï
áñ÷éêü äÝíäñï Ýêöñáóçò, Ýôóé þóôå ïé ðñÜîåéò åðéëïãÞò íá åêôåëåóèïýí óå üóï
ãßíåôáé ÷áìçëüôåñï åðßðåäï.
Y
σ
X Y X
ÕðïèÝôïõìå üôé ôï ìÝãåèïò ôïõ ðßíáêá X åßíáé áñêåôÜ ìéêñüôåñï ôïõ Y êáé
üôé õðÜñ÷åé Ýíáò êáôÜëïãïò óýíäåóçò ìåôáîý ôùí X êáé Y , ï ïðïßïò äåí ÷ñçóé-
ìïðïéåß ôéò óôÞëåò ðïõ áíáöÝñïíôáé óôç óõíèÞêç θ. ÅðïìÝíùò, ç åêôÝëåóç ôçò
ðñÜîçò ôçò åðéëïãÞò ðñéí ôçí ðñÜîç ôçò óýíäåóçò ßóùò íá ìçí Ý÷åé ôï åðéèõìçôü
áðïôÝëåóìá áðü ðëåõñÜò êüóôïõò åðåîåñãáóßáò. Áõôü óõìâáßíåé åðåéäÞ ìåôÜ ôçí
åêôÝëåóç ôçò ðñÜîçò åðéëïãÞò óôïí ðßíáêá X èá ðñÝðåé íá åîåôáóèïýí ïé ãñáì-
ìÝò ôïõ Y ìßá-ðñïò-ìßá, äéüôé äåí ìðïñåß íá ãßíåé ÷ñÞóç ôïõ êáôáëüãïõ óýíäåóçò.
Ôï ãåãïíüò áõôü ßóùò áõîÞóåé ôï êüóôïò åðåîåñãáóßáò êáé åðïìÝíùò ç åðéëïãÞ
åíüò áðïäïôéêïý ðëÜíïõ åêôÝëåóçò íá ìçí åßíáé åðéôõ÷Þò. Ôï ðáñÜäåéãìá ðïõ
áíáöÝñèçêå èá ãßíåé ðåñéóóüôåñï êáôáíïçôü üôáí ìåëåôçèïýí ïé ôñüðïé åðåîåñ-
ãáóßáò ôùí ðñÜîåùí ôçò ó÷åóéáêÞò Üëãåâñáò óôçí åðüìåíç ðáñÜãñáöï.
362 ÊåöÜëáéï 14. Âåëôéóôïðïßçóç êáé Åðåîåñãáóßá ÅñùôçìÜôùí
Óýìâïëï ÐåñéãñáöÞ
nT áñéèìüò ãñáììþí ôïõ ðßíáêá T
bT áñéèìüò óåëßäùí ãéá ôçí áðïèÞêåõóç ôïõ ðßíáêá T
bf rT áñéèìüò ãñáììþí ôïõ T ðïõ áðïèçêåýïíôáé óå ìßá óåëßäá
sT ìÝãåèïò ôïõ ðßíáêá T óå ÷áñáêôÞñåò (bytes)
d(T, a) áñéèìüò äéáêñéôþí ôéìþí ôçò óôÞëçò a ôïõ ðßíáêá T
sc(T, a) ìÝóïò áñéèìüò ãñáììþí ðïõ éêáíïðïéïýí óõíèÞêç éóüôçôáò ôçò óôÞëçò a
f anI ï ìÝóïò áñéèìüò ðáéäéþí (fanout) ôïõ äåíäñéêïý êáôáëüãïõ i
heightI ôï ýøïò ôïõ äåíäñéêïý êáôáëüãïõ i
lI ï áñéèìüò ôùí öýëëùí ôïõ êáôáëüãïõ i
Óçìåéþíåôáé üôé ãéá íá ðåôý÷ïõìå ôç ìÝãéóôç äõíáôÞ áêñßâåéá êáôÜ ôçí åêôß-
ìçóç êüóôïõò ôùí ðñÜîåùí èá ðñÝðåé ïé óôáôéóôéêÝò ðëçñïöïñßåò íá åíçìåñþíï-
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 363
14.3.1 ÅðéëïãÞ
Îåêéíïýìå ôçí ðåñéãñáöÞ ôùí áëãïñßèìùí åðåîåñãáóßáò ôùí ðñÜîåùí ôçò ó÷å-
óéáêÞò Üëãåâñáò ìå ôçí ðñÜîç ôçò åðéëïãÞò, ç ïðïßá åßíáé áðëÞ óôçí õëïðïßçóÞ
ôçò. Óôü÷ïò åßíáé íá ðñïóäéïñéóèïýí ïé ãñáììÝò ôïõ ðßíáêá, ïé ïðïßåò éêáíï-
ðïéïýí ìßá óõíèÞêç θ ðïõ ìðïñåß íá åßíáé áðëÞ Þ óýíèåôç, êáé íá ìåôÝ÷ïõí óå
áõôÞ ìßá Þ ðåñéóóüôåñåò óôÞëåò ôïõ ðßíáêá. Áíáëüãùò ìå ôç öýóç ôçò óõíèÞêçò
ïé áëãüñéèìïé åðåîåñãáóßáò ðïéêßëïõí.
CS1 = bT /2
364 ÊåöÜëáéï 14. Âåëôéóôïðïßçóç êáé Åðåîåñãáóßá ÅñùôçìÜôùí
sc(T, a)
CS2 = dlog2 (bT )e + d e−1
bf rT
Óôçí åîßóùóç áõôÞ ôï ðñþôï ìÝñïò ôïõ áèñïßóìáôïò åßíáé ôï ðëÞèïò ôùí ðñï-
óðåëÜóåùí ãéá ôïí ðñïóäéïñéóìü ôçò ðñþôçò ãñáììÞò ðïõ éêáíïðïéåß ôç óõíèÞêç
éóüôçôáò. Ôï äåýôåñï ìÝñïò ôïõ áèñïßóìáôïò åßíáé ôï ðëÞèïò ôùí ðñïóðåëÜóåùí
ðïõ áðáéôåßôáé ãéá ôçí áíÜãíùóç üëùí ôùí ãñáììþí ðïõ éêáíïðïéïýí ôç óõíèÞêç
éóüôçôáò. Åö’ üóïí ôï ðëÞèïò ôùí ãñáììþí áõôþí åßíáé sc(T, a) áðáéôïýíôáé
dsc(T, a)/bf rT e ðñïóðåëÜóåéò, èåùñþíôáò üôé ç áðïèÞêåõóç ôùí ãñáììþí óôï
äßóêï áêïëïõèåß ôç äéÜôáîç ôçò ôáîéíüìçóçò. ÅðåéäÞ ç ìßá áðü ôéò ðñïóðåëÜóåéò
áõôÝò Ý÷åé Þäç ðñáãìáôïðïéçèåß, áöáéñåßôáé ìßá ðñïóðÝëáóç (−1).
Áí ç óôÞëç áðïôåëåß êëåéäß ãéá ôïí ðßíáêá, ôüôå éó÷ýåé d(T, a) = 1, ïðüôå ôï
êüóôïò ôçò åðéëïãÞò ìå äõáäéêÞ áíáæÞôçóç éóïýôáé ìå ôï êüóôïò ôçò åýñåóçò ôçò
ðñþôçò ãñáììÞò ðïõ éêáíïðïéåß ôç óõíèÞêç:
Áí ç óôÞëç äåí áðïôåëåß êëåéäß ãéá ôïí ðßíáêá, ôüôå äå÷üìáóôå üôé sc(T, a) =
nT /d(T, a).
CS3 = heightI + 1
sc(T, a)
CS4 = heightI + d e
bf rT
bT
CS5 = heightI +
2
Áíéóüôçôá ìå ×ñÞóç Äåõôåñåýïíôïò Êáôáëüãïõ (S6 )
Áí ç óõíèÞêç ðåñéÝ÷åé ôåëåóôÞ áíéóüôçôáò êáé õðÜñ÷åé äåõôåñåýùí êáôÜëïãïò
B+ -äÝíäñïõ ãéá ôç óôÞëç, ôüôå ìðïñåß íá ÷ñçóéìïðïéçèåß ãéá ôïí ðñïóäéïñéóìü
ôùí ãñáììþí ðïõ éêáíïðïéïýí ôç óõíèÞêç. ¼ðùò åßíáé ãíùóôü, ôá öýëëá ôïõ Â+ -
äÝíäñïõ åßíáé ïñãáíùìÝíá ìå óõíäåäåìÝíç ëßóôá. ÅðïìÝíùò, áí ðñïóäéïñéóèåß
ç ôéìÞ ðïõ éêáíïðïéåß ôç óõíèÞêç éóüôçôáò, ìðïñïýìå íá ðñïóðåëÜóïõìå ôéò åðü-
ìåíåò ôéìÝò áêïëïõèþíôáò ôïõò äåßêôåò. Áêïëïõèþíôáò ôïõò äåßêôåò åããñáöþí
366 ÊåöÜëáéï 14. Âåëôéóôïðïßçóç êáé Åðåîåñãáóßá ÅñùôçìÜôùí
• Áí ìßá áðü ôéò óôÞëåò ðïõ óõììåôÝ÷ïõí óôç óõíèÞêç Ý÷åé êáôÜëïãï Þ ï
ðßíáêáò åßíáé ôáîéíïìçìÝíïò ùò ðñïò ôéò ôéìÝò ôçò óôÞëçò áõôÞò, ôüôå ìðïñåß
íá ÷ñçóéìïðïéçèåß Ýíáò áðü ôïõò áëãïñßèìïõò åðåîåñãáóßáò ôçò ðñÜîçò
åðéëïãÞò ìå âÜóç ôç óõãêåêñéìÝíç óôÞëç. Ïé åðéóôñåöüìåíåò ãñáììÝò ôïõ
ðßíáêá åëÝã÷ïíôáé óôç óõíÝ÷åéá ìßá-ðñïò-ìßá ùò ðñïò ôçí éêáíïðïßçóç
ôùí õðïëïßðùí óõíèçêþí. ÔåëéêÜ, åðéóôñÝöïíôáé ìüíï ïé ãñáììÝò ðïõ
éêáíïðïéïýí üëåò ôéò áðëïýóôåñåò óõíèÞêåò.
14.3.2 ÐñïâïëÞ
Õðåíèõìßæåôáé üôé ç ðñÜîç ôçò ðñïâïëÞò åðéóôñÝöåé ôéò ôéìÝò åíüò õðïóõíüëïõ
óôçëþí åíüò ðßíáêá Þ ìßáò Ýêöñáóçò. Ç åðåîåñãáóßá ôçò ðñÜîçò ôçò ðñïâïëÞò
áðïôåëåßôáé áðü äýï óôÜäéá: á) áðáëïéöÞ ôùí óôçëþí ðïõ äåí áíáöÝñïíôáé óôï
åñþôçìá êáé â) áðáëïéöÞ ôùí äéðëïôýðùí (ãñáììþí ìå ßäéåò ôéìÝò óå üëåò ôéò
åðéëåãüìåíåò óôÞëåò). Ãéá ôï äåýôåñï óôÜäéï, ðïõ åßíáé êáé äõóêïëüôåñï, ìðïñåß
íá ÷ñçóéìïðïéçèåß ôáîéíüìçóç Þ êáôáêåñìáôéóìüò.
14.3.3 Óýíäåóç
Ç ðñÜîç ôïõ êáñôåóéáíïý ãéíïìÝíïõ êáé ôçò óýíäåóçò åßíáé ïé ðëÝïí ÷ñïíïâüñåò
ðñÜîåéò êáé åðïìÝíùò áðáéôïýíôáé áðïäïôéêïß áëãüñéèìïé ãéá ôçí åðåîåñãáóßá
368 ÊåöÜëáéï 14. Âåëôéóôïðïßçóç êáé Åðåîåñãáóßá ÅñùôçìÜôùí
ôïõò [Mishra 1992]. Ôï ãåãïíüò áõôü ïäÞãçóå ôïõò åñåõíçôÝò óôçí áíÜðôõîç
ðïëëþí áëãïñßèìùí åðåîåñãáóßáò ìå óôü÷ï ôçí ôá÷ýôåñç åðåîåñãáóßá. ËáìâÜ-
íïíôáò õð’ üøç üôé ç ðñÜîç ôçò óýíäåóçò åêôåëåßôáé ðïëý óõ÷íÜ, ç ýðáñîç áðï-
äïôéêþí ìåèüäùí åðåîåñãáóßáò óõìâÜëåé óçìáíôéêÜ óôçí êáëýôåñç áðüäïóç ôïõ
ÓÄÂÄ.
CJ1 = nX · bY + bX
CJ2 = bX · bY + bX
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 369
CJ2 = bX + bY
CJ3 = bX + nX · C
( α ) ε φ ω λ ι α έ ν ο ι β ρ ό γ χ ο ι ( n e s t e d + l o o p ) ( β ) ε φ ω λ ι α έ ν ο ι β ρ ό γ χ ο ι ε ε λ ί δ ε ς ( b l o c k n e s t e d + l o o p )
σ σ σ
Π ί ν α κ α ς Y
Π ί ν α κ α ς X
Κ α τ ά λ ο γ ο ς γ ι α τ η
τ ή λ η π ο υ
υ ε τ έ χ ε ι τ η
σ σ
υ ν θ ή κ η ν δ ε η ς
σ σ ύ σ
( γ ) ε φ ω λ ι α έ ν ο ι β ρ ό γ χ ο ι ε κ α τ ά λ ο γ ο ( i n d e x e d n e s t e d + l o o p )
ç êÜèå ãñáììÞ ôïõ ðßíáêá äéáâÜæåôáé ìßá ìüíï öïñÜ. Óçìåéþóôå ôç äéáöïñÜ ìå
ôç ìÝèïäï ôùí åìöùëéáóìÝíùí âñü÷ùí, üðïõ ï Ýíáò åê ôùí äýï ðéíÜêùí äéáâÜ-
æåôáé ðïëëÝò öïñÝò áõîÜíïíôáò óçìáíôéêÜ ôï êüóôïò åðåîåñãáóßáò. Óôï Ó÷Þìá
14.6 áðåéêïíßæåôáé Ýíá ðáñÜäåéãìá öõóéêÞò óýíäåóçò ìå ôç ìÝèïäï ôáîéíüìçóçò-
óõã÷þíåõóçò. Ðéï óõãêåêñéìÝíá, áñéóôåñÜ ðáñïõóéÜæåôáé ôï æåýãïò ôùí áñ÷éêþí
ó÷Ýóåùí, óôï êÝíôñï ôï æåýãïò ôùí ó÷Ýóåùí ìåôÜ áðü ôáîéíüìçóç, åíþ óôá äåîéÜ
ðáñïõóéÜæåôáé ç ôåëéêÞ ó÷Ýóç ìåôÜ ôç óõã÷þíåõóç.
a y1 y2 a y1 y2
9 11 12 1 1 2 a x1 x2 y1 y2
a x1 x2 a x1 x2
1 3 4 1 3 4 1 1 2 1 2
9 2 4 1 1 2
7 7 8 6 5 6 1 1 2 3 4
5 1 2 5 1 2
6 5 6 7 7 8 6 2 4 5 6
6 2 4 6 2 4
8 9 10 8 9 10 9 2 4 11 12
1 1 2 9 2 4
1 1 2 9 11 12 9 2 4 13 14
9 13 14 9 13 14
ÕðïèÝôïíôáò üôé ïé ðßíáêåò åßíáé Þäç ôáîéíïìçìÝíïé ùò ðñïò ôéò óôÞëåò óýí-
äåóçò, ôï êüóôïò ôçò åðåîåñãáóßáò åßíáé:
CJ4 = bX + bY
åðåéäÞ êÜèå óåëßäá äåäïìÝíùí ôïõ êÜèå ðßíáêá äéáâÜæåôáé ìßá ìüíï öïñÜ. Áí
ðñÝðåé íá ðñïçãçèåß ôáîéíüìçóç ôùí ðéíÜêùí ôüôå óôï áíùôÝñù êüóôïò ðñÝðåé
íá ðñïóôåèåß êáé ôï êüóôïò ôçò ôáîéíüìçóçò ôï ïðïßï áíáëýåôáé óå åðüìåíç
ðáñÜãñáöï.
14.3.5 Ôáîéíüìçóç
Ç ôáîéíüìçóç ÷ñçóéìïðïéåßôáé åßôå Ýììåóá ùò åíäéÜìåóï óôÜäéï êáôÜ ôçí åðåîåñ-
ãáóßá Üëëùí ðñÜîåùí (ð.÷., óýíäåóç ìå ôáîéíüìçóç-óõã÷þíåõóç) åßôå Üìåóá êá-
ôüðéí åíôïëÞò ôïõ ÷ñÞóôç (ð.÷., ìÝóù ôçò åíôïëÞò ORDER BY ôçò SQL). ËáìâÜ-
íïíôáò õð’ üøç üôé Ýíá ÓÄÂÄ äéá÷åéñßæåôáé ìåãÜëåò ðïóüôçôåò äåäïìÝíùí, óôç
ãåíéêÞ ðåñßðôùóç Ýíáò ðßíáêáò äåí åßíáé äõíáôüí íá áðïèçêåõèåß åîïëïêëÞñïõ
óôçí êýñéá ìíÞìç. ÅðïìÝíùò, ôï ÓÄÂÄ ðñÝðåé íá äéáèÝôåé áðïäïôéêÝò ìåèüäïõò
åîùôåñéêÞò ôáîéíüìçóçò (external sorting).
Ç ðëÝïí äéáäåäïìÝíç ìÝèïäïò åîùôåñéêÞò ôáîéíüìçóçò åßíáé ç ôáîéíüìçóç
ìå óõã÷þíåõóç (mergesort). ¸óôù N ôï ðëÞèïò ôùí ãñáììþí ôïõ ðßíáêá ðñïò
ôáîéíüìçóç êáé n ôï ðëÞèïò ôùí ãñáììþí ðïõ ìðïñïýí íá áðïèçêåõèïýí óôçí
êýñéá ìíÞìç. Ôá âÞìáôá ôçò ìåèüäïõ äßäïíôáé óôï Ó÷Þìá 14.8.
Ï áñéèìüò n ôùí ãñáììþí ðïõ ìðïñïýí íá áðïèçêåõèïýí óôçí êýñéá ìíÞìç
ðñïóäéïñßæåôáé áðü ôï ðïóü ôçò äéáèÝóéìçò ìíÞìçò ðïõ Ý÷åé äåóìåõèåß ãéá ôçí
ðñÜîç ôçò ôáîéíüìçóçò. Ï áñéèìüò ôùí ôáîéíïìçìÝíùí ôìçìÜôùí ðïõ óõã÷ùíåýï-
íôáé ìðïñåß íá åßíáé ìåãáëýôåñïò áðü äýï. Óôç ãåíéêÞ ðåñßðôùóç óõã÷ùíåýïíôáé
m ôáîéíïìçìÝíá ôìÞìáôá ôáõôü÷ñïíá êáé ç ìÝèïäïò êáëåßôáé ôáîéíüìçóç ìå
óõã÷þíåõóç m äñüìùí (m-way mergesort). Óçìåéþíåôáé üôé ðñÝðåé íá õðÜñ÷åé
äéáèÝóéìç ôïõëÜ÷éóôïí ìßá óåëßäá ìíÞìçò ãéá ôçí áðïèÞêåõóç ôïõ áðïôåëÝóìá-
374 ÊåöÜëáéï 14. Âåëôéóôïðïßçóç êáé Åðåîåñãáóßá ÅñùôçìÜôùí
ôïò. ÊÜèå öïñÜ ðïõ ç óåëßäá åîüäïõ ãåìßóåé, áðïèçêåýåôáé óôï äßóêï. ÌåôÜ
ôï ðÝñáò ôçò äéáäéêáóßáò ôáîéíüìçóçò ï ôáîéíïìçìÝíïò ðßíáêáò åßíáé áðïèç-
êåõìÝíïò óôï äßóêï ôïõ óõóôÞìáôïò êáé ìðïñåß íá ÷ñçóéìïðïéçèåß ãéá ðåñáéôÝñù
ðñÜîåéò (ð.÷., áðáëïéöÞ äéðëïôýðùí).
Óôï Ó÷Þìá 14.9 áðåéêïíßæåôáé Ýíá ðáñÜäåéãìá ôáîéíüìçóçò ìå óõã÷þíåõóç 2
äñüìùí. Åéäéêüôåñá, ï áñ÷éêüò ðßíáêáò ôïõ Ó÷Þìáôïò 14.9á ðåñéÝ÷åé 12 ãñáììÝò,
åíþ ï áñéèìüò ôùí áñ÷éêþí ôìçìÜôùí åßíáé M =12/3=4, üðùò ðáñïõóéÜæåôáé óôï
Ó÷Þìá 14.9â, üðïõ ôï êÜèå áñ÷éêü ôìÞìá áðïôåëåßôáé áðü 3 ãñáììÝò. Óôï Ó÷Þìá
14.9ã áñéèìüò ôùí ôáîéíïìçìÝíùí ôìçìÜôùí åßíáé 2, åíþ êÜèå ôìÞìá áðïôåëåß-
ôáé áðü 6 ãñáììÝò. ÔÝëïò, óôï Ó÷Þìá 14.9ä ðáñïõóéÜæåôáé ç ôåëéêÞ ó÷Ýóç. Ç
ôáîéíüìçóç ðñáãìáôïðïéåßôáé ùò ðñïò ôç óôÞëç a.
a x1 x2 5 1 2 a x1 x2
1 1 2
9 2 4 6 2 4 1 1 1 1 1 2
5 1 2 9 2 4 2 2 5 1 1 1
6 2 4 1 1 2 5 1 2 2 2 5
1 1 2 1 1 1 6 2 4 3 5 5
1 1 1 2 2 5 9 2 4 4 5 5
2 2 5 5 1 2
3 5 5 3 5 5
3 5 5 5 2 2
4 5 5 4 5 5
4 5 5 6 2 4
8 6 7 5 2 2
8 6 7 7 7 7
5 2 2 7 7 7
7 7 7 8 6 7
7 7 7 8 6 7
9 0 0 9 2 4
9 0 0 9 0 0
5 2 2 9 0 0
Τ ε λ ι κ ό α π ο τ έ λ ε σ e α
Π Γ ν ω σ τ ι κ ή D Π ε ρ ι ο χ ή . κ ω δ ι κ ό ς , Ά ρ θ ρ ο . κ ω δ ι κ ό ς D γ ν ω σ τ ι κ ή ς D π ε ρ ι ο χ ή ς
Γ ν ω σ τ ι κ ή , Π ε ρ ι ο χ ή . κ ω δ ι κ ό ς = Ά ρ θ ρ ο . κ ω δ ι κ ό ς , γ ν ω σ τ ι κ ή ς , π ε ρ ι ο χ ή ς
Π ρ ο σ ω ρ ι ν ή α π ο θ ή κ ε υ σ η
Π ρ ο σ ω ρ ι ν ή α π ο θ ή κ ε υ σ η
α π ο τ ε λ έ σ e α τ ο ς γ ι α τ η ν
α π ο τ ε λ έ σ e α τ ο ς γ ι α τ η ν
π ρ ά ξ η τ η ς σ ύ ν δ ε σ η ς
π ρ ά ξ η τ η ς ε π ι λ ο γ ή ς
σ α ρ ι θ ό ς σ υ ν δ ρ ο η τ ώ ν > 1 0 0
Ά ρ θ ρ ο
Γ ν ω σ τ ι κ ή Π ε ρ ι ο χ ή
óùñéíü ðßíáêá T1 . Óôç óõíÝ÷åéá åêôåëåßôáé ç ðñÜîç ôçò óýíäåóçò ìåôáîý ôùí
ðéíÜêùí T1 êáé ¢ñèñï êáé ôï áðïôÝëåóìá áðïèçêåýåôáé óôïí ðñïóùñéíü ðßíáêá
T2 . ÔÝëïò, åêôåëåßôáé ç ðñÜîç ôçò ðñïâïëÞò ðïõ âñßóêåôáé óôï áíþôåñï åðßðåäï
ôïõ äÝíäñïõ Ýêöñáóçò êáé ðáñÜãåôáé ôï ôåëéêü áðïôÝëåóìá.
Óçìåéþíåôáé üôé ôï óõíïëéêü êüóôïò åðåîåñãáóßáò åßíáé ìåãáëýôåñï áðü ôï
Üèñïéóìá ôïõ êüóôïõò ôùí åðéìÝñïõò ðñÜîåùí, äéüôé ç ðñïóùñéíÞ áðïèÞêåõóç
ôùí åíäéÜìåóùí áðïôåëåóìÜôùí åéóÜãåé Ýíá åðéðëÝïí êüóôïò óôçí åðåîåñãáóßá
ôïõ åñùôÞìáôïò.
14.5 Óýíïøç
Ðñéí ôç åêôÝëåóç åíüò åñùôÞìáôïò ðñïçãåßôáé ôï óôÜäéï ôçò âåëôéóôïðïßçóçò.
Ôï åñþôçìá ôïõ ÷ñÞóôç ìðïñåß íá ôñïðïðïéçèåß Ýôóé þóôå íá ìåéùèåß ï ÷ñüíïò
åðåîåñãáóßáò. Åðßóçò, óôï óôÜäéï áõôü ðñïóäéïñßæåôáé ç óåéñÜ ðñïóðÝëáóçò ôùí
äåäïìÝíùí, ðïéïß êáôÜëïãïé èá ÷ñçóéìïðïéçèïýí, ðüóç ìíÞìç èá äåóìåõèåß, ðïéÜ
áñ÷åßá äåäïìÝíùí áðáéôïýíôáé ãéá ôçí åðåîåñãáóßá. ÌåôÜ ôïí ðñïóäéïñéóìü
ôùí ðñïçãïõìÝíùí, äçìéïõñãåßôáé Ýíá ðëÜíï åêôÝëåóçò åñùôÞìáôïò, ôï ïðïßï
ðåñéÝ÷åé üëåò ôéò áðáñáßôçôåò ðëçñïöïñßåò ãéá ôçí åðåîåñãáóßá ôïõ åñùôÞìáôïò.
Åêôüò áðü ôç óåéñÜ åêôÝëåóçò ôùí ðñÜîåùí, ôï ðëÜíï åêôÝëåóçò ðåñéÝ÷åé êáé
ðëçñïöïñßåò ó÷åôéêÜ ìå ôï ðïéÜ ìÝèïäïò èá ÷ñçóéìïðïéçèåß ãéá ôçí åðåîåñãáóßá
êÜèå ðñÜîçò.
Äýï åßíáé ïé âáóéêÝò ìÝèïäïé âåëôéóôïðïßçóçò ðïõ åöáñìüæïíôáé óôá ÓÄÂÄ:
á) åõñéóôéêÞ âåëôéóôïðïßçóç ðïõ ÷ñçóéìïðïéåß êáíüíåò ìåôáó÷çìáôéóìïý ôïõ áñ-
÷éêïý åñùôÞìáôïò êáé â) âåëôéóôïðïßçóç âáóéóìÝíç óôï êüóôïò ôùí ðñÜîåùí.
Óôç äåýôåñç ìÝèïäï ÷ñçóéìïðïéåßôáé åêôßìçóç ãéá ôï êüóôïò ôçò êÜèå ðñÜîçò
ðïõ óõììåôÝ÷åé óôï åñþôçìá, Ýôóé þóôå íá Ý÷ïõìå ìßá óõíïëéêÞ åêôßìçóç ãéá ôï
êüóôïò üëïõ ôïõ åñùôÞìáôïò. Ôï ðáñáãüìåíï ðëÜíï åêôÝëåóçò ôïõ åñùôÞìáôïò
äéï÷åôåýåôáé óôç ìç÷áíÞ åêôÝëåóçò ðñïò åðåîåñãáóßá.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 377
14.3. ÐïéÜ ç âáóéêÞ äéáöïñÜ ìåôáîý ôçò óôáôéêÞò êáé ôçò äõíáìéêÞò âåëôéóôï-
ðïßçóçò; ÁíáöÝñáôå ìåéïíåêôÞìáôá êáé ðëåïíåêôÞìáôá.
14.5. Èåùñåßóôå ôéò ó÷Ýóåéò R1 (a,b,c) êáé R2 (a,f,g). ÐåñéãñÜøôå ôïí ôñüðï
åðåîåñãáóßáò ôçò ðñÜîçò öõóéêÞò óýíäåóçò ÷ñçóéìïðïéþíôáò ôéò äéáöïñåôéêÝò
ìåèüäïõò óýíäåóçò ðïõ õðÜñ÷ïõí.
14.6. Èåùñåßóôå ôéò ó÷Ýóåéò R1 (a,b,c) êáé R2 (c,d,e). Ç ó÷Ýóç R1 Ý÷åé 30000 ãñáì-
ìÝò êáé ç ó÷Ýóç R2 Ý÷åé 60000 ãñáììÝò. Ãíùñßæïõìå åðßóçò üôé 20 åããñáöÝò ôçò
R1 êáé 30 åããñáöÝò ôçò R2 ìðïñïýí íá áðïèçêåõèïýí óå ìßá óåëßäá äßóêïõ. Íá
åêôéìçèåß ôï ðëÞèïò ôùí ðñïóðåëÜóåùí ðïõ áðáéôïýíôáé ãéá ôïí õðïëïãéóìü ôçò
óýíäåóçò ôùí äýï ó÷Ýóåùí ÷ñçóéìïðïéþíôáò á) ôç ìÝèïäï ôùí åìöùëéáóìÝíùí
âñü÷ùí, â) ôç ìÝèïäï ôùí åìöùëéáóìÝíùí âñü÷ùí ìå ôìÞìáôá êáé ã) ôç ìÝèïäï
óýíäåóçò ìå êáôáêåñìáôéóìü.
2·(N −1))!
14.7. Áðïäåßîôå üôé áí Ý÷ïõìå N ó÷Ýóåéò, ôüôå õðÜñ÷ïõí (N −1)! äéáöïñåôéêïß
ôñüðïé ãéá ôçí åêôÝëåóç ôçò óýíäåóçò.
14.8. Äßíåôáé ç áêïëïõèßá áñéèìþí: 10, 15, 5, 22, 25, 30, 20, 40, 35, 45, 42, 43, 44,
60, 50. Åöáñìüóôå ôç ìÝèïäï ôáîéíüìçóçò ìå óõã÷þíåõóç äýï äñüìùí ãéá ôçí
ôáîéíüìçóç ôçò áêïëïõèßáò óå öèßíïõóá äéÜôáîç.
14.10. Íá åêôåëÝóåôå ôçí ðñÜîç ôçò öõóéêÞò óýíäåóçò ÷ñçóéìïðïéþíôáò ôñåéò áðü
ôïõò ôñüðïõò åðåîåñãáóßáò ðïõ ìåëåôÞèçêáí êáé íá óõãêñßíåôå ôéò ìåèüäïõò ùò
ðñïò ôï êüóôïò åðåîåñãáóßáò.
15
Äéá÷åßñéóç Óõíáëëáãþí
ÐïëëÝò öïñÝò õðÜñ÷åé ç áíÜãêç ãéá áôïìéêÞ åêôÝëåóç (atomic execution) åíüò
óõíüëïõ ëåéôïõñãéþí. Áõôü óçìáßíåé üôé áí Ýóôù êáé ìßá ëåéôïõñãßá áðïôý÷åé,
ç åðåîåñãáóßá áðïôõã÷Üíåé óôï óýíïëü ôçò. ¸íá óýíïëï ëåéôïõñãéþí ôï ïðïßï
áðïôåëåß ìßá ëïãéêÞ ëåéôïõñãéêÞ ìïíÜäá êáëåßôáé óõíáëëáãÞ (transaction). Ïé
ëåéôïõñãßåò ìßáò óõíáëëáãÞò ìðïñåß íá ðåñéÝ÷ïõí åíôïëÝò áíÜãíùóçò, åéóáãùãÞò,
äéáãñáöÞò Þ åíçìÝñùóçò ôùí äåäïìÝíùí ôçò ÂÄ. Ôçí åõèýíç ãéá ôçí ïëïêëç-
ñùìÝíç Þ ü÷é åðåîåñãáóßá ôùí óõíáëëáãþí Ý÷åé áðïêëåéóôéêÜ êáé ìüíï ôï ÓÄÂÄ,
êáé ðïéü óõãêåêñéìÝíá ôï ôìÞìá ôïõ ÓÄÂÄ ðïõ åßíáé õðåýèõíï ãéá ôç äéá÷åßñéóç
ôùí óõíáëëáãþí (transaction manager). ÌåôÜ ôçí åðåîåñãáóßá ìßáò óõíáëëáãÞò
ôá äåäïìÝíá ðñÝðåé íá éêáíïðïéïýí üëïõò ôïõò ðåñéïñéóìïýò áêåñáéüôçôáò ðïõ
Ý÷ïõí ïñéóèåß êáôÜ ôï ó÷åäéáóìü ôçò âÜóçò. Ãéá ðáñÜäåéãìá, ç áíÜëçøç åíüò
ðïóïý áðü Ýíáí ôñáðåæéêü ëïãáñéáóìü ðñÝðåé íá óõíïäåýåôáé áðü åíçìÝñùóç
ôïõ ëïãáñéáóìïý, äéáöïñåôéêÜ äåí õðÜñ÷åé óõíÝðåéá óôá äåäïìÝíá ôçò âÜóçò.
Ôï ðñüâëçìá ôçò äéá÷åßñéóçò ôùí óõíáëëáãþí ãßíåôáé áêüìç äõóêïëüôåñï
ëáìâÜíïíôáò õð’ üøç üôé ôá óýã÷ñïíá ÓÄÂÄ Ý÷ïõí ôçí éêáíüôçôá íá åîõðçñå-
ôïýí ðïëëïýò ÷ñÞóôåò ôáõôü÷ñïíá. ÅðïìÝíùò, ðñÝðåé íá õðÜñ÷ïõí áîéüðéóôïé
ìç÷áíéóìïß åëÝã÷ïõ ôçò áêåñáéüôçôáò ôùí äåäïìÝíùí êáèþò ðïëëÝò óõíáëëáãÝò
ìðïñåß íá âñßóêïíôáé óå åîÝëéîç, ðñïóðåëáýíïíôáò (ðéèáíüôáôá) êïéíÜ äåäïìÝíá
379
380 ÊåöÜëáéï 15. Äéá÷åßñéóç Óõíáëëáãþí
15.1 ÓõíáëëáãÝò
Ìßá óõíáëëáãÞ åßíáé óõíÞèùò ôï áðïôÝëåóìá ôçò åêôÝëåóçò åíüò ðñïãñÜììáôïò
ðïõ åßíáé ãñáììÝíï óå ìßá ãëþóóá ðñïãñáììáôéóìïý õøçëïý åðéðÝäïõ. ÐïëëÝò
öïñÝò ç óõíáëëáãÞ ïñéïèåôåßôáé ìå ôç ÷ñÞóç åêöñÜóåùí üðùò BEGIN TRANS-
ACTION êáé END TRANSACTION. Ïé åíôïëÝò ðïõ ðåñéêëåßïíôáé ìåôáîý ôùí
åêöñÜóåùí áõôþí ðñïóäéïñßæïõí ôç óõíáëëáãÞ.
Ε ν ε ρ γ ή
Κ α τ ά σ τ α σ η
Κ α τ ά σ τ α σ η
Κ α τ ά σ τ α σ η
Μ ε ρ ι κ ή ς
Α π ο τ υ χ ί α ς
έ σ ε υ σ η ς
Κ α τ ά σ τ α σ η Κ α τ ά σ τ α σ η
έ σ ε υ σ η ς Α π ό ρ ρ ι ψ η ς
Σ υ ν α λ λ α γ ή Σ 1 Σ υ ν α λ λ α γ ή Σ 2 Σ υ ν α λ λ α γ ή Σ 1 Σ υ ν α λ λ α γ ή Σ 2 Σ υ ν α λ λ α γ ή Σ 1 Σ υ ν α λ λ α γ ή Σ 2
R e a d ( A ) ;
S u m : = 0 ;
R e a d ( A ) ;
A : = A N ;
R e a d ( A ) ;
A : = A N ;
S u m : = S u m + A ;
W r i t e ( A ) ;
R e a d ( A ) ;
R e a d ( A ) ;
A : = A + M ;
R e a d ( X ) ;
A : = A + M ;
X : = X N ;
W r i t e ( A ) ;
.
W r i t e ( A ) ;
W r i t e ( X ) ;
R e a d ( B ) ;
R e a d ( X ) ;
W r i t e ( A ) ; R e a d ( B ) ;
u m : = u m + X ;
s s
R e a d ( Y ) ;
B : = B + N ;
u m : = u m + Y ;
s s
W r i t e ( B ) ;
R e a d ( Y ) ;
Y : = Y + N ;
ς ς ς
ο ο ο
W r i t e ( Y ) ;
ό ν ό ν ό ν
ρ ρ ρ
χ χ χ
( α ) Χ α + έ ν η Ε ν η + έ ρ ω σ η ( β ) Λ α ν θ α σ + έ ν η Α ν ά γ ν ω σ η ( γ ) Λ α ν θ α σ + έ ν η Ά θ ρ ο ι σ η
äýï óõíáëëáãÝò ðïõ áðåéêïíßæïíôáé óôï Ó÷Þìá 15.2á üðïõ ðáñïõóéÜæåôáé ç áë-
ëçëïõ÷ßá åêôÝëåóçò ôùí åíôïëþí ôùí äýï óõíáëëáãþí. Ç óõíáëëáãÞ Ó2 äéáâÜæåé
ôçí ôéìÞ ôïõ A ðñéí íá êáôá÷ùñéóèåß ç íÝá ôéìÞ áðü ôç Ó1, êáé áðïèçêåýåé ôç
íÝá ôéìÞ ôïõ A óôç ÂÄ ìåôÜ áðü ôç Ó1. Ôï áðïôÝëåóìá ôçò åêôÝëåóçò áõôÞò åßíáé
üôé ç åíçìÝñùóç ôïõ A áðü ôç Ó1 Ý÷åé ÷áèåß.
Ôï äåýôåñï ðñüâëçìá ðïõ åîåôÜæïõìå åßíáé ôï ðñüâëçìá ôçò ëáíèáóìÝíçò
áíÜãíùóçò (dirty read), ôï ïðïßï áðåéêïíßæåôáé óôï Ó÷Þìá 15.2â. Ôï ðñüâëçìá
áõôü åìöáíßæåôáé üôáí ìßá óõíáëëáãÞ ðñáãìáôïðïéåß áëëáãÝò óôá äåäïìÝíá êáé
ãéá êÜðïéï ëüãï áðïôõã÷Üíåé. Ðñéí ôçí åðáíáöïñÜ ôùí äåäïìÝíùí óôçí áñ-
÷éêÞ êáôÜóôáóç êÜðïéá Üëëç óõíáëëáãÞ äéáâÜæåé ôá äåäïìÝíá ìå áðïôÝëåóìá
íá ðñáãìáôïðïéåßôáé ìßá ëáíèáóìÝíç áíÜãíùóç. Óôï ðáñÜäåéãìá ôïõ ó÷Þìáôïò,
ç óõíáëëáãÞ Ó1 áëëÜæåé ôçí ôéìÞ ôïõ A êáé Ýóôù üôé áìÝóùò ìåôÜ áðïôõã÷Üíåé.
ÁìÝóùò ìåôÜ, ç óõíáëëáãÞ Ó2 äéáâÜæåé ôçí ôéìÞ ôïõ A ðñïóèÝôåé ôï M êáé óôç
óõíÝ÷åéá áðïèçêåýåé ôç íÝá ôéìÞ ôïõ A. Ç ôéìÞ ôïõ A ðïõ äéáâÜæåôáé áðü ôç Ó2
åßíáé ëáíèáóìÝíç, äéüôé ç Ó1 Ý÷åé áðïôý÷åé êáé åðïìÝíùò, ç ôéìÞ ôïõ A Ýðñåðå
íá Ý÷åé áðïêáôáóôáèåß ìå ôçí ðñïçãïýìåíç ôéìÞ (ðñéí ôçí áëëáãÞ ôçò Ó1).
Ôï ôñßôï ðñüâëçìá ðïõ åîåôÜæïõìå áöïñÜ óôçí ðáñáãùãÞ óõãêåíôñùôéêþí
óôïé÷åßùí (ð.÷., Üèñïéóìá, ìÝóï üñï) áðü ôá äåäïìÝíá ôçò ÂÄ. Ðéï óõãêåêñéìÝíá
åîåôÜæïõìå ôï ðñüâëçìá ôçò ëáíèáóìÝíçò Üèñïéóçò (incorrect summary) ôï ïðïßï
áðåéêïíßæåôáé óôï Ó÷Þìá 15.2ã. Ç óõíáëëáãÞ Ó1 äéáâÜæåé êÜðïéá äåäïìÝíá êáé
ðáñÜãåé ôï Üèñïéóìá ôùí äåäïìÝíùí áõôþí. Ùóôüóï, êÜðïéá äåäïìÝíá åíçìåñþ-
íïíôáé áðü ôç Ó2 ðñéí íá äéáâáóèïýí áðü ôç Ó1 (üðùò ôï X), åíþ êÜðïéá Üëëá
äåäïìÝíá åíçìåñþíïíôáé áðü ôç Ó2 ìåôÜ ôçí áíÜãíùóÞ ôïõò áðü ôç Ó1 (üðùò ôï
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 385
R e a d ( A ) ;
R e a d ( A ) ;
A : = A + M ;
A : = A N ;
W r i t e ( A ) ; W r i t e ( A ) ;
R e a d ( B ) ;
R e a d ( A ) ;
B : = B + N ;
A : = A N ;
W r i t e ( B ) ;
W r i t e ( A ) ;
R e a d ( B ) ;
R e a d ( A ) ;
A : = A + M ;
B : = B + N ;
W r i t e ( B ) ;
W r i t e ( A ) ;
ς ς
ο ο
ό ν ό ν
ρ ρ
χ χ
Óåéñéïðïßçóç Óýãêñïõóçò
ÈåùñÞóôå Ýíá ÷ñïíïäéÜãñáììá åêôÝëåóçò óõíáëëáãþí S êáé äýï ÷ñïíéêÜ óõ-
íå÷üìåíåò åíôïëÝò Ei êáé Ej ôùí óõíáëëáãþí Ó1 êáé Ó2 , áíôéóôïß÷ùò. Áí ïé Ei
êáé Ej áíáöÝñïíôáé óå äéáöïñåôéêÜ äåäïìÝíá, ôüôå ç óåéñÜ åêôÝëåóçò ôùí åíôï-
ëþí áõôþí ìðïñåß íá áëëÜîåé ÷ùñßò íá åðçñåÜæåôáé ôï áðïôÝëåóìá. Áí üìùò
ïé åíôïëÝò áíáöÝñïíôáé óôá ßäéá äåäïìÝíá D, ôüôå ç óåéñÜ åêôÝëåóçò Ý÷åé óç-
ìáóßá. Åö’ üóïí ìáò åíäéáöÝñïõí ìüíï ïé åíôïëÝò áíÜãíùóçò êáé áðïèÞêåõóçò
äéáêñßíïõìå ôéò åîÞò ðåñéðôþóåéò:
1. Ei = read(D) êáé Ej = read(D). Ç óåéñÜ åêôÝëåóçò äåí Ý÷åé óçìáóßá
åðåéäÞ êáé ïé äýï óõíáëëáãÝò äéáâÜæïõí ôá ßäéá äåäïìÝíá.
R e a d (
X
R e a d ( R e a d (
X ) ; X ) ;
W r i t e (
) ;
X
W r i t e ( W r i t e (
X ) ; X ) ;
R e a d (
) ;
R e a d (
X ) ;
R e a d (
X ) ;
Y ) ;
W r i t e (
W r i t e (
X R e a d (
Y ) ;
Y
) ;
R e a d (
X
) ;
R e a d (
Y ) ;
W r i t e (
) ;
X
W r i t e (
W r i t e (
Y ) ;
R e a d (
X ) ;
Y
) ;
R e a d ( W r i t e (
Y Y
) ;
W r i t e (
Y
) ; ) ;
W r i t e (
Y
) ;
R e a d (
Y
) ;
) ;
W r i t e (
ο
ς
ο
Y ) ;
ς
ό ν ό ν ό ν
ρ ρ ρ
χ χ χ
( α ( β ( γ
) ) )
Óåéñéïðïßçóç ¼øçò
¸óôùóáí äýï ÷ñïíïäéáãñÜììáôá S êáé S 0 ðïõ ðåñéÝ÷ïõí ôá ßäéá óýíïëá óõíáë-
ëáãþí. Ôá S êáé S 0 Êáëïýíôáé éóïäýíáìá ùò ðñïò ôçí üøç (view equivalent) áí
ðëçñïýíôáé ïé åîÞò êáíüíåò:
• Ãéá êÜèå óôïé÷åßï äåäïìÝíùí D, áí ç óõíáëëáãÞ Ói äéáâÜæåé ôçí áñ÷éêÞ
388 ÊåöÜëáéï 15. Äéá÷åßñéóç Óõíáëëáãþí
Σ υ ν α λ λ α γ ή Σ 1 Σ υ ν α λ λ α γ ή Σ 2 Σ υ ν α λ λ α γ ή Σ 1 Σ υ ν α λ λ α γ ή Σ 2 Σ υ ν α λ λ α γ ή Σ 1 Σ υ ν α λ λ α γ ή Σ 2
R e a d ( X ) ; R e a d ( X ) ; W r i t e ( X ) ;
R e a d ( X ) ;
W r i t e ( X ) ;
W r i t e ( X ) ;
W r i t e ( X ) ;
W r i t e ( X ) ;
W r i t e ( X ) ;
ς ς ς
ο ο ο
ό ν ό ν ό ν
ρ ρ ρ
χ χ χ
( α ) ( β ) ( γ )
Σ υ ν α λ λ α γ ή Σ 1 Σ υ ν α λ λ α γ ή Σ 2 Σ υ ν α λ λ α γ ή Σ 3 Σ υ ν α λ λ α γ ή Σ 1 Σ υ ν α λ λ α γ ή Σ 2 Σ υ ν α λ λ α γ ή Σ 3
R e a d ( X ) ;
R e a d ( X ) ;
W r i t e ( X ) ;
W r i t e ( X ) ;
W r i t e ( X ) ;
W r i t e ( X ) ;
W r i t e ( X ) ;
W r i t e ( X ) ;
( α ) ( β )
÷åß óå Ýíá ôìÞìá äåäïìÝíùí êáé ðñüêåéôáé ãéá ìßá ìåôáâëçôÞ ðïõ ðåñéãñÜöåé ôçí
êáôÜóôáóç ôïõ ôìÞìáôïò ôùí äåäïìÝíùí óå ó÷Ýóç ìå ôéò ëåéôïõñãßåò ðïõ åíåñ-
ãïýí óôá óõãêåêñéìÝíá äåäïìÝíá. Äýï åßíáé ïé âáóéêïß ôýðïé êëåéäáñéþí ðïõ
÷ñçóéìïðïéïýíôáé:
ÊÜèå öïñÜ ðïõ ìßá óõíáëëáãÞ èÝëåé íá ðñïóðåëÜóåé ìßá óåëßäá äåäïìÝ-
íùí æçôÜ íá ôçò ÷ïñçãçèåß ìßá êëåéäáñéÜ. ÅðåéäÞ ç áíÜãíùóç ôçò ßäéáò óåëßäáò
äåäïìÝíùí áðü ðïëëÝò óõíáëëáãÝò äåí äçìéïõñãåß ðñüâëçìá, åðéôñÝðåôáé íá ÷ï-
ñçãçèïýí ðïëëÝò êëåéäáñéÝò áíÜãíùóçò óå ðïëëÝò óõíáëëáãÝò. ÁíôéèÝôùò, ìßá
êëåéäáñéÜ áðïèÞêåõóçò ìðïñåß íá ÷ïñçãçèåß ìüíï óå ìßá óõíáëëáãÞ, äéüôé äåí
åðéôñÝðåôáé óå ðïëëÝò óõíáëëáãÝò íá åíçìåñþíïõí ôáõôü÷ñïíá ôçí ßäéá óåëßäá
äåäïìÝíùí. ¸ôóé, ãéá üóï äéÜóôçìá ìßá óõíáëëáãÞ Ý÷åé êëåéäáñéÜ áðïèÞêåõ-
óçò ãéá ìßá óåëßäá äåäïìÝíùí äåí åðéôñÝðåôáé ç ÷ïñÞãçóç êëåéäáñéÜò óå Üëëåò
óõíáëëáãÝò. Ï ìç÷áíéóìüò êëåéäþìáôïò ëåéôïõñãåß ùò åîÞò:
Σ υ ν α λ λ α γ ή Σ 1 Σ υ ν α λ λ α γ ή Σ 2 Σ υ ν α λ λ α γ ή Σ 1 Σ υ ν α λ λ α γ ή Σ 2
R e a d ( X ) ; L o c k # W ( X ) ;
X : = X + 1 0 0 ; R e a d ( X ) ;
W r i t e ( X ) ; X : = X + 1 0 0 ;
W r i t e ( X ) ;
R e a d ( X ) ;
U n l o c k # W ( X ) ;
X : = X * 1 . 1 ;
L o c k # W ( X ) ;
W r i t e ( X ) ;
R e a d ( X ) ;
R e a d ( Y ) ;
X : = X * 1 . 1 ;
Y : = Y * 1 . 1 ;
W r i t e ( X ) ;
W r i t e ( Y ) ;
U n l o c k # W ( X ) ;
R e a d ( Y ) ;
L o c k # W ( Y )
Y : = Y # 1 0 0 ;
R e a d ( Y ) ;
W r i t e ( Y ) ;
Y : = Y * 1 . 1 ;
W r i t e ( Y ) ;
U n l o c k # W ( Y ) ;
L o c k # W ( Y ) ;
R e a d ( Y ) ;
Y : = Y # 1 0 0 ;
W r i t e ( Y ) ;
ς ς
ο ο
U n l o c k # W ( Y ) ;
ό ν ό ν
ρ ρ
χ χ
( α ) ( β )
L o c k W ( A ) ;
L o c k W ( A ) ;
R e a d ( A ) ;
R e a d ( A ) ;
L o c k W ( A ) ;
A : = A N ;
A : = A N ;
W A I T ;
W r i t e ( A ) ;
W r i t e ( A ) ;
L o c k W ( A ) ;
L o c k
W ( B ) ;
W A I T ;
W A I T ;
R e a d ( B ) ;
W A I T ;
W A I T ;
W A I T ;
B : = B + N ;
W A I T ;
W A I T ;
W r i t e ( B ) ;
W A I T ;
L o c k R ( B ) ;
W A I T ;
U n l o c k W ( B ) ;
W A I T ;
R e a d ( B ) ;
W A I T ;
U n l o c k W ( A ) ;
W A I T ;
U n l o c k R ( B ) ;
R e a d ( A ) ;
W A I T ;
R O L L B A C K ;
A : = A + M ;
W A I T ;
U n l o c k W ( A ) ;
W r i t e ( A ) ;
R e a d ( A ) ;
U n l o c k W ( A ) ;
ς ς
A : = A + M ;
ο ο
W r i t e ( A ) ;
ό ν ό ν
ρ ρ
U n l o c k W ( A ) ;
χ χ
( α ) Χ α , έ ν η Ε ν η , έ ρ ω σ η ( β ) Λ α ν θ α σ , έ ν η Α ν ά γ ν ω σ η
• ¸íá äåäïìÝíï ðïõ Ý÷åé êëåéäùèåß áðü ìßá óõíáëëáãÞ êáé óôç óõíÝ÷åéá ç
êëåéäáñéÜ Ý÷åé áðåëåõèåñùèåß, äåí åðéôñÝðåôáé íá êëåéäùèåß ãéá äåýôåñç
öïñÜ áðü ôç ßäéá óõíáëëáãÞ.
Συναλλαγή Σ1 Συναλλαγή Σ2
d5 Εδώ έχουµε παραβίαση του
Lock-W(d5) δεύτερου κανόνα του δενδρικού
Lock-W(d9);
Read(d5) πρωτοκόλλου διότι ο προηγούµενος
Read(d9);
Lock(d2); κόµβος του δένδρου (d3) δεν έχει
Lock-W(d6);
d2 d4 d2 := d2 + d5; κλειδωθεί από τη συναλλαγή.
Read(d6);
Write(d2); d6 := d6 + d9;
Unlock-W(d5); Write(d6);
Unlock-W(d2); Unlock-W(d6);
d3 d8 d9 Unlock-W(d9);
d6 d7
ÁðïöõãÞ Áäéåîüäïõ
Ìßá áðëÞ ìÝèïäïò ðïõ ÷ñçóéìïðïéåßôáé ãéá ôçí áðïöõãÞ ôïõ áäéåîüäïõ óå Ýíá
óýíïëï óõíáëëáãþí åßíáé ï ïñéóìüò åíüò ìÝãéóôïõ ÷ñïíéêïý äéáóôÞìáôïò ãéá ôçí
áíáìïíÞ ÷ïñÞãçóçò ìßáò êëåéäáñéÜò. Áí åîáíôëçèåß ôï ÷ñïíéêü äéÜóôçìá êáé ç
êëåéäáñéÜ äåí Ý÷åé áêüìç ÷ïñçãçèåß óôç óõíáëëáãÞ, ôï óýóôçìá ôåñìáôßæåé ôç
äéáäéêáóßá êáé ôçí åðáíáäçìéïõñãåß. Ç áðëÞ áõôÞ ìÝèïäïò áðïöõãÞò áäéåîüäïõ
÷ñçóéìïðïéåßôáé áðü ðïëëÜ ÓÄÂÄ ëüãù ôçò áðëüôçôÜò ôçò.
Ìßá Üëëç åíáëëáêôéêÞ ëýóç óôï ðñüâëçìá ôçò áðïöõãÞò áäéåîüäïõ óôçñß-
æåôáé óå ÷ñïíéêÝò óöñáãßäåò (timestamps). Óôçí åñãáóßá [Rosenkrantz 1978]
ðñïôåßíïíôáé äýï áëãüñéèìïé:
Σ Σ
1 1
Σ Σ
2 3
5
Σ Σ Σ
2 10 6
7
Σ Σ
4 5
Σ Σ Σ
3 9 4
Σ Σ
6 8
Ó÷Þìá 15.10: ÃñÜöïò áíáìïíÞò ÷ùñßò êýêëï (á) êáé ìå êýêëï (â).
2. ÅðéëïãÞ óçìåßïõ ROLLBACK. Óôï äåýôåñï âÞìá, ãéá ôéò óõíáëëáãÝò ðïõ
Ý÷ïõí åðéëåãåß ðñÝðåé íá ðñïóäéïñéóèåß ìÝ÷ñé ðïéï óçìåßï èá åöáñìïóèåß
ç ëåéôïõñãßá ROLLBACK. Ç áðëïýóôåñç ëýóç åßíáé íá ãßíåé åðáíáöïñÜ
ôçò óõíáëëáãÞò óôçí áñ÷Þ, êáôáñãþíôáò üëåò ôéò áëëáãÝò ðïõ Ý÷åé åðéöÝ-
ñåé óôá äåäïìÝíá. Ç ëýóç áõôÞ ðïëëÝò öïñÝò Ý÷åé ìåãÜëï êüóôïò, äéüôé
ç óõíáëëáãÞ ìðïñåß íá Ý÷åé åíçìåñþóåé Ýíá ìåãÜëï áñéèìü äåäïìÝíùí.
÷ñçóéìïðïéïýìå ôïí áããëéêü üñï.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 397
R e a d ( ) ;
X
Η ε ν τ ο λ ή α π ο τ υ γ χ ά ν ε ι . Τ ο
R O L L B A C K δ ε ν ε ί ν α ι α π α ρ α ί τ η τ ο . W r i t e ( ) ;
W r i t e ( ) ;
ό ν
Ç åöáñìïãÞ ôïõ êáíüíá ôïõ Thomas ïäçãåß óå ìßá íÝá Ýêäïóç ôïõ ðñùôï-
êüëëïõ äéÜôáîçò ÷ñïíéêþí óöñáãßäùí. Ç äéá÷åßñéóç ôùí åíôïëþí áíÜãíùóçò
ðáñáìÝíåé ùò Ý÷åé. Ôï íÝï ðñùôüêïëëï äéáöÝñåé ìüíï ùò ðñïò ôç äéá÷åßñéóç ôùí
åíôïëþí áðïèÞêåõóçò. Óôçí ðåñßðôùóç áõôÞ Ý÷ïõìå:
1. Áí TS(Ói ) < timestamp-W(D), ôüôå ç óõíáëëáãÞ ðñïóðáèåß íá åíçìåñþóåé
ìßá ôéìÞ ðïõ Ý÷åé Þäç áëëÜîåé áðü Üëëç óõíáëëáãÞ. Óôçí ðåñßðôùóç áõôÞ
ç åíôïëÞ åããñáöÞò ìðïñåß íá áãíïçèåß ìå áóöÜëåéá.
2. Áí TS(Ói ) < timestamp-R(D), ôüôå ç ôñÝ÷ïõóá ôéìÞ ôïõ D äéáâÜóèçêå
ðñïçãïõìÝíùò áðü Üëëç óõíáëëáãÞ. ÅðïìÝíùò, óå áõôÞí ôçí ðåñßðôùóç ç
ëåéôïõñãßá áðïèÞêåõóçò äéáêüðôåôáé êáé ðñáãìáôïðïéåßôáé ROLLBACK.
3. Áí äåí éó÷ýåé êáìßá áðü ôéò äýï óõíèÞêåò, ôüôå ç ëåéôïõñãßá áðïèÞêåõóçò
ìðïñåß íá ïëïêëçñùèåß ÷ùñßò ðñüâëçìá êáé ç ÷ñïíéêÞ óöñáãßäá åããñáöÞò
ôçò Ói åíçìåñþíåôáé ùò åîÞò: timestamp-W(D) = TS(Ói ).
400 ÊåöÜëáéï 15. Äéá÷åßñéóç Óõíáëëáãþí
ÏðïéïäÞðïôå êáé áí åßíáé ôï áßôéï, ç áðüôïìç äéáêïðÞ ôçò ëåéôïõñãßáò ôïõ ÓÄÂÄ
ðñÝðåé íá áêïëïõèåßôáé áðü ôç ëåéôïõñãßá åðáíÜêôçóçò, Ýôóé þóôå ï êßíäõíïò
áðþëåéáò Þ áëëïßùóçò äåäïìÝíùí íá ðåñéïñéóèåß óôï åëÜ÷éóôï.
3. ¼ôáí ç óõíáëëáãÞ ïëïêëçñþóåé ôçí åêôÝëåóÞ ôçò êáé ðñéí ïé áëëáãÝò ãß-
íïõí ìüíéìåò, ôï áñ÷åßï çìåñïëïãßïõ åíçìåñþíåôáé ãéá ôï ãåãïíüò. Óôç
óõíÝ÷åéá, ôï áñ÷åßï çìåñïëïãßïõ áðïèçêåýåôáé óôï äßóêï êáé üëá ôá äå-
äïìÝíá ðïõ âñßóêïíôáé óôçí áðïìïíùôéêÞ ìíÞìç áðïèçêåýïíôáé óôï äßóêï.
áðïôõ÷ßá (transaction abort), ôüôå äåí áðáéôåßôáé êáìßá åíÝñãåéá äéüôé ëüãù
ôçò êáèõóôåñçìÝíçò åíçìÝñùóçò ôá äåäïìÝíá ôçò ÂÄ äåí Ý÷ïõí ìåôáâëçèåß.
Óôï Ó÷Þìá 15.12 áðåéêïíßæåôáé Ýíá ðáñÜäåéãìá åöáñìïãÞò ôçò ìåèüäïõ êá-
èõóôåñçìÝíçò åíçìÝñùóçò. Ôï óýìâïëï "S" äçëþíåé ôçí áñ÷Þ åêôÝëåóçò ôçò óõ-
íáëëáãÞò (start), ôï óýìâïëï "C" äçëþíåé ôçí åðéôõ÷çìÝíç ïëïêëÞñùóç ôçò óõ-
íáëëáãÞò (commit) åíþ ôï óýìâïëï "A" äçëþíåé ôçí áðïôõ÷çìÝíç åêôÝëåóç ôçò
óõíáëëáãÞò (abort). Ç óõíáëëáãÞ Ó4 Ý÷åé ïëïêëçñþóåé ìå åðéôõ÷ßá ôçí åêôÝëåóÞ
ôçò ðñéí ôï ôåëåõôáßï ÷ñïíéêü óçìåßï åëÝã÷ïõ, ïðüôå äåí áðáéôåß êáìßá åíÝñãåéá.
Óôéò óõíáëëáãÝò Ó1 êáé Ó2 ðñÝðåé íá åöáñìïóèåß ç ëåéôïõñãßá ROLLFORWARD
äéüôé ç ÷ñïíéêÞ óôéãìÞ ïëïêëÞñùóÞò ôïõò âñßóêåôáé ìÝóá óôï äéÜóôçìá [tc , tf ].
Ôïíßæåôáé üôé áõôü åßíáé áðáñáßôçôï åðåéäÞ ôï çìåñïëüãéï áðïèçêåýåôáé óôï äß-
óêï ðñéí áðü ôá äåäïìÝíá ðïõ Ý÷ïõí åíçìåñþóåé ïé óõíáëëáãÝò. ÅðïìÝíùò, åíäÝ-
÷åôáé ç åíçìÝñùóç ôùí äåäïìÝíùí íá ìçí Ý÷åé ïëïêëçñùèåß ëüãù ôçò äéáêïðÞò
ëåéôïõñãßáò ôïõ óõóôÞìáôïò ôç ÷ñïíéêÞ óôéãìÞ tf . ÔÝëïò, ãéá ôéò óõíáëëáãÝò Ó3 ,
Ó5 êáé Ó6 äåí áðáéôåßôáé êáìßá åíÝñãåéá.
Σ 2
S C
Σ 1
S C
Σ 6
S A
Σ 4
S C
Σ 3
S
Σ 5
S
tc tf
χ ρ ό ν ο ς
χ ρ ο ν ι κ ό σ η ε ί ο ε λ έ γ χ ο υ ι α κ ο π ή λ ε ι τ ο υ ρ γ ί α ς
¸íá ðïëý âáóéêü ÷áñáêôçñéóôéêü ôçò ìåèüäïõ åßíáé üôé ôï çìåñïëüãéï åíç-
ìåñþíåôáé ðñéí áðü ôçí åíçìÝñùóç ôùí äåäïìÝíùí ôçò ÂÄ. Óôçí áíôßèåôç ðåñß-
ðôùóç, áí ìåôÜ ôçí åíçìÝñùóç ôùí äåäïìÝíùí ôçò ÂÄ äéáêïðåß ç ëåéôïõñãßá ôïõ
óõóôÞìáôïò ðñéí ôçí åíçìÝñùóç ôïõ çìåñïëïãßïõ, ç äéáäéêáóßá ôçò åðáíÜêôçóçò
åßíáé áäýíáôç. Áò åîåôÜóïõìå óôç óõíÝ÷åéá ôéò ëåéôïõñãßåò ðïõ åêôåëåß ç ìÝèïäïò
Üìåóçò åíçìÝñùóçò ìåôÜ áðü äéáêïðÞ ôçò ëåéôïõñãßáò ôïõ óõóôÞìáôïò. ¼ðùò
êáé ðñïçãïõìÝíùò, ôï tc ðñïóäéïñßæåé ôï ôåëåõôáßï ÷ñïíéêü óçìåßï åëÝã÷ïõ êáé
ôï tf ôç ÷ñïíéêÞ óôéãìÞ ôçò äéáêïðÞò ôçò ëåéôïõñãßáò ôïõ óõóôÞìáôïò. Ç ìÝèïäïò
ëåéôïõñãåß ìå âÜóç ôá ðåñéå÷üìåíá ôïõ áñ÷åßïõ çìåñïëïãßïõ ùò åîÞò:
πίνακας σελίδων
1
1
2
2
3 5
4
5
4
Óôï Ó÷Þìá 15.14 äßíïõìå Ýíá ðáñÜäåéãìá óêéþäïõò ðßíáêá óåëßäùí. ÕðïèÝ-
ôïõìå üôé ìßá óõíáëëáãÞ ðñáãìáôïðïéåß áëëáãÝò óôá äåäïìÝíá ðïõ åßíáé áðïèç-
êåõìÝíá óôéò óåëßäåò 4 êáé 5. Ïé áëëáãÝò áõôÝò ïäçãïýí óôç äÝóìåõóç äýï íÝùí
óåëßäùí üðïõ áðïèçêåýïíôáé ôá íÝá äåäïìÝíá. Ïé áñ÷éêÝò óåëßäåò ðáñáìÝíïõí
ùò Ý÷ïõí êáé áðåëåõèåñþíïíôáé ìüíï ìåôÜ áðü ôçí ïëïêëÞñùóç ôçò óõíáëëáãÞò.
σελίδες δίσκου
1 Σελίδα 1 1
τρέχον 2 Σελίδα 2 2 σκιώδης
πίνακας 3 3 πίνακας
σελίδων 4 Σελίδα 5 (νέα) 4 σελίδων
5 Σελίδα 3 5
Σελίδα 4 (παλιά)
Σελίδα 5 (παλιά)
Σελίδα 4 (νέα)
15.4 Óýíïøç
Ï óõíôïíéóìüò ôùí ðñïóðåëÜóåùí óå ìßá ÂÜóç ÄåäïìÝíùí ðñáãìáôïðïéåßôáé
ìå ôç âïÞèåéá ôùí óõíáëëáãþí. Ìßá óõíáëëáãÞ ðåñéÝ÷åé åíôïëÝò áíÜãíùóçò,
åéóáãùãÞò, äéáãñáöÞò êáé åíçìÝñùóçò äåäïìÝíùí. ÊÜèå óõíáëëáãÞ åêôåëåßôáé
áôïìéêÜ, ðïõ óçìáßíåé üôé åßôå èá åêôåëåóèïýí üëåò ïé åíôïëÝò ðïõ ðåñéÝ÷åé åßôå
êáìßá. Ïé âáóéêÝò éäéüôçôåò ôùí óõíáëëáãþí åßíáé ïé åîÞò: á) áôïìéêüôçôá, â)
óõíÝðåéá, ã) áðïìüíùóç êáé ä) ìïíéìüôçôá.
ÐïëëÝò öïñÝò åìöáíßæåôáé ôï ðñüâëçìá äýï Þ ðåñéóóüôåñïé ÷ñÞóôåò íá åíç-
ìåñþíïõí ìßá ðåñéï÷Þ äåäïìÝíùí, åíþ ôáõôü÷ñïíá Üëëïé ÷ñÞóôåò ðñïóðáèïýí íá
äéáâÜóïõí ôá ßäéá äåäïìÝíá. Ç ôáõôü÷ñïíç áíÜãíùóç êáé áðïèÞêåõóç ôçò ßäéáò
óåëßäáò äåäïìÝíùí äçìéïõñãåß ðáèïëïãéêÝò êáôáóôÜóåéò. Ôï ÓÄÂÄ åöáñìüæåé
ìç÷áíéóìïýò åëÝã÷ïõ ôùí ôáõôü÷ñïíùí ðñïóðåëÜóåùí. Äýï ôÝôïéïé ìç÷áíéóìïß
åßíáé ï ìç÷áíéóìüò êëåéäþìáôïò êáé ï ìç÷áíéóìüò ÷ñïíéêþí óöñáãßäùí. Áðáé-
ôåßôáé ðñïóï÷Þ êáôÜ ôçí åöáñìïãÞ êëåéäáñéþí Ýôóé þóôå íá áðïöåýãïíôáé ôá
áäéÝîïäá.
Ôï ÓÄÂÄ ðñÝðåé íá åðéôñÝðåé ôçí åðáíÜêôçóç ôùí äåäïìÝíùí óå ðåñéðôþóåéò
áðüôïìçò äéáêïðÞò ôçò ëåéôïõñãßáò ôïõ óõóôÞìáôïò (ãéá ðáñÜäåéãìá óå ðåñß-
ðôùóç âëÜâçò ôçò óõóêåõÞò äåõôåñåýïõóáò ìíÞìçò). Ãéá ôï ëüãï áõôü ÷ñçóé-
ìïðïéåßôáé ôï çìåñïëüãéï óõíáëëáãþí üðïõ êáôáãñÜöïíôáé üëåò ïé ëåéôïõñãßåò
ìßáò óõíáëëáãÞò. ÊáôÜ ôç äéáäéêáóßá ôçò åðáíÜêôçóçò êÜðïéåò áðü ôéò óõíáë-
ëáãÝò èá åðáíåêôåëåóèïýí (REDO Þ ROLLFORWARD), åíþ êÜðïéåò Üëëåò èá
áíáéñåèïýí (UNDO Þ ROLLBACK). Ïé âáóéêÝò ìÝèïäïé åðáíÜêôçóçò åßíáé ïé
åîÞò: á) ìÝèïäïò êáèõóôåñçìÝíçò åíçìÝñùóçò, â) ìÝèïäïò Üìåóçò åíçìÝñùóçò
êáé ã) ìÝèïäïò ôùí óêéùäþí óåëßäùí.
15.5. Ôñåéò óõíáëëáãÝò A, B êáé C Ýñ÷ïíôáé óôï óýóôçìá ìå ôçí ßäéá óåéñÜ, êáé
åêôåëïýíôáé ôáõôü÷ñïíá. Ìðïñïýìå íá ðñïâëÝøïõìå ôï áðïôÝëåóìá áí ãíùñß-
æïõìå üôé ÷ñçóéìïðïéåßôáé ç ôå÷íéêÞ êëåéäþìáôïò äýï öÜóåùí; Íá äéêáéïëïãÞóåôå
ôçí áðÜíôçóÞ óáò.
15.6. Ðùò ìðïñåß íá óõìâåß Ýíá áäéÝîïäï; Ðùò ìðïñåß íá ãßíåé áíôéëçðôü üôé
õðÜñ÷åé áäéÝîïäï;
T1:
read(X);
read(Y );
if (X == 0) Y = Y + 1;
write(Y );
T2:
read(Y );
read(X);
if (Y == 0) X = X + 1;
write(X);
411
412 ÊåöÜëáéï 16. ÁóöÜëåéá ÂÜóåùí ÄåäïìÝíùí
ôá äýï äåí ìðïñïýí íá ðñïóðåëáóèïýí, ãåãïíüò ðïõ åðçñåÜæåé óïâáñÜ ôçí ïé-
êïíïìéêÞ áðüäïóç ôçò åðé÷åßñçóçò, éäéáßôåñá ìÜëéóôá áí ç åðé÷åßñçóç ðáñÝ÷åé
çëåêôñïíéêÝò õðçñåóßåò åéêïóéôåôñÜùñçò äéáèåóéìüôçôáò. Óå êÜðïéåò ðåñéðôþ-
óåéò, ïé éäéüôçôåò ôçò åìðéóôåõôéêüôçôáò, ôçò áêåñáéüôçôáò êáé ôçò äéáèåóéìüôçôáò
åßíáé ôüóï óôåíÜ óõíäåäåìÝíåò, þóôå ìßá ðñÜîç ðïõ ïäçãåß óå áðþëåéá ìßáò åî
áõôþí ôùí éäéïôÞôùí, èá ïäçãÞóåé Üìåóá êáé óå áðþëåéá ìßáò Üëëçò.
Ïé åãêëçìáôéêÝò ðñÜîåéò óôï ÷þñï ôïõ çëåêôñïíéêïý åìðïñßïõ Ý÷ïõí óÞìåñá
áõîçèåß óçìáíôéêÜ êáé áíáìÝíåôáé íá åíôáèïýí ôá åðüìåíá ÷ñüíéá. Ôá áíôßìå-
ôñá ãéá ôçí áíôéìåôþðéóç áðåéëþí óôá óõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí ðïéêßëïõí
áðü åëÝã÷ïõò óå öõóéêü åðßðåäï ìÝ÷ñé êáé ôçí ôáêôéêÞ åêôÝëåóç äéá÷åéñéóôéêþí
äéáäéêáóéþí ãéá ôïí Ýëåã÷ï ïñèüôçôáò (audit control) ôùí äåäïìÝíùí. Ç áóöÜ-
ëåéá âÜóåùí äåäïìÝíùí (database security) åßíáé ìßá ðïëý åõñåßá åðéóôçìïíéêÞ
ðåñéï÷Þ ðïõ ðñïóâëÝðåé óôçí åëá÷éóôïðïßçóç ôùí áðùëåéþí ðïõ ðñïêáëïýíôáé
êõñßùò áðü ðñïâëåðüìåíá ãåãïíüôá, ìå ôïí ïéêïíïìéêÜ áðïäïôéêüôåñï ôñüðï êáé
÷ùñßò ôïí õðåñâïëéêü ðåñéïñéóìü ôùí äéêáéùìÜôùí ôùí åîïõóéïäïôçìÝíùí ÷ñç-
óôþí ôïõ óõóôÞìáôïò [Castano 1995, Clark 1991, Fernandez 1981, Natan 2005].
Ε φ α ρ ο γ έ ς
Υ π η ρ ε σ ί ε ς
Λ ε ι τ ο υ ρ γ ι κ ό Σ ύ σ τ η α
Μ η χ α ν ι κ ό Μ έ ρ ο ς Η . Υ .
åíáðüêåéôáé óôï äéá÷åéñéóôÞ âÜóåùí äåäïìÝíùí, ï ïðïßïò ãéá ôï óêïðü áõôü Ý÷åé
êáèÞêïí íá äçìéïõñãåß ôïõò ëïãáñéáóìïýò ôùí ÷ñçóôþí ôïõ ÓÄÂÄ.
ÓõíäåäåìÝíï ìå êÜèå ëïãáñéáóìü ÷ñÞóôç åßíáé Ýíá üíïìá ÷ñÞóôç (username)
êáé Ýíá êùäéêü ðñüóâáóçò (password) , ôïí ïðïßï åðéëÝãåé ï ÷ñÞóôçò êáé åßíáé
ãíùóôü óôï ÓÄÂÄ. Ï êùäéêüò ðñüóâáóçò ðñÝðåé íá ðáñÝ÷åôáé óå êÜèå áðü-
ðåéñá óýíäåóçò ôïõ ÷ñÞóôç, þóôå íá åßíáé äõíáôü ôï ÓÄÂÄ íá åðéâåâáéþíåé ôçí
ôáõôüôçôá ðïõ ï ÷ñÞóôçò éó÷õñßæåôáé ðùò Ý÷åé. ¼ëá ôá åìðïñéêÜ ÓÄÂÄ Ý÷ïõí
ôç äõíáôüôçôá äéáôÞñçóçò ìßáò ëßóôáò Ýãêõñùí áíáãíùñéóôéêþí ïíïìÜôùí ÷ñç-
óôþí êáé óõíäåäåìÝíùí êùäéêþí ðñüóâáóçò, ç ïðïßá ìðïñåß íá äéáöÝñåé áðü
ôçí áíôßóôïé÷ç ëßóôá ðïõ äéáôçñåß ôï ëåéôïõñãéêü óýóôçìá. ¼ìùò, óå ðïëëÝò
ðåñéðôþóåéò ôá ÓÄÂÄ Ý÷ïõí ôç äõíáôüôçôá íá åìðëïõôßæïõí ôç ëßóôá áõôÞ êáé
ìå áíáãíùñéóôéêÜ ïíüìáôá ÷ñçóôþí ðïõ Ý÷ïõí äçìéïõñãçèåß áðü ôï äéá÷åéñéóôÞ
ôïõ ëåéôïõñãéêïý óõóôÞìáôïò. Ç ëýóç áõôÞ áðïôñÝðåé ôçí áðáßôçóç áõèåíôéêï-
ðïßçóçò ÷ñçóôþí áðü ôï ÓÄÂÄ, üôáí ïé ÷ñÞóôåò Ý÷ïõí Þäç ðéóôïðïéçèåß áðü Ýíá
Ýìðéóôï êáé áóöáëÝò ëåéôïõñãéêü óýóôçìá.
Åê÷þñçóç Ðñïíïìßùí
¼ðùò áíáöÝñèçêå êáé ðñïçãïõìÝíùò, ãéá ôçí åê÷þñçóç ðñïíïìßùí åðß ôùí áíôé-
êåéìÝíùí ìßáò ÂÜóçò ÄåäïìÝíùí óå Üëëïõò ÷ñÞóôåò ÷ñçóéìïðïéåßôáé ç åíôïëÞ
416 ÊåöÜëáéï 16. ÁóöÜëåéá ÂÜóåùí ÄåäïìÝíùí
GRANT. ÓõíÞèùò ç åíôïëÞ áõôÞ êáëåßôáé áðü ôïí éäéïêôÞôç åíüò ðßíáêá. Ç óý-
íôáîç ôçò åßíáé ç åîÞò:
GRANT <ëßóôá_ðñïíïìßùí> | ALL PRIVILEGES>
ON <ëßóôá_áíôéêåéìÝíùí>
TO <ëßóôá_÷ñçóôþí | PUBLIC>
[WITH GRANT OPTION];
ÁíÜêëçóç Ðñïíïìßùí
Ãéá ôçí áíÜêëçóç ðñïíïìßùí åðß áíôéêåéìÝíùí ÷ñçóéìïðïéåßôáé ç åíôïëÞ REVOKE.
Ç åêôÝëåóç ôçò åíôïëÞò REVOKE ìðïñåß íá áíáêáëÝóåé üëá Þ ìåñéêÜ áðü ôá
ðñïíüìéá ðïõ åß÷áí åê÷ùñçèåß ðáëáéüôåñá ìÝóù ôçò åíôïëÞò GRANT. Ç óýíôáîç
ôçò REVOKE åßíáé ç åîÞò:
3 : G R A N T S E L E C T
1 : G R A N T S E L E C T
N E M P L E E
O O Y
N E M P L E E
O O Y
T H G R A N T P T N
W I O I O
T H G R A N T P T N
W I O I O
G R A N T S E L E C T
:
5
6 : R E V E S E L E C T
O K
N E M P L E E
O O Y
R M E M P L E E
F O O Y
C A S C A D E
D E
4 : G R A N T S E L E C T
G R A N T S E L E C T
2 :
N E M P L E E
O O Y
N E M P L E E
O O Y
T H G R A N T P T N
W I O I O
T H G R A N T P T N
W I O I O
Áí óôç óõíÝ÷åéá ôï ðñïíüìéï SELECT åðß ôçò üøçò áõôÞò äïèåß óå üëïõò ôïõò
öïéôçôÝò, ôüôå ï êÜèå öïéôçôÞò ðïõ êáëåß ôçí üøç èá ìðïñåß íá áíáêôÞóåé áðü
ôç ÂÜóç ÄåäïìÝíùí ìüíï ôïõò âáèìïýò ðïõ Ý÷åé åðéôý÷åé ï ßäéïò. Óõíåðþò, ìå
ôç ëýóç áõôÞ, äçìéïõñãåßôáé Ýíáò Ýëåã÷ïò ðñïóðÝëáóçò åðÜíù óôïí åõáßóèçôïõ
ðåñéå÷ïìÝíïõ ðßíáêá Öïéôçôïëüãéï.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 423
κ λ ε ι δ ί
κ λ ε ι δ ί
α π ο κ ρ υ π τ ο γ ρ ά φ η σ η ς
κ ρ υ π τ ο γ ρ ά φ η σ η ς
α π ο
κ ρ υ π τ ο
κ ρ υ π τ ο
ε υ α ί σ θ η τ η
κ ρ υ π τ ο γ ρ α φ η έ ν η
ε υ α ί σ θ η τ η
γ ρ α φ ι κ ό ς
γ ρ α φ ι κ ό ς
π λ η ρ ο φ ο ρ ί α
π λ η ρ ο φ ο ρ ί α
π λ η ρ ο φ ο ρ ί α
α λ γ ό ρ ι θ
α λ γ ό ρ ι θ
δ ι α κ ί ν η σ η έ σ α α π ό
ο ς
ο ς
η α σ φ α λ έ ς δ ί κ τ υ ο
SELECT COUNT(*)
FROM ÓôáôéóôéêÜ
WHERE ((âáèìßäá=’ÊáèçãçôÞò’) AND (ôìÞìá=’Ìáèçìáôéêþí’));
SELECT SUM(ìéóèüò)
FROM ÓôáôéóôéêÜ
WHERE (âáèìßäá=’ÊáèçãçôÞò’) AND (ôìÞìá=’Ìáèçìáôéêþí’);
Áðü ôá äåäïìÝíá ôïõ ðßíáêá åýêïëá ðñïêýðôåé üôé ïé áðáíôÞóåéò óôá åñùôÞìáôá
åßíáé 1 êáé 2000 áíôßóôïé÷á. Óõíåðþò Ý÷åé áðïêáëõöèåß ï ìéóèüò ôïõ "Ãåùñãßïõ"
êáé ç áóöÜëåéá ôçò ÂÜóçò ÄåäïìÝíùí Ý÷åé óáöþò äéáññç÷èåß, áí êáé ï ÷ñÞóôçò
Ýèåóå ìüíï ãíÞóéá óôáôéóôéêÜ åñùôÞìáôá. ¼ðùò öáßíåôáé óôï ðáñÜäåéãìá, áí
ï ÷ñÞóôçò ìðïñåß íá âñåé ìßá ëïãéêÞ Ýêöñáóç ðïõ íá öùôïãñáößæåé Ýíá óõãêå-
êñéìÝíï Üôïìï, ôüôå ç åõáßóèçôç ðëçñïöïñßá ðïõ ó÷åôßæåôáé ìå ôï Üôïìï áõôü
ðëÝïí äåí åßíáé áóöáëÞò. Ôï ãåãïíüò áõôü õðïäåéêíýåé üôé ôï ÓÄÂÄ èá ðñÝðåé
íá áñíåßôáé ôçí áðüêñéóç óå Ýíá åñþôçìá üôáí ôï ðëÞèïò ôùí ðëåéÜäùí ðïõ
óõììåôÝ÷ïõí óôï ó÷çìáôéóìü ôçò áðÜíôçóÞò ôïõ åßíáé ëéãüôåñï áðü Ýíá åëÜ÷éóôï
üñéï c.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 427
SELECT COUNT(*)
FROM ÓôáôéóôéêÜ;
SELECT COUNT(*)
FROM ÓôáôéóôéêÜ
WHERE (âáèìßäá<>’ÊáèçãçôÞò’) AND (ôìÞìá<>’Ìáèçìáôéêþí’);
SELECT SUM(Ìéóèüò)
FROM ÓôáôéóôéêÜ;
SELECT SUM(*)
FROM ÓôáôéóôéêÜ;
WHERE (âáèìßäá<>’ÊáèçãçôÞò’) AND (ôìÞìá<>’Ìáèçìáôéêþí’);
¸óôù üôé ôï áðïôÝëåóìá ôùí åñùôçìÜôùí åßíáé 7, 6, 13.320 êáé 11.320, áíôéóôïß-
÷ùò. ¢ñá, ï ìéóèüò ôïõ "Ãåùñãßïõ" åíôïðßæåôáé áöáéñþíôáò ôï áðïôÝëåóìá ôïõ
ôåëåõôáßïõ åñùôÞìáôïò áðü ôï áðïôÝëåóìá ôïõ ðñïçãïýìåíïõ, äçëáäÞ 13.320 −
11.320=2.000. Ôï ðáñÜäåéãìá áõôü áðïäåéêíýåé üôé ôï óýóôçìá èá Ýðñåðå åðß-
óçò íá áñíåßôáé ôçí áðüêñéóç óå åñùôÞìáôá, üðïõ ôï ðëÞèïò ôùí ðëåéÜäùí ðïõ
óõíåéóöÝñïõí óôçí áðÜíôçóÞ ôïõò åßíáé ìåãáëýôåñï áðü Ýíá ìÝãéóôï üñéï n − c,
üðïõ n åßíáé ôï óõíïëéêü ðëÞèïò ôùí ðëåéÜäùí ôïõ ðßíáêá.
Åßíáé åýêïëï íá äåé÷èåß üôé, ðåñéïñßæïíôáò áðëþò ôá åñùôÞìáôá óå åêåßíá
ãéá ôá ïðïßá ôï ðëÞèïò ôùí ðëåéÜäùí ðïõ óõììåôÝ÷ïõí ãéá ôçí áðÜíôçóÞ ôïõò
Ý÷åé ôéìÞ b óôçí ðåñéï÷Þ [c, n − c] åßíáé áíåðáñêÝò ãéá ôçí áðïöõãÞ äéáññïÞò
åõáßóèçôçò áôïìéêÞò ðëçñïöïñßáò. Èåùñþíôáò êáé ðÜëé ôï ðáñÜäåéãìá ôçò ÂÜ-
óçò ÄåäïìÝíùí ôïõ Ðßíáêá 16.3, Ýóôù üôé c=2, Ýóôù äçëáäÞ üôé ïé åñùôÞóåéò èá
áðáíôþíôáé ìüíï áí b ∈ [2, 5]. Ç Ýêöñáóç WHERE (âáèìßäá=’ÊáèçãçôÞò’)
AND (ôìÞìá=’Ìáèçìáôéêþí’) åßíáé ôüôå áñêåôÞ ãéá ôçí åðéôõ÷ßá ôçò åðßèå-
óçò ôïõ êáêüâïõëïõ ÷ñÞóôç. ¸óôù ãéá ðáñÜäåéãìá ôá åîÞò åñùôÞìáôá:
SELECT COUNT(*)
FROM ÓôáôéóôéêÜ
WHERE âáèìßäá=’ÊáèçãçôÞò’;
SELECT COUNT(*)
FROM ÓôáôéóôéêÜ
WHERE (âáèìßäá=’ÊáèçãçôÞò’) AND NOT
(ôìÞìá=’Ìáèçìáôéêþí’);
428 ÊåöÜëáéï 16. ÁóöÜëåéá ÂÜóåùí ÄåäïìÝíùí
Áðü ôá äåäïìÝíá ôïõ Ðßíáêá 16.3 ðñïêýðôåé üôé ôï áðïôÝëåóìá ôùí äýï
áõôþí åñùôçìÜôùí åßíáé 4 êáé 3, áíôéóôïß÷ùò. Óõíåðþò, åîÜãåôáé üôé óôï ÔìÞìá
Ìáèçìáôéêþí õðÜñ÷åé Ýíáò ìüíï êáèçãçôÞò, êáé Üñá áõôüò åßíáé ï "Ãåùñãßïõ"
(åö’ üóïí ï êáêüâïõëïò ÷ñÞóôçò ãíùñßæåé åê ôùí ðñïôÝñùí áõôÜ ôá äåäïìÝíá
ãéá ôïí "Ãåùñãßïõ"). Ï ìéóèüò ôïõ "Ãåùñãßïõ" ìðïñåß ôüôå íá áðïêáëõöèåß ùò
åîÞò:
SELECT SUM(Ìéóèüò)
FROM ÓôáôéóôéêÜ
WHERE âáèìßäá=’ÊáèçãçôÞò’;
SELECT SUM(Ìéóèüò)
FROM ÓôáôéóôéêÜ
WHERE (âáèìßäá=’ÊáèçãçôÞò’) AND NOT
(ôìÞìá=’Ìáèçìáôéêþí’);
Ôï áðïôÝëåóìá ôïõ ðñþôïõ åñùôÞìáôïò åßíáé 8.820, åíþ ôïõ äåýôåñïõ åßíáé 6.820.
Óõíåðþò, ï ìéóèüò ôïõ "Ãåùñãßïõ" âñßóêåôáé áöáéñþíôáò ôá áðïôåëÝóìáôá ôùí
äýï åñùôçìÜôùí, äçëáäÞ 8.820 − 6.820=2.000.
Ç ëïãéêÞ Ýêöñáóç (âáèìßäá = ’ÊáèçãçôÞò’) AND (ôìÞìá = ’Ìá-
èçìáôéêþí’) ïíïìÜæåôáé ðñïóùðéêüò é÷íçëÜôçò (individual tracker) ôïõ Ãå-
ùñãßïõ [Denning 1979a], äéüôé ðñïóöÝñåé óôïí êáêüâïõëï ÷ñÞóôç Ýíá ìïíïðÜôé
ðïõ ïäçãåß óôçí áðïêÜëõøç ôçò åõáßóèçôçò ðëçñïöïñßáò ôïõ Ãåùñãßïõ. Óôç
ãåíéêÞ ðåñßðôùóç, áí ï êáêüâïõëïò ÷ñÞóôçò ãíùñßæåé áðü åîùôåñéêÞ ðçãÞ ìßá
ëïãéêÞ Ýêöñáóç A ðïõ ÷áñáêôçñßæåé ìïíáäéêÜ êÜðïéï óõãêåêñéìÝíï Üôïìï Ô êáé
áí ç Ýêöñáóç Á ìðïñåß íá áíáëõèåß óå ìßá óýíèåôç Ýêöñáóç Á1 AND Á2, ôüôå ç
ëïãéêÞ Ýêöñáóç A1 AND NOT A2 åßíáé Ýíáò ðñïóùðéêüò é÷íçëÜôçò ãéá ôï Üôïìï
Ô, ìå ôçí ðñïûðüèåóç üôé ïé åêöñÜóåéò Á1 êáé A1 AND NOT A2 åðéôñÝðåôáé íá
åêôåëåóèïýí, äçëáäÞ ìå ôçí ðñïûðüèåóç üôé ôï ðëÞèïò ôùí ðëåéÜäùí ðïõ óõì-
ìåôÝ÷ïõí ãéá ôçí áðÜíôçóÞ ôïõò âñßóêåôáé óôï äéÜóôçìá [c, n − c]. Ï ëüãïò åßíáé
üôé ôï ðëÞèïò ôùí ðëåéÜäùí ðïõ óõììåôÝ÷ïõí óôï ó÷çìáôéóìü ôçò áðÜíôçóçò ôïõ
Á ôáõôßæåôáé ìå ôç äéáöïñÜ ìåôáîý ôïõ áíôßóôïé÷ïõ ðëÞèïõò ôùí åêöñÜóåùí Á1
êáé Á1 AND NOT A2:
{x : A} = {(x : A1) AND (x : A2)} = {x : A1} - {(x : A1) AND NOT (x : A2)}
Ç ó÷Ýóç áõôÞ áðïäåéêíýåôáé ìÝóù ôùí ôñéþí äéáãñáììÜôùí Venn ôïõ Ó÷Þìáôïò
16.4.
Ùò êáôáêëåßäá, åßíáé áëçèÝò üôé áí ï êáêüâïõëïò ÷ñÞóôçò ãíùñßæåé áðü åîù-
ôåñéêÞ ðçãÞ êÜðïéá óôïé÷åßá ôïõ áôüìïõ ãéá ôï ïðïßï åðéèõìåß íá áðïêáëýøåé
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 429
A1 A2 A1 A2 A1 A2
A1 –
A1 AND A2 A1 AND A2 (A1 AND
A1 AND NOT A2)
NOT A2
username=Request.form("username");
password=Request.form("password");
var con=Server.CreateObject(ADODB.Connection);
var rso=Server.CreateObject(ADODB.Recordset);
var sql="SELECT * FROM users WHERE username = ’ "
+username +" ’ AND password = ’ "+password+" ’ ";
rso.open(sql,con);
if not rs.eof() then
response.write("Welcome to the database");
Ó÷Þìá 16.5: Êþäéêáò óåëßäáò ASP ãéá ôç äéá÷åßñéóç áéôçìÜôùí åéóüäïõ ÷ñçóôþí
óå ÂÄ ìÝóù åöáñìïãÞò ðáãêüóìéïõ éóôïý.
Óôçí ïõóßá, üôáí ï ÷ñÞóôçò ôïõ ðáãêüóìéïõ éóôïý ðëçêôñïëïãÞóåé Ýíá óõí-
äõáóìü Ýãêõñïõ áíáãíùñéóôéêïý ïíüìáôïò ÷ñÞóôç êáé êùäéêïý ðñüóâáóçò, ôüôå
ç åöáñìïãÞ èá åðéâåâáéþóåé ôá óôïé÷åßá áõôÞ õðïâÜëëïíôáò ó÷åôéêü åñþôçìá
SQL óå êÜðïéï ðßíáêá Users ìå ÷áñáêôçñéóôéêÜ ôï username êáé ôï password.
Ôï óçìáíôéêüôåñï ôìÞìá ôïõ êþäéêá ôïõ Ó÷Þìáôïò 16.5 åßíáé ç ãñáììÞ:
âëçôÝò username êáé password ëáìâÜíïíôáé áðü ôçí åßóïäï ôïõ ÷ñÞóôç óôç
öüñìá åéóüäïõ. Áí ï ÷ñÞóôçò åéóÜãåé:
username: george
password: 45dc&vg3
SELECT *
FROM Users
WHERE username = ’george’ AND password = ’45dc&vg3’;
username: george
password: anything’ or 1 = 1 or ’ ’ = ’
SELECT *
FROM Users
WHERE username=’george’ AND password=’anything’ OR
1 = 1 or ’ ’ = ’ ’;
êáé ç ÂÜóç ÄåäïìÝíùí åðéóôñÝöåé óôçí åöáñìïãÞ üëåò ôéò åããñáöÝò ôïõ ðßíáêá
Users. Óôç óõíÝ÷åéá, åö’ üóïí ç åöáñìïãÞ Ýëáâå ùò áðÜíôçóç êÜðïéåò ðëåéÜäåò,
óõìðåñáßíåé üôé ï êùäéêüò ôïõ ÷ñÞóôç åßíáé anything êáé ôïõ åðéôñÝðåé ôçí åßóïäï.
Óôçí áêüìç ÷åéñüôåñç ðåñßðôùóç ç åöáñìïãÞ åìöáíßæåé óôçí ïèüíç ôïõ êáêü-
âïõëïõ ÷ñÞóôç üëåò ôéò ðëåéÜäåò ôïõ ðßíáêá Users, äçëáäÞ üëá ôá áíáãíùñéóôéêÜ
ïíüìáôá ôùí ÷ñçóôþí ìáæß ìå ôïõò êùäéêïýò ðñüóâáóÞò ôïõò.
Ï äéá÷åéñéóôÞò ÂÜóåùí ÄåäïìÝíùí âñßóêåôáé óå ðïëý ìåéïíåêôéêÞ èÝóç óå
ó÷Ýóç ìå åðéèÝóåéò Ýã÷õóçò SQL, êáèþò ï êáêüâïõëïò ÷ñÞóôçò åéóÝñ÷åôáé óôç
ÂÜóç ÄåäïìÝíùí ðáñáâéÜæïíôáò ìßá íüìéìç öüñìá åéóüäïõ êÜðïéáò åöáñìïãÞò
ðïõ äéáôçñåß äåäïìÝíá åíôüò ôçò ÂÜóçò ÄåäïìÝíùí. Ç áðëïýóôåñç ëýóç ãéá ôçí
áðïöõãÞ ôçò åðßèåóçò åßíáé ï Ýëåã÷ïò ôçò åéóüäïõ ôïõ ÷ñÞóôç ãéá åíäå÷üìåíç
ýðáñîç áðëþí åéóáãùãéêþí óôá áëöáñéèìçôéêÜ ðïõ ðëçêôñïëïãåß. Ìßá êáëÞ
432 ÊåöÜëáéï 16. ÁóöÜëåéá ÂÜóåùí ÄåäïìÝíùí
16.8 Óýíïøç
Óôü÷ïò ôçò áóöÜëåéáò ÂÜóåùí ÄåäïìÝíùí åßíáé ç äéáôÞñçóç ôñéþí ðïëý óçìá-
íôéêþí êáé áëëçëïóõó÷åôéæüìåíùí éäéïôÞôùí ôùí äåäïìÝíùí: ôçò áêåñáéüôçôáò,
ôçò åìðéóôåõôéêüôçôáò êáé ôçò äéáèåóéìüôçôÜò ôïõò. Ç áêåñáéüôçôá ïëüêëçñçò
ôçò ÂÜóçò ÄåäïìÝíùí åßíáé åõèýíç ôïõ ÓÄÂÄ. ÓÞìåñá óôá ðåñéóóüôåñá åìðï-
ñéêÜ ÓÄÂÄ ôï ðñüâëçìá ôçò áêåñáéüôçôáò áíôéìåôùðßæåôáé ìå ôç ôáêôéêÞ ëÞøç
áíôéãñÜöùí ôùí äåäïìÝíùí (backup) êáé ìå ôç óõ÷íÞ åíçìÝñùóç ôïõ ÓÄÂÄ áðü
ðëåõñÜò äéïñèþóåùí áôåëåéþí áóöáëåßáò (security patches). Ç áêåñáéüôçôá êáé
ç åìðéóôåõôéêüôçôá åíüò áíôéêåéìÝíïõ ôçò ÂÄ åßíáé åõèýíç ôïõ éäéïêôÞôç ôïõ êá-
èþò êáé ôïõ äéá÷åéñéóôÞ ôçò ÂÄ äéüôé áõôïß ïé äýï ìðïñïýí íá êáèïñßóïõí ôçí
ðïëéôéêÞ ðñïóðÝëáóçò ôùí ÷ñçóôþí ãéá ôï óôïé÷åßï áõôü.
Ç Ýííïéá ôçò äéáèåóéìüôçôáò ó÷åôßæåôáé ìå ôçí áíôéìåôþðéóç ôïõ öáéíïìÝ-
íïõ ôçò Üñíçóçò åîõðçñÝôçóçò (Denial of Service, DoS). Ìåßæùí óôü÷ïò åßíáé
ïé ÷ñÞóôåò íá ìðïñïýí ðÜíôïôå íá ðñïóðåëáýíïõí ôá áíôéêåßìåíá ôçò ÂÜóçò
ÄåäïìÝíùí ãéá ôá ïðïßá åßíáé åîïõóéïäïôçìÝíïé. Ç äéáèåóéìüôçôá Ý÷åé õðï-
óôçñé÷èåß åëÜ÷éóôá ìÝ÷ñé óÞìåñá êáé êáíÝíá ÓÄÂÄ äåí áíôéìåôùðßæåé ôï èÝìá
åõèÝùò. Ç êáëýôåñç ëýóç äéáôÞñçóçò ôçò äéáèåóéìüôçôáò åðéôõã÷Üíåôáé ãåíéêÜ
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 433
Ïé ðåñéóóüôåñåò áðü ôéò ôå÷íéêÝò ðïõ óõæçôÞèçêáí óôá ðëáßóéá ôïõ êåöá-
ëáßïõ áõôïý áöïñïýí áðïêëåéóôéêÜ êáé ìüíï ôï ÷þñï ôùí ÂÜóåùí ÄåäïìÝíùí.
Èá ìðïñïýóå íá åéðùèåß ðùò ç áíÜëõóç ôùí áäõíáìéþí êáé ôùí åíäå÷üìåíùí
åðéèÝóåùí åíáíôßïí óõóôçìÜôùí ÂÜóåùí ÄåäïìÝíùí åßíáé ï êáëýôåñïò ôñüðïò
êáôáãñáöÞò ôùí áíáãêþí áóöáëåßáò êÜèå åöáñìïãÞò ôïõò. Ìåëåôþíôáò ôñüðïõò
ðáñáâßáóçò ôçò áêåñáéüôçôáò, ôçò åìðéóôåõôéêüôçôáò êáé ôçò äéáèåóéìüôçôáò ìßáò
åöáñìïãÞò, ìðïñïýìå íá áíáðôýîïõìå ëýóåéò ãéá ôçí ïéêïäüìçóç ôçò áóöÜëåéÜò
ôçò ðñéí ìáò ðñïëÜâåé ìå ôçí åðéôõ÷Þ ÝêâáóÞ ôçò ìßá åðßèåóç êáêüâïõëïõ ÷ñÞóôç.
434 ÊåöÜëáéï 16. ÁóöÜëåéá ÂÜóåùí ÄåäïìÝíùí
16.3. ÐïéÝò åßíáé ïé äéáöïñÝò ìåôáîý äéáêñéôéêïý êáé õðï÷ñåùôéêïý åëÝã÷ïõ ðñï-
óðÝëáóçò;
16.6. ÈåùñÞóôå êáé ðÜëé ôïí ðïëõåðßðåäï ðßíáêá Å÷èñéêÝò ÄõíÜìåéò ôïõ Ðßíáêá
16.2. ÕðïèÝóôå üôé Ýíáò ÷ñÞóôçò ìå âáèìü åîïõóéïäüôçóçò TS åíçìåñþíåé ôçí
åããñáöÞ (Óôñáôüðåäá, 4) óå (Óôñáôüðåäá, 5). Ðïéü èá åßíáé ôï áðïôÝëåóìá ôçò
åíÝñãåéáò áõôÞò; Ðïéü ðåñéå÷üìåíï åìöáíßæåé ôþñá ï ðßíáêáò óôïí ÷ñÞóôç C êáé
ðïéü ðåñéå÷üìåíï åìöáíßæåé óôï ÷ñÞóôç TS;
×ñÞóôçò ÅíôïëÞ
A GRANT SELECT ON P TO B,C WITH GRANT OPTION
B GRANT SELECT ON P TO D WITH GRANT OPTION
D GRANT SELECT ON P TO C, E WITH GRANT OPTION
C GRANT SELECT ON P TO E
• Óôç óõíÝ÷åéá, õðïèÝóôå üôé ï ÷ñÞóôçò  åêôåëåß ôçí åíôïëÞ REVOKE SE-
LECT ON P FROM D CASCADE. Ó÷åäéÜóôå ôï ãñÜöï óôç íÝá ôïõ ìïñöÞ.
ÈåùñÞóôå ôá åñùôÞìáôá:
437
438 ÊåöÜëáéï 17. ÈÝìáôá Õëïðïßçóçò ôïõ MSSQLS-2000
( 9 6 b y t e s )
Γ ρ α ή ε δ ο έ ν ω ν 1
Γ ρ α ή ε δ ο έ ν ω ν 2
Γ ρ α ή ε δ ο έ ν ω ν 3
Ε λ ε ύ θ ε ρ ο ς Χ ώ ρ ο ς
3 2 1 Μ ε τ α τ ο π ί σ ε ι ς γ ρ α 0 0 ώ ν
α π ό τ η ν α ρ χ ή τ η ς σ ε λ ί δ α ς
• ìßá Ýêôáóç êáëåßôáé ïìïéüìïñöç üôáí üëåò ïé óåëßäåò ðïõ ôçí áðïôåëïýí
áíÞêïõí óôï ßäéï áíôéêåßìåíï ôçò ÂÜóçò ÄåäïìÝíùí (ð.÷., óôïí ßäéï ðßíáêá),
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 439
Σ ε λ ί δ α Σ ε λ ί δ α
Σ ε λ ί δ α Σ ε λ ί δ α
0 1 : 0 0 0 2 0 1 : 0 2 5 5
0 1 : 0 0 0 0 0 1 : 0 0 0 1
Π ρ ω τ ε ύ ο ν α ρ χ ε ί ο δ ε δ ο έ ν ω ν ε τ α υ τ ό τ η τ α 1 , έ γ ε θ ο ς 2 M B y t e s
Σ ε λ ί δ α Σ ε λ ί δ α
Σ ε λ ί δ α Σ ε λ ί δ α
0 2 : 0 0 0 2 0 2 : 0 0 6 3
0 2 : 0 0 0 0 0 2 : 0 0 0 1
$ ε υ τ ε ρ ε ύ ο ν α ρ χ ε ί ο δ ε δ ο έ ν ω ν ε τ α υ τ ό τ η τ α 2 , έ γ ε θ ο ς 5 1 2 K B y t e s
áñ÷åßïõ, áí êáé áõôü äåí åßíáé áðáñáßôçôï. Áí äåí ïñßóïõìå êÜðïéï ìÝãéóôï
ìÝãåèïò, ôüôå ôï áñ÷åßï ìðïñåß íá ìåãáëþíåé áðåñéüñéóôá. Óôçí ðåñßðôùóç áõôÞ
äåí áðáéôåßôáé ç ðáñÝìâáóç ôïõ äéá÷åéñéóôÞ ôïõ óõóôÞìáôïò, ç ïðïßá åßíáé áðá-
ñáßôçôç óôçí ðåñßðôùóç ðïõ ôï ìÝãåèïò êÜðïéïõ áñ÷åßïõ äåäïìÝíùí ãßíåé ßóï ìå
ôï ìÝãéóôï åðéôñåðüìåíï ìÝãåèïò.
sysindexes
id indid . . . FirstISAM . . . root
0
Ε π έ κ τ η 0
α σ
Π ρ ώ τ η
σ ε λ ί δ α I A M
Ε π έ κ τ η 1
α σ
Ε π έ κ τ η 6 3 9 0 2
α σ
Ε π ό η
ε ν
σ ε λ ί δ α I A M
17.2 ÊáôÜëïãïé
Óå ðñïçãïýìåíá êåöÜëáéá ìåëåôÞèçêå ç ÷ñÞóç ôùí êáôáëüãùí ùò ìÝóï ïñãÜ-
íùóçò ôùí äåäïìÝíùí ìå óôü÷ï ôçí áðïäïôéêÞ áðÜíôçóç åñùôçìÜôùí. Áí Ýíáò
ðßíáêáò äåí äéáèÝôåé êáôÜëïãï, ôüôå ãéá êÜèå åñþôçìá óôï ïðïßï áíáöÝñåôáé
ï ðßíáêáò èá ðñÝðåé íá åîåôáóèïýí üëåò ïé ãñáììÝò ôïõ ìßá ðñïò ìßá þóôå íá
ðñïóäéïñéóèåß áí éêáíïðïéåßôáé Þ ü÷é ç óõíèÞêç ôïõ åñùôÞìáôïò. Ç åîáíôëçôéêÞ
áíáæÞôçóç üëùí ôùí ãñáììþí ôïõ ðßíáêá ðñÝðåé íá áðïöåýãåôáé, äéüôé äçìéïõñ-
ãåß ìåãÜëï öüñôï óôï õðïóýóôçìá äåõôåñåýïõóáò ìíÞìçò ëüãù ôùí óõíå÷üìåíùí
ðñïóðåëÜóåùí. Ôï ðëÞèïò ôùí ðñïóðåëÜóåùí ìðïñåß íá ìåéùèåß äñáóôéêÜ ìå
ôç ÷ñÞóç êáôáëüãùí.
Ï MSSQLS-2000 ÷ñçóéìïðïéåß ôç äïìÞ ôïõ B-äÝíäñïõ ãéá ôçí õëïðïßçóç ôùí
êáôáëüãùí. Ãéá ôçí áêñßâåéá ÷ñçóéìïðïéåßôáé ç ðáñáëëáãÞ ôïõ B+ -äÝíäñïõ, ç
ïðïßá åðéôñÝðåé óôá öýëëá ôïõ äÝíäñïõ íá Ý÷ïõí äéáöïñåôéêÞ ìïñöÞ áðü ôïõò
åóùôåñéêïýò êüìâïõò. Õðåíèõìßæåôáé üôé ôá äåäïìÝíá óå Ýíá B+ -äÝíäñï áðïèç-
êåýïíôáé ìüíï óôá öýëëá, åíþ ïé åóùôåñéêïß êüìâïé ÷ñçóéìïðïéïýíôáé âïçèçôéêÜ
êáôÜ ôçí áíáæÞôçóç. Ç äïìÞ ôïõ B+ -äÝíäñïõ ÷ñçóéìïðïéåßôáé åßôå ùò ïìáäï-
ðïéçìÝíïò êáôÜëïãïò (clustered index) åßôå ùò ìç-ïìáäïðïéçìÝíïò êáôÜëïãïò
(non-clustered index).
sysindexes
id indid ... FirstISAM ... root
0
1
Ρίζα
Γραµµές
καταλόγου
Ç T-SQL äéáèÝôåé ôçí åíôïëÞ CREATE INDEX ç åêôÝëåóç ôçò ïðïßáò Ý÷åé ùò
áðïôÝëåóìá ôç äçìéïõñãßá åíüò êáôáëüãïõ ãéá ôïí ðßíáêá. ¸óôù üôé èÝëïõìå íá
äçìéïõñãÞóïõìå Ýíáí ïìáäïðïéçìÝíï êáôÜëïãï ãéá ôç óôÞëç ôßôëïò ôïõ ðßíáêá
Ôáéíßá. Ç åíôïëÞ êáôáóêåõÞò ôïõ êáôáëüãïõ Ý÷åé ùò åîÞò:
CREATE CLUSTERED INDEX êáôÜëïãïò_ôßôëïò
ON Ôáéíßá (ôßôëïò);
SELECT ôßôëïò
FROM Ôáéíßá
WHERE DVD>=2;
SELECT üíïìá,ôßôëïò
FROM Çèïðïéüò,Ôáéíßá,Óõììåôï÷Þ
WHERE Çèïðïéüò.êùäéêüò=Óõììåôï÷Þ.êùäéêüò_çèïðïéïý AND
Ôáéíßá.êùäéêüò=Óõììåôï÷Þ.êùäéêüò_ôáéíßáò;
êáé óõíôïíéóìïý ôùí óõíáëëáãþí áðü ôïí MSSQLS-2000 êáé ôïõò ìç÷áíéóìïýò
åðáíÜêôçóçò äåäïìÝíùí ðïõ äéáèÝôåé.
Ï MSSQLS-2000 ÷ñçóéìïðïéåß ôï çìåñïëüãéï óõíáëëáãþí (transaction log)
ãéá ôçí êáôáãñáöÞ ôùí áëëáãþí ðïõ ðñáãìáôïðïéïýíôáé óôá äåäïìÝíá ôçò âÜóçò.
ÊÜèå åããñáöÞ ôïõ çìåñïëïãßïõ óõíáëëáãþí ðåñéÝ÷åé Ýíá ìïíáäéêü áñéèìü ðïõ
ôáõôïðïéåß ôç óõãêåêñéìÝíç åããñáöÞ. Ïé åããñáöÝò ôïõ çìåñïëïãßïõ ðïõ áíáöÝ-
ñïíôáé óôçí ßäéá óõíáëëáãÞ óõíäÝïíôáé ìåôáîý ôïõò Ýôóé þóôå íá åßíáé åýêïëá
ðñïóðåëÜóéìåò. ÕðÜñ÷ïõí ôñåéò äéáöïñåôéêïß ôñüðïé ìå ôïõò ïðïßïõò ìðïñåß íá
ãßíåé ç äéá÷åßñéóç ôùí óõíáëëáãþí áðü ôïí MSSQLS-2000:
17.4.2 ÁäéÝîïäá
Ç ÷ñÞóç ìç÷áíéóìþí êëåéäþìáôïò äåäïìÝíùí åßíáé äõíáôüí íá åðéöÝñåé áäéÝ-
îïäï (deadlock), üðïõ êÜðïéåò óõíáëëáãÝò áíáìÝíïõí åð’ áüñéóôïí íá åëåõèå-
ñùèåß Ýíá ôìÞìá äåäïìÝíùí. ¼ðùò ìåëåôÞóáìå óôï ÊåöÜëáéï 15 ç äéá÷åßñéóç
ôùí áäéåîüäùí ìðïñåß íá ãßíåé ìå äýï ôñüðïõò: á) áðïöõãÞ áäéåîüäïõ êáé â)
êáôÜñãçóç áäéåîüäïõ, áí áõôü óõìâåß.
Ï MSSQLS-2000 ðáñÝ÷åé ìåèüäïõò êáé ãéá áðïöõãÞ áäéåîüäïõ êáé ãéá êáôÜñ-
ãçóç áäéåîüäïõ. Ãéá ôçí áðïöõãÞ áäéåîüäïõ ôï óýóôçìá ðáñÝ÷åé ôç äõíáôüôçôá
íá ïñßóïõìå ôï ìÝãéóôï ÷ñïíéêü äéÜóôçìá ðïõ ìðïñåß íá ðåñéìÝíåé ìßá óõíáë-
ëáãÞ ãéá ôç ÷ïñÞãçóç ìßáò êëåéäáñéÜò. Áí áõôü ôï ÷ñïíéêü äéÜóôçìá ðáñÝëèåé,
ç óõíáëëáãÞ ôåñìáôßæåôáé. Ôï ÷ñïíéêü äéÜóôçìá ïñßæåôáé ìå ôçí åíôïëÞ SET
LOCKTIMEOUT. Áðü ôç óôéãìÞ ðïõ óõìâåß Ýíá áäéÝîïäï èá ðñÝðåé ôï óýóôçìá
íá áíáëÜâåé ôçí êáôÜñãçóÞ ôïõ, ôåñìáôßæïíôáò ìßá Þ ðåñéóóüôåñåò óõíáëëáãÝò.
Ãéá ôçí áíáãíþñéóç åíüò áäéåîüäïõ ï MSSQLS-2000 ÷ñçóéìïðïéåß ìßá îå÷ùñé-
óôÞ äéáäéêáóßá ðïõ ïíïìÜæåôáé LOCK MONITOR. Ç äéáäéêáóßá áõôÞ åëÝã÷åé ãéá
ýðáñîç áäéåîüäïõ åîåôÜæïíôáò ôï óýíïëï ôùí óõíáëëáãþí ðïõ áíáìÝíïõí ôç
÷ïñÞãçóç ìßáò êëåéäáñéÜò. Ç åðéëïãÞ ôçò óõíáëëáãÞò ðïõ èá ôåñìáôéóèåß ìåôÜ
ôçí áíáãíþñéóç åíüò áäéåîüäïõ ðñáãìáôïðïéåßôáé ìå âÜóç ôï ÷ñüíï CPU ðïõ
Ý÷åé êáôáíáëþóåé ç óõíáëëáãÞ. ÅðéëÝãåôáé ç óõíáëëáãÞ ðïõ Ý÷åé ÷ñçóéìïðïéÞóåé
ôç CPU ôï ìéêñüôåñï ÷ñïíéêü äéÜóôçìá.
Ðáñáôçñïýìå üôé ôá äåäïìÝíá äåí åããñÜöïíôáé óôï äßóêï ìåôÜ ôïí ôåñìáôé-
óìü ôçò óõíáëëáãÞò. Áõôü ãßíåôáé ãéá íá ìåéùèåß ôï ðëÞèïò ôùí ðñïóðåëÜóåùí
óôï äßóêï. Áêüìç êáé áí ç ëåéôïõñãßá ôïõ óõóôÞìáôïò äéáêïðåß áðüôïìá ðñéí åã-
ãñáöïýí ôá äåäïìÝíá óôï äßóêï, ÷ñçóéìïðïéþíôáò ôéò ðëçñïöïñßåò ôïõ áñ÷åßïõ
çìåñïëïãßïõ ìðïñïýìå íá åðáíáöÝñïõìå ôá äåäïìÝíá ôçò âÜóçò. Ôá äåäïìÝíá
ôçò áðïìïíùôéêÞò ìíÞìçò áðïèçêåýïíôáé ôåëéêÜ óôï äßóêï åßôå áðü ôç äéáäé-
êáóßá êáèõóôåñçìÝíçò áðïèÞêåõóçò (lazy writer process) åßôå áðü ôç äéáäéêáóßá
÷ñïíéêþí óçìåßùí åëÝã÷ïõ (checkpoint process). Ç äéáäéêáóßá êáèõóôåñçìÝíçò
áðïèÞêåõóçò åëÝã÷åé ðåñéïäéêÜ ôçí áðïìïíùôéêÞ ìíÞìç ôïõ óõóôÞìáôïò êáé öñï-
íôßæåé Ýôóé þóôå íá õðÜñ÷ïõí ðÜíôá äéáèÝóéìåò óåëßäåò ìíÞìçò. Óå äéáöïñåôéêÞ
ðåñßðôùóç, åëåõèåñþíåé êÜðïéåò óåëßäåò áöïý ðñþôá áíôéãñáöïýí ôá ðåñéå÷ü-
ìåíá áõôþí óôï äßóêï. Ï MSSQLS-2000 ÷ñçóéìïðïéåß ôá ÷ñïíéêÜ óçìåßá åëÝã÷ïõ
(checkpoints) óôá ïðïßá ðñáãìáôïðïéåßôáé áðïèÞêåõóç ôùí äåäïìÝíùí ôçò áðï-
ìïíùôéêÞò ìíÞìçò óôï äßóêï ôïõ óõóôÞìáôïò. Ç äéáäéêáóßá ÷ñïíéêþí óçìåßùí
åëÝã÷ïõ (checkpoint process) åêôåëåßôáé ðåñéïäéêÜ êáé åëÝã÷åé ãéá óåëßäåò äå-
äïìÝíùí êáé çìåñïëïãßïõ ïé ïðïßåò äåí Ý÷ïõí áêüìç áðïèçêåõèåß óôï äßóêï.
ÅðïìÝíùò, áí óôï çìåñïëüãéï óõíáëëáãþí óõíáíôÞóïõìå Ýíá ÷ñïíéêü óçìåßï
åëÝã÷ïõ, ãíùñßæïõìå üôé ìÝ÷ñé åêåßíç ôç ÷ñïíéêÞ óôéãìÞ üëá ôá äåäïìÝíá ðïõ
âñéóêüôáí óôç áðïìïíùôéêÞò ìíÞìçò Ý÷ïõí áðïèçêåõèåß óôï äßóêï ôïõ óõóôÞìá-
ôïò.
Ç ìÝèïäïò åðáíÜêôçóçò ôïõ MSSQLS-2000 åßíáé ìßá ìÝèïäïò Üìåóçò åíçìÝ-
ñùóçò (âë. ÊåöÜëáéï 15). Ï MSSQLS-2000 åðéôñÝðåé ôçí áðïèÞêåõóç ôùí óåëß-
äùí ôçò áðïìïíùôéêÞò ìíÞìçò óôï äßóêï ðñéí ôçí ïëïêëÞñùóç ôçò óõíáëëáãÞò
(commit). Áõôü ìðïñåß íá óõìâåß áí ðñéí ôç ÷ñïíéêÞ óôéãìÞ ôåñìáôéóìïý ôçò
óõíáëëáãÞò õðÜñ÷åé ÷ñïíéêü óçìåßï åëÝã÷ïõ. ÅðïìÝíùò, ç äéáäéêáóßá åðáíÜ-
êôçóçò ôïõ MSSQLS-2000 áðáéôåß êáé ôçí åöáñìïãÞ ôçò ëåéôïõñãßáò ROLLBACK
(Þ UNDO) óå áíôßèåóç ìå ôç ìÝèïäï êáèõóôåñçìÝíçò åíçìÝñùóçò ç ïðïßá ÷ñçóé-
ìïðïéåß ìüíï ôç ëåéôïõñãßá ROLLFORWARD (Þ REDO).
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 455
Ðñïíüìéá ÓõóôÞìáôïò
Ôá ðñïíüìéá óõóôÞìáôïò ó÷åôßæïíôáé ìå ôï äéêáßùìá äçìéïõñãßáò áíôéêåéìÝíùí
ÂÜóåùí ÄåäïìÝíùí êáé áíôéãñÜöùí áóöáëåßáò. Ôá ðñïíüìéá áõôÜ åßíáé ôá
åîÞò: CREATE TABLE, CREATE VIEW, CREATE PROCEDURE, CREATE DE-
FAULT, CREATE FUNCTION, CREATE RULE, BACKUP DATABASE, BACKUP
LOG.
Ãéá ôç äéá÷åßñéóç ôùí ðñïíïìßùí óõóôÞìáôïò ìÝóù ôïõ Enterprise Manager,
êÜíïõìå äåîß êëéê óôç ÂÜóç ÄåäïìÝíùí êáé åðéëÝãïõìå Properties. ÅðéëÝãï-
íôáò ôçí êáñôÝëá Permissions ôïõ ðáñáèýñïõ äéáëüãïõ Properties, ìðïñïýìå íá
åìöáíßóïõìå êáé íá äéá÷åéñéóôïýìå ôá ðñïíüìéá óõóôÞìáôïò ðïõ Ý÷ïõí åê÷ùñç-
èåß ãéá ôç ÂÜóç ÄåäïìÝíùí. ¼ðùò åìöáíßæåôáé êáé óôï Ó÷Þìá 17.8, ôñåéò åßíáé
√
ïé åðéëïãÝò ãéá êÜèå ðñïíüìéï. Ôï óýìâïëï ’ ’ äçëþíåé üôé ôï ðñïíüìéï Ý÷åé
åê÷ùñçèåß (grant). Ôï óýìâïëï ’×’ äçëþíåé üôé ôï ðñïíüìéï Ý÷åé ñçôþò áðáãï-
ñåõèåß (deny) êáé, ôÝëïò, ç ìç ýðáñîç åíüò áðü ôá äýï áõôÜ óýìâïëá äçëþíåé
ðùò ôï ðñïíüìéï äåí Ý÷åé åê÷ùñçèåß Þ Ý÷åé áíáêëçèåß (revoke). Óå ðåñéðôþóåéò
óõíýðáñîçò èåôéêþí (grant) êáé áñíçôéêþí (deny) åîïõóéïäïôÞóåùí ãéá ôï ßäéï
456 ÊåöÜëáéï 17. ÈÝìáôá Õëïðïßçóçò ôïõ MSSQLS-2000
Ðñïíüìéá ÁíôéêéìÝíùí
Ôá ðñïíüìéá ðñïóðÝëáóçò áíôéêåéìÝíùí ÂÜóåùí ÄåäïìÝíùí åê÷ùñïýíôáé, áíá-
êáëïýíôáé êáé áðáãïñåýïíôáé ìå ôçí ÷ñÞóç ôùí åíôïëþí GRANT, REVOKE êáé
DENY, áíôéóôïß÷ùò, ôçò T-SQL. Ãéá ôçí åê÷þñçóç åíüò ðñïíïìßïõ ðñÝðåé ï éäéï-
êôÞôçò ôïõ áíôéêåéìÝíïõ Þ ï äéá÷åéñéóôÞò ôçò ÂÜóçò ÄåäïìÝíùí íá åêôåëÝóåé ôçí
åíôïëÞ:
GRANT
<ëßóôá_ðñïíïìßùí> | ALL [PRIVILEGES]
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 457
{
[<ëßóôá_óôçëþí>] ON <ëßóôá_ðéíÜêùí> | <ëßóôá_üøåùí>
| ON <ëßóôá_ðéíÜêùí> | <ëßóôá_üøåùí> [<ëßóôá_óôçëþí>]
| ON áðïèçêåõìÝíç_óõíÜñôçóç | åêôåôáìÝíç_óõíÜñôçóç
| ON óõíÜñôçóç_ïñéóìÝíç_áðü_÷ñÞóôç
}
TO <ëßóôá_÷ñçóôþí>
[WITH GRANT OPTION];
GRANT SELECT
ON TABLE1
TO USER1
WITH GRANT OPTION;
Ïé åíôïëÝò REVOKE êáé DENY Ý÷ïõí óýíôáîç ðáñüìïéá ôçò åíôïëÞò GRANT:
DENY
<ëßóôá_ðñïíïìßùí> | ALL [PRIVILEGES]
{
[<ëßóôá_óôçëþí>] ON <ëßóôá_ðéíÜêùí> | <ëßóôá_üøåùí>
| ON <ëßóôá_ðéíÜêùí> | <ëßóôá_üøåùí> [<ëßóôá_óôçëþí>]
| ON áðïèçêåõìÝíç_óõíÜñôçóç | åêôåôáìÝíç_óõíÜñôçóç
| ON óõíÜñôçóç_ïñéóìÝíç_áðü_÷ñÞóôç
}
TO <ëßóôá_÷ñçóôþí>
[CASCADE];
Ôá ìüíá óçìåßá äéáöïñÜò ôçò åíôïëÞò REVOKE áðü ôçí åíôïëÞ GRANT åßíáé
ïé åêöñÜóåéò GRANT OPTION FOR êáé CASCADE. Ç ðñþôç Ýêöñáóç áíáêáëåß ôï
äéêáßùìá åê÷þñçóçò åíüò ðñïíïìßïõ óå Üëëïõò ÷ñÞóôåò êáé ç äåýôåñç Ýêöñáóç
áíáêáëåß Ýíá ðñïíüìéï ü÷é ìüíï áðü ôï ÷ñÞóôç áëëÜ êáé áðü üëïõò üóïõò ÷ñÞóôåò
Ý÷ïõí ëÜâåé ôï ßäéï ðñïíüìéï áðü ôï ÷ñÞóôç áõôüí. Ç ðáñÜìåôñïò CASCADE
åöáñìüæåôáé êáé óôçí åíôïëÞ DENY. Óå êÜèå ðåñßðôùóç, áí ï ÷ñÞóôçò Ý÷åé ëÜâåé
Ýíá ðñïíüìéï ìå ôçí ðáñÜìåôñï WITH GRANT OPTION, ôüôå óôéò åíôïëÝò REVOKE
êáé DENY ðñÝðåé íá ÷ñçóéìïðïéçèåß ç ðáñÜìåôñïò CASCADE, áëëéþò ïé åíôïëÝò
äåí èá åêôåëåóôïýí.
Ôá ðñïíüìéá áíôéêåéìÝíùí ìðïñïýí íá åê÷ùñçèïýí ðéï åýêïëá áëëÜ ìå ëé-
ãüôåñç åõåëéîßá ìå ôç ÷ñÞóç ôïõ SQL Server Enterprise Manager. Ðéï óõãêå-
êñéìÝíá, ìå ôïí Enterprise Manager äåí õðÜñ÷åé ç äõíáôüôçôá åê÷þñçóçò ðñï-
íïìßùí ìå ôçí ðáñÜìåôñï WITH GRANT OPTION. Ãéá ôçí áêñßâåéá, ôá ðñïíü-
ìéá áíôéêåéìÝíùí åê÷ùñïýíôáé ìå ôïí ßäéï ôñüðï ðïõ åê÷ùñïýíôáé ôá ðñïíüìéá
óõóôÞìáôïò. Áöïý ï äéá÷åéñéóôÞò ôçò ÂÜóçò ÄåäïìÝíùí Þ ï éäéïêôÞôçò åíüò
áíôéêåéìÝíïõ åðéëÝîåé ôï áíôéêåßìåíï, ðñÝðåé íá êÜíåé äåîß êëéê óå áõôü êáé íá
åðéëÝîåé êáôÜ óåéñÜ ôéò åðéëïãÝò All Tasks êáé Manage Permissions. Ôï Ó÷Þìá
17.9 äåß÷íåé ôï ðáñÜèõñï äéáëüãïõ Object Properties ðïõ åìöáíßæåôáé êáé ìå ôï
ïðïßï åðéôõã÷Üíåôáé ç äéá÷åßñéóç ôùí ðñïíïìßùí åíüò áíôéêåéìÝíïõ.
Ôï êïõìðß Columns ôïõ ðáñáèýñïõ äéáëüãïõ Object Properties åíåñãïðïéåß-
ôáé ãéá ôçí åê÷þñçóç ôùí ðñïíïìßùí SELECT Þ UPDATE óå ìåìïíùìÝíåò óôÞëåò
åíüò ðßíáêá Þ ìéáò üøçò. Ôï Ó÷Þìá 17.10 åìöáíßæåé ôï ðáñÜèõñï äéáëüãïõ Col-
umn Properties áðü ôï ïðïßï ìðïñïýìå íá ðñïóðåëÜóïõìå ôéò åðéëïãÝò áõôÝò.
¸íáò Üëëïò ôñüðïò åê÷þñçóçò ðñïíïìßùí áíôéêåéìÝíùí ìÝóù ôïõ Enterprise
Manager åßíáé áðü ôï ðáñÜèõñï äéáëüãïõ Database User Properties ðïõ åìöáíß-
æåôáé óôï Ó÷Þìá 17.11. Ãéá íá êáëÝóïõìå ôï ðáñÜèõñï áõôü, åðéëÝãïõìå ôï
ëïãáñéáóìü ÷ñÞóôç ôçò ÂÜóçò ÄåäïìÝíùí óôïí ïðïßï åðéèõìïýìå íá åê÷ùñÞ-
óïõìå êÜðïéï ðñïíüìéï êáé áöïý êÜíïõìå äåîß êëéê óôï ëïãáñéáóìü, åðéëÝãïõìå
ôçí åíôïëÞ Properties. Óôç óõíÝ÷åéá ç äéá÷åßñéóç ôùí ðñïíïìßùí ôïõ ÷ñÞóôç
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 459
áíÜ áíôéêåßìåíï ôçò ÂÜóçò ÄåäïìÝíùí ãßíåôáé ìå ôñüðï ðáñüìïéï ìå áõôü ðïõ
áíáëýèçêå íùñßôåñá óôçí ðáñÜãñáöï áõôÞ.
äçìéïõñãåß ìßá üøç ìå ôçí ïðïßá ï éäéïêôÞôçò ôïõ ðßíáêá Ôáéíßá ìðïñåß óôç
óõíÝ÷åéá åêôåëþíôáò ôçí åíôïëÞ:
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 461
GRANT SELECT
ON ÐëÞèïò_ÁíôéãñÜöùí_áíÜ_ÐåñéðÝôåéá
TO george;
SELECT pwdcompare
(’óõíèçìáôéêü_sa’,
(SELECT password
FROM MASTER.dbo.sysxlogins
WHERE name = ’sa’), 0 );
17.6 Óýíïøç
Óôï êåöÜëáéï áõôü ìåëåôÞóáìå ôá âáóéêüôåñá èÝìáôá õëïðïßçóçò ôïõ MSSQLS-
2000. Ç âáóéêÞ ìïíÜäá áðïèÞêåõóçò ãéá ðßíáêåò åßíáé ç Ýêôáóç ðïõ áðïôåëåßôáé
áðü 8 óõíå÷üìåíåò óåëßäåò. ÊÜèå óåëßäá ìðïñåß íá áðïèçêåýóåé 8 KBytes äå-
äïìÝíùí. Ìßá Ýêôáóç êáëåßôáé ïìïéüìïñöç üôáí üëåò ïé óåëßäåò ðïõ ôçí áðïôå-
ëïýí áíÞêïõí óôï ßäéï áíôéêåßìåíï ôçò ÂÜóçò ÄåäïìÝíùí. Ìßá Ýêôáóç êáëåßôáé
áíïìïéüìïñöç üôáí ïé óåëßäåò ôçò ÷ñçóéìïðïéïýíôáé áðü ðïëëÜ áíôéêåßìåíá. Ïé
âáóéêïß ôýðïé áñ÷åßùí ôçò ÂÜóçò ÄåäïìÝíùí åßíáé: á) ðñùôåýïíôá áñ÷åßá, â)
äåõôåñåýïíôá áñ÷åßá êáé ã) áñ÷åßá çìåñïëïãßïõ.
Ï MSSQLS-2000 Ý÷åé äýï ìïñöÝò ïñãÜíùóçò ãéá ôïõò ðßíáêåò: á) ðßíáêåò
óùñïý êáé â) ïìáäïðïéçìÝíïé ðßíáêåò ðïõ Ý÷ïõí ïìáäïðïéçìÝíï êáôÜëïãï. Ç
öõóéêÞ ïñãÜíùóç ôùí äýï ôýðùí ðéíÜêùí åßíáé äéáöïñåôéêÞ. ¸íáò ðßíáêáò ìðï-
ñåß íá äéáèÝôåé ìüíï Ýíáí ïìáäïðïéçìÝíï êáôÜëïãï, åíþ ìðïñåß íá Ý÷åé ðïëëïýò
ìç-ïìáäïðïéçìÝíïõò êáôáëüãïõò. Ãéá ôçí õëïðïßçóç ôùí êáôáëüãùí ÷ñçóéìï-
ðïéåßôáé ç äåíäñéêÞ äïìÞ Â+ -äÝíäñï.
2
http: //www.appsecinc.com/products/dbencrypt/mssql
3
http://www.activecrypt.com/product.htm
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 463
17.10. Áðü ôéò ôå÷íéêÝò êñõðôïãñÜöçóçò ðïõ áíáöÝñèçêáí óôï ÊåöÜëáéï 16,
áíáöÝñáôå ðïéá åßíáé ç êáôáëëçëüôåñç ãéá ôçí êñõðôïãñÜöçóç ôùí ðéóôùôéêþí
êáñôþí ôùí ðåëáôþí ìéáò åöáñìïãÞò çëåêôñïíéêïý åìðïñßïõ. Óôç óõíÝ÷åéá, ðå-
ñéãñÜøôå áíáëõôéêÜ ôç äéáäéêáóßá åéóáãùãÞò ôùí ðáñáããåëéþí ôùí ðåëáôþí.
ÌÝñïò IV
ÅÉÄÉÊÁ ÈÅÌÁÔÁ
467
468 ÊåöÜëáéï 18. ÁíôéêåéìåíïóôñåöÞ ÓÄÂÄ
¸÷åé åðéâåâáéùèåß ðïëëÝò öïñÝò üôé ôá ó÷åóéáêÜ ÓÄÂÄ äåí åðáñêïýí ãéá
ôçí éêáíïðïßçóç ôùí óýã÷ñïíùí áðáéôÞóåùí. Ôï åñþôçìá ðïõ ðñïêýðôåé åýëïãá
åßíáé ãéáôß ôá ó÷åóéáêÜ ÓÄÂÄ áäõíáôïýí íá êáëýøïõí ôéò áíÜãêåò ôùí óýã÷ñï-
íùí åöáñìïãþí;. Óôç óõíÝ÷åéá ðåñéãñÜöïíôáé ìåñéêÜ áðü ôá ðñïâëÞìáôá ðïõ
åìöáíßæïíôáé ÷ñçóéìïðïéþíôáò Ýíá ó÷åóéáêü ÓÄÂÄ:
• Áäõíáìßá áíáðáñÜóôáóçò ôïõ ðñáãìáôéêïý êüóìïõ. Ç äéáäéêáóßá ôçò
êáíïíéêïðïßçóçò ïäçãåß óôç äçìéïõñãßá ó÷Ýóåùí (ðéíÜêùí) ðïõ äåí áíôé-
óôïé÷ïýí óå ïíôüôçôåò ôïõ ðñáãìáôéêïý êüóìïõ. Ï äéáìïéñáóìüò ôùí äå-
äïìÝíùí óå ðïëëïýò ðßíáêåò ïäçãåß óôçí åêôÝëåóç ðïëëþí ÷ñïíïâüñùí
ðñÜîåùí óýíäåóçò.
• ÏìïéïãÝíåéá. Ôï ó÷åóéáêü ìïíôÝëï ïñßæåé üôé êÜèå ãñáììÞ åíüò ðßíáêá
ðñÝðåé íá áðïôåëåßôáé áðü ôéò ßäéåò óôÞëåò, êáé êÜèå óôÞëç ôïõ ðßíáêá
ðñÝðåé íá äÝ÷åôáé ôéìÝò áðü ôï ßäéï ðåäßï ïñéóìïý. Ïé äýï áõôÝò éäéüôçôåò
êáëïýíôáé ïñéæüíôéá êáé êÜèåôç ïìïéïãÝíåéá. Ç äïìÞ áõôÞ ôïõ ðßíáêá åßíáé
áñêåôÜ ðåñéïñéóôéêÞ ãéá áíôéêåßìåíá ôïõ ðñáãìáôéêïý êüóìïõ ôá ïðïßá
Ý÷ïõí ðïëýðëïêç äïìÞ.
• ÐåñéïñéóìÝíåò ëåéôïõñãßåò. ¸íá ó÷åóéáêü ÓÄÂÄ Ý÷åé Ýíá ðåñéïñéóìÝíï
óýíïëï ëåéôïõñãéþí ðïõ ìðïñïýí íá åöáñìïóèïýí óôá äåäïìÝíá, ôï ïðïßï
êáèïñßæåôáé áðü ôç ãëþóóá SQL. Óôéò óýã÷ñïíåò åöáñìïãÝò ôï óýíïëï ôùí
ëåéôïõñãéþí áõôþí äåí åðáñêåß êáé åðïìÝíùò áðáéôåßôáé ç äõíáôüôçôá ïñé-
óìïý íÝùí ôýðùí äåäïìÝíùí êáé íÝùí ëåéôïõñãéþí. Ãéá ðáñÜäåéãìá, ìßá
åöáñìïãÞ GIS ÷ñåéÜæåôáé õðïóôÞñéîç ãéá ãåùìåôñéêÜ áíôéêåßìåíá (ð.÷.,
ãñáììÝò, ðïëýãùíá, óôåñåÜ óþìáôá) êáé ðñÜîåéò ìåôáîý ôùí ãåùìåôñéêþí
áíôéêåéìÝíùí (üðùò ôïìÝò ãñáììþí, åðéêÜëõøç äýï ðïëõãþíùí ê.ë.ð.). Ôá
ðáñáäïóéáêÜ ó÷åóéáêÜ ÓÄÂÄ äåí åðéôñÝðïõí ôïí ïñéóìü íÝùí ôýðùí äå-
äïìÝíùí êáé íÝùí ëåéôïõñãéþí, ìå áðïôÝëåóìá ç äéá÷åßñéóç ôùí áíôéêåéìÝ-
íùí íá åìðåñéÝ÷åôáé óôç ëïãéêÞ ôçò åöáñìïãÞò êáé ü÷é óôï ÓÄÂÄ.
• ÓõíáëëáãÝò ìéêñÞò äéÜñêåéáò. Ïé óõíáëëáãÝò óôéò ðáñáäïóéáêÝò åöáñ-
ìïãÝò åßíáé óõíÞèùò ìéêñÞò äéÜñêåéáò ìå áðïôÝëåóìá ïé ìç÷áíéóìïß ôáõ-
ôü÷ñïíçò åêôÝëåóçò, üðùò ôï êëåßäùìá äýï öÜóåùí, íá åßíáé åðáñêåßò. Áí
ïé óõíáëëáãÝò Ý÷ïõí ìåãÜëç äéÜñêåéá, ôï ïðïßï ðáñáôçñåßôáé êáôÜ êüñï
óå ðïëýðëïêá áíôéêåßìåíá, ïé áíùôÝñù ìç÷áíéóìïß äåí åðáñêïýí.
• Ïé áëëáãÝò óôï ó÷Þìá ôçò ÂÄ åßíáé ÷ñïíïâüñåò. Áí áðáéôçèåß áëëáãÞ
óôï ó÷Þìá ôçò ÂÄ èá ðñÝðåé ï äéá÷åéñéóôÞò íá äéáêüøåé ðñïóùñéíÜ ôç ëåé-
ôïõñãßá ôïõ óõóôÞìáôïò êáé åðéðëÝïí ôá ðñïãñÜììáôá åöáñìïãÞò ðñÝðåé
íá äéáìïñöùèïýí áíáëüãùò.
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 469
public:
setRectangle (int x1, int y1, int x2, int y2);
µέθοδοι resizeRectangle (int dx, int dy); y1
moveRectangle (int newx1, int newy1);
};
x1 x2 x
18.1.2 Êëçñïíïìéêüôçôá
Ãéá ôïí ïñéóìü åíüò ó÷Þìáôïò ÂÜóçò ÄåäïìÝíùí áðáéôïýíôáé óõíÞèùò ðïëëÝò
êëÜóåéò áíôéêåéìÝíùí. Áí êáé äýï Þ ðåñéóóüôåñåò êëÜóåéò ìðïñåß íá åßíáé äéá-
öïñåôéêÝò ìåôáîý ôïõò, ìðïñïýí íá Ý÷ïõí êáé áñêåôÜ êïéíÜ ÷áñáêôçñéóôéêÜ êáé
ìåèüäïõò. Ç êëçñïíïìéêüôçôá (inheritance) åðéôñÝðåé óå äýï êëÜóåéò íá ìïéñÜ-
æïíôáé êïéíÜ ÷áñáêôçñéóôéêÜ êáé ìåèüäïõò. ¼ôáí ìßá êëÜóç  êëçñïíïìåß ôçí
êëÜóç Á, ôüôå ôï óýíïëï ôùí ÷áñáêôçñéóôéêþí ôçò  åßíáé õðåñóýíïëï ôïõ óõíü-
ëïõ ôùí ÷áñáêôçñéóôéêþí ôçò A (ôï ßäéï éó÷ýåé êáé ãéá ôéò ìåèüäïõò).
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 471
class employee :
{
int code;
char[20] name;
char[20] phone;
char[100] address;
int salary;
public :
changeSalary (…);
changePhone (…);
changeAddress (…);
};
public : public :
changeLocation (…); changeLabguage (…);
... ...
... ...
}; };
ðôùóç ôçò êëÜóçò A ÷ñçóéìïðïéåßôáé ç ëÝîç ISA ( ISA A), üðùò áêñéâþò êáé
óôï ìïíôÝëï ÏÓ (âë. ÊåöÜëáéï 4). ¸íá ðáñÜäåéãìá éåñáñ÷ßáò åîåéäßêåõóçò
ðáñïõóéÜæåôáé óôï Ó÷Þìá 18.3á.
Ε ρ ε υ ν η τ ι κ ή Ε ρ γ α σ ί α
Ό χ η α
ι δ α κ τ ο ρ ι κ ή ι α τ ρ ι β ή Ά ρ θ ρ ο ι π λ ω α τ ι κ ή Ε ρ γ α σ ί α Ό χ η α Ν ε ρ ο ύ
Τ ε χ ν ι κ ή Α ν α φ ο ρ ά Ά ρ θ ρ ο Π ε ρ ι ο δ ι κ ο ύ Ά ρ θ ρ ο Σ υ ν ε δ ρ ί ο υ Α υ τ ο κ ί ν η τ ο Α φ ί β ι ο Ό χ η α Π λ ο ί ο
Α υ τ ο κ ί ν η τ ο
IS-PART-OF IS-PART-OF
...
Μ η χ α ν ή Τ ρ ο χ ο ί
IS-PART-OF IS-PART-OF
IS-PART-OF
Α ν τ λ ί α Β ε ν ζ ί ν η ς Κ α τ α ν ε η τ ή ς Φ ί λ τ ρ ο Α έ ρ α
...
• áðïèÞêåõóç áíôéêåéìÝíùí,
• åðáíÜêôçóç äåäïìÝíùí.
474 ÊåöÜëáéï 18. ÁíôéêåéìåíïóôñåöÞ ÓÄÂÄ
Óôç óõíÝ÷åéá äßíïõìå Ýìöáóç óôéò äýï ðñþôåò äõíáôüôçôåò êáé ðåñéãñÜöïõìå
ôéò äéáôçñÞóéìåò (persistent) ãëþóóåò ðñïãñáììáôéóìïý3 . Êáôüðéí ðåñéãñÜöå-
ôáé ç ãëþóóá ïñéóìïý áíôéêåéìÝíùí (object definition language) êáé ç ãëþóóá
åñùôçìÜôùí áíôéêåéìÝíùí (object query language, OQL) óýìöùíá ìå ôéò ðñï-
äéáãñáöÝò ôïõ ODMG 3.0. ÔÝëïò ãßíåôáé áíáöïñÜ óôéò äåóìåýóåéò (bindings)
ôçò ãëþóóáò ïñéóìïý áíôéêåéìÝíùí ãéá ôç ãëþóóá ðñïãñáììáôéóìïý C++. Ç
ODMG (Object Data Management Group) åßíáé ìßá êïéíïðñáîßá åôáéñéþí êáôá-
óêåõÞò ðñïúüíôùí ÓÄÂÄ êáé áêáäçìáúêþí éäñõìÜôùí. ¸íáò áðü ôïõò óôü÷ïõò
ôçò ODMG åßíáé ï ðñïóäéïñéóìüò ôùí ðñïäéáãñáöþí ðïõ ðñÝðåé íá ðëçñïýíôáé
áðü ôá áíôéêåéìåíïóôñåöÞ ÓÄÂÄ êõñßùò áðü ôçí ðëåõñÜ ôçò ìåôáöåñóéìüôçôáò
(portability). Ôï óýíïëï ôùí ðñïäéáãñáöþí ôçò ODMG ðåñéãñÜöïíôáé áíáëõ-
ôéêÜ óôçí áíáöïñÜ [Cattell 2000].
class Person
Person {
attribute struct person_name {string first_name, string last_name} name;
};
ISA
class Employee extends Person
(extent employee)
{
attribute string emp_no;
attribute enum sex_type {M, F} sex;
attribute enum pos_type {Manager, Supervisor, Assistant} position;
Employee
attribute date date_birth;
attribute float salary;
M WorksAt
int getAge ();
void increaseSalary (in float salary_incr);
};
class Branch
(extent branches)
1 Has {
attribute string branch_name;
attribute struct branch_address {string street, string city, string postal_code} address;
Branch
relationship set<Employee> Has inverse Employee::WorksAt;
};
employee
branches
Óôï åðüìåíï ðáñÜäåéãìá ç ïìïéüôçôá ôçò OQL ìå ôçí SQL åßíáé óáöÞò. ¸óôù
üôé æçôïýìå ôá ïíüìáôá êáé ôéò ïäïýò ãéá üëá ôá õðïêáôáóôÞìáôá ðïõ âñßóêïíôáé
óôç Èåóóáëïíßêç. Ôï áíôßóôïé÷ï åñþôçìá Ý÷åé ùò åîÞò:
SELECT b.name,b.address
FROM b IN branches
WHERE b.address.city=‘Èåóóáëïíßêç’;
SELECT e.name.last-name
FROM b IN branches, e IN branches.WorksAt
WHERE b.address.city=‘Áëåîáíäñïýðïëç’
Π ρ ο ε π ε ξ ε ρ γ α σ τ ή ς O D L
Α ρ χ ε ί ο Ε π ι κ ε φ α λ ί δ α ς
Μ ε τ α γ λ ω τ τ ι σ τ ή ς C + + Κ ώ δ ι κ α ς C + + κ α ι C + + O M L
Α ν τ ι κ ε ι ε ν ι κ ό ς Κ ώ δ ι κ α ς ( O B J )
Μ ε τ α δ ε δ ο έ ν α
ι α δ ι κ α σ ί ε ς Χ ρ ό ν ο υ Ε κ τ έ λ ε σ η ς
Σ ύ ν δ ε σ η
( R U N T I M E )
Β ά σ η ε δ ο έ ν ω ν
Ε κ τ ε λ έ σ ι ο ς Κ ώ δ ι κ α ς ( E X E )
κ α ι
ι α δ ι κ α σ ί ε ς Χ ρ ό ν ο υ Ε κ τ έ λ ε σ η ς
ôçò åöáñìïãÞò. Óôï Ó÷Þìá 18.7â ðáñïõóéÜæåôáé ï ôñüðïò ÷ñÞóçò ôçò âéâëéïèÞêçò
ãéá ôïí ïñéóìü ôùí êëÜóåùí Ðñüóùðï (person), Ëïãáñéáóìüò (account), ÐåëÜ-
ôçò (customer) êáé ÕðïêáôÜóôçìá (branch). Ïé óõó÷åôßóåéò ìåôáîý ôùí êëÜóåùí
áðåéêïíßæïíôáé óôï Ó÷Þìá 18.7á.
Person
ISA
M M M 1
Account Customer Branch
d Database accountDB;
accountDB->open("ACCOUNT DATABASE");
d Transaction MyTransaction;
MyTransaction.begin();
d Ref<Branch>branch=new (accountDB,"Branch")Branch;
branch->name="New Branch";
branch->address.city="New City";
branch->address.street="New Street";
branch->address.postal code="54321";
MyTransaction.end();
Ó÷Þìá 18.8: ÔìÞìá êþäéêá ODMG C++ OML ãéá äçìéïõñãßá íÝïõ õðïêáôá-
óôÞìáôïò.
d_OQL_Query MyQuery;
MyQuery("SELECT b.name, b.address
480 ÊåöÜëáéï 18. ÁíôéêåéìåíïóôñåöÞ ÓÄÂÄ
FROM b IN branches
WHERE b.address.city=‘Èåóóáëïíßêç’");
18.4 Óýíïøç
Ç áäõíáìßá ôïõ ó÷åóéáêïý ìïíôÝëïõ äåäïìÝíùí óôçí áêñéâÞ áíáðáñÜóôáóç ôïõ
ðñáãìáôéêïý êüóìïõ êáé óôçí õðïóôÞñéîç ôùí óýã÷ñïíùí åöáñìïãþí ïäÞãçóå
ôïõò åñåõíçôÝò óôçí õéïèÝôçóç Üëëùí ìïíôÝëùí. Ôï áíôéêåéìåíïóôñåöÝò ìïíôÝëï,
ãíùóôü áðü ôéò áíôéêåéìåíïóôñåöåßò ãëþóóåò ðñïãñáììáôéóìïý, ÷ñçóéìïðïéåßôáé
ãéá ôç ìïíôåëïðïßçóç óýíèåôùí ïíôïôÞôùí ôïõ ðñáãìáôéêïý êüóìïõ. Ôá áíôé-
êåéìåíïóôñåöÞ ÓÄÂÄ óôçñßæïõí ôï áíôéêåéìåíïóôñåöÝò ìïíôÝëï äåäïìÝíùí êáé
Ý÷ïõí ðïëëÝò äõíáôüôçôåò ðïõ áðïõóéÜæïõí áðü ôá ó÷åóéáêÜ ÓÄÂÄ. Ùóôüóï,
ðáñïõóéÜæïõí êáé ìåñéêÜ óïâáñÜ ìåéïíåêôÞìáôá ðïõ äõóêïëåýïõí ôçí åõñåßá
÷ñÞóç ôïõò: áðïõóßá êáèïñéóìÝíïõ ìïíôÝëïõ, áõîçìÝíç ðïëõðëïêüôçôá, ç âåë-
ôéóôïðïßçóç âëÜðôåé ôçí åíèõëÜêùóç ôùí áíôéêåéìÝíùí, áðïõóßá õðïóôÞñéîçò
üøåùí.
18.2. ÐåñéãñÜøôå ôéò Ýííïéåò áíôéêåßìåíï, ìÝèïäïò, êëÜóç áíôéêåéìÝíùí êáé äþ-
óôå Ýíá ðáñÜäåéãìá.
18.7. ÁíáöÝñåôå ôéò äéáöïñÝò ìåôáîý ôùí ãëùóóþí ODMG ODL êáé ODMG
OQL.
18.8. Ôé ãíùñßæåôå ãéá ôéò äåóìåýóåéò ôçò ODMG ãéá ôç ãëþóóá C++;
Óôï ðñïçãïýìåíï êåöÜëáéï áíáöÝñáìå üôé äýï åßíáé ïé ìåèïäïëïãßåò ðïõ áêï-
ëïõèïýíôáé ãéá ôçí êáôáóêåõÞ ÓÄÂÄ ðïõ åðéôñÝðïõí ôçí áðïäïôéêÞ õðïóôÞñéîç
ôùí óýã÷ñïíùí åöáñìïãþí. Óôï êåöÜëáéï áõôü åîåôÜæïõìå ôç äåýôåñç åíáëëá-
êôéêÞ ëýóç ðïõ áöïñÜ óôçí åðÝêôáóç ôïõ ó÷åóéáêïý ìïíôÝëïõ êáé ôçí åíßó÷õóç
ôùí ó÷åóéáêþí ÓÄÂÄ ìå íÝåò äõíáôüôçôåò. Ïé ëüãïé ðïõ ïäÞãçóáí ôïõò åñåõ-
íçôÝò ðñïò áõôÞí ôçí êáôåýèõíóç åßíáé áö’ åíüò ôá ìåéïíåêôÞìáôá ðïõ ðáñïõ-
óéÜæïõí ôá áíôéêåéìåíïóôñåöÞ ÓÄÂÄ êáé áö’ åôÝñïõ ôï ãåãïíüò üôé ôá ó÷åóéáêÜ
ÓÄÂÄ Ý÷ïõí ëýóåé ðïëëÜ ðñïâëÞìáôá ðïõ áöïñïýí óôç äéá÷åßñéóç äåäïìÝíùí,
êáé åðïìÝíùò áðïôåëïýí ìßá êáëÞ âÜóç ãéá ôçí êáôáóêåõÞ íÝùí óõóôçìÜôùí ìå
ðåñéóóüôåñåò äõíáôüôçôåò.
ÁðïôÝëåóìá ôçò åñåõíçôéêÞò áõôÞò ðñïóðÜèåéáò Þôáí ç äçìéïõñãßá ìßáò íÝáò
êáôçãïñßáò ÓÄÂÄ ðïõ ïíïìÜæïíôáé áíôéêåéìåíï-ó÷åóéáêÜ ÓÄÂÄ (object-relatio-
nal DMBS) êáé ðñïÝñ÷ïíôáé áðü ôïí åìðëïõôéóìü ôùí ó÷åóéáêþí ÓÄÂÄ ìå
áíôéêåéìåíïóôñåöåßò éäéüôçôåò. Ùóôüóï, ç õðïóôÞñéîç áíôéêåéìÝíùí áðü Ýíá
ó÷åóéáêü óýóôçìá ðñïûðïèÝôåé áñêåôÝò ìåôáâïëÝò óôçí áðïèÞêåõóç êáé äéá-
÷åßñéóç ôùí äåäïìÝíùí. Åðßóçò, áðáéôåßôáé åðÝêôáóç ôçò ãëþóóáò SQL Ýôóé
þóôå íá äßíåôáé ç äõíáôüôçôá óôá ðñïãñÜììáôá åöáñìïãÞò íá åêìåôáëëåõèïýí
ôéò íÝåò äõíáôüôçôåò ôïõ óõóôÞìáôïò. ÔÝëïò, áðáéôïýíôáé áëëáãÝò êáé óôïí
483
484 ÊåöÜëáéï 19. Áíôéêåéìåíï-Ó÷åóéáêÜ ÓÄÂÄ
Κ ω δ ι κ ό ς
Ό ν ο α Α Π Κ
Τ η λ έ φ ω ν ο
êùäéêüò üíïìá ôçëÝöùíï ÁÐÊ
Σ υ ν δ ρ ο η τ ή ς
12 Ãéþñãïò 6977333222 12345
44 Ìáñßá 6945123456 54321
55 ÁëÝîáíäñïò 6937222999 11111
(á) (â)
êáíïíéêïðïßçóç ôùí ó÷Ýóåùí Ý÷åé Üìåóç åðßäñáóç óôçí áðüäïóç ôïõ óõóôÞìáôïò
êáèþò áðáéôåßôáé ç åêôÝëåóç ðïëëþí ðñÜîåùí óýíäåóçò ãéá ôçí ðñïóðÝëáóç ôùí
äåäïìÝíùí. Åðßóçò, äåäïìÝíá ðïõ áöïñïýí ôçí ßäéá ïíôüôçôá áðïèçêåýïíôáé óå
äéáöïñåôéêÜ ôìÞìáôá ôçò äåõôåñåýïõóáò ìíÞìçò ìå áðïôÝëåóìá íá åêôåëïýíôáé
ðåñéóóüôåñåò ðñïóðåëÜóåéò áõîÜíïíôáò ôï ÷ñüíï åêôÝëåóçò ôùí åñùôçìÜôùí.
¸óôù ôþñá üôé èÝëïõìå íá ðñïóèÝóïõìå ìßá íÝá ãñáììÞ óôïí ðßíáêá Óõí-
äñïìçôÞò. Ç åéóáãùãÞ ðñáãìáôïðïéåßôáé ìå ôçí åêôÝëåóç ôçò åíôïëÞò INSERT
ùò åîÞò:
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 487
ôÝóóåñá óçìåßá ãéá ôçí áíáðáñÜóôáóç ôùí ôåóóÜñùí ãùíéþí. Ïñßæïõìå ôïí
ôýðï äåäïìÝíùí PointType ùò åîÞò:
Ç ÷ñÞóç åíüò íÝïõ ôýðïõ äåäïìÝíùí ùò ðåäßï ïñéóìïý ìßáò óôÞëçò äåí äéáöÝñåé
áðü ôç ÷ñÞóç åíüò áðëïý ôýðïõ äåäïìÝíùí:
ôçëÝöùíï VARCHAR(15),
êåñáßá REF(PointType) SCOPE Óçìåßá
REFERENCES ARE CHECKED
ON DELETE CASCADE,
PRIMARY KEY (êùäéêüò));
Ç ëÝîç SCOPE ïñßæåé üôé ïé ôéìÝò ôïõ ÷áñáêôçñéóôéêïý êåñáßá ëáìâÜíïíôáé ìüíï
áðü ôïí ðßíáêá Óçìåßá. Ç Ýêöñáóç REFERENCES ARE CHECKED ïñßæåé üôé èá
ðñáãìáôïðïéåßôáé Ýëåã÷ïò ãéá áêåñáéüôçôá áíáöïñþí. Ï Ýëåã÷ïò áêåñáéüôçôáò
áíáöïñþí áðåíåñãïðïéåßôáé ìå ôçí Ýêöñáóç REFERENCES ARE NOT CHECKED.
• ¸ëåã÷ïò óõíèçêþí. Ìå ôç ÷ñÞóç ôùí åíôïëþí IF ... THEN ... ELSE ...
END IF ìðïñïýìå íá åêôåëÝóïõìå äéáöïñåôéêÝò åíôïëÝò áíáëüãùò ìå ôç
óõíèÞêç ðïõ õðÜñ÷åé óôï IF. Ôï ßäéï õðïóôçñßæåôáé êáé ìå ôçí åíôïëÞ CASE,
ç ïðïßá ÷ñçóéìïðïéåßôáé ùò åîÞò:
CASE x
WHEN 1 THEN y=100;
WHEN 2 THEN y=200;
WHEN default THEN SET y=0;
END CASE;
• Âñü÷ïò. Ìå ôç ÷ñÞóç ôùí åíôïëþí FOR ... END FOR, WHILE ... END WHILE
êáé REPEAT ... UNTIL ìðïñïýìå íá åðáíáëáìâÜíïõìå ôçí åêôÝëåóç åíüò
ôìÞìáôïò êþäéêá ìÝ÷ñé íá éó÷ýóåé ç óõíèÞêç åîüäïõ.
19.2.7 Óêáíäáëéóìïß
¸íáò óêáíäáëéóìüò (trigger) åßíáé Ýíá ôìÞìá êþäéêá ðïõ åêôåëåßôáé üôáí óõìâåß
Ýíá óõãêåêñéìÝíï ãåãïíüò. Ôá ãåãïíüôá ðïõ åíåñãïðïéïýí óêáíäáëéóìïýò åßíáé
åéóáãùãÝò, äéáãñáöÝò êáé åíçìåñþóåéò óôá äåäïìÝíá åíüò ðßíáêá [Ceri 2000].
Óå áíôßèåóç ìå ôéò äéáäéêáóßåò êáé ôéò óõíáñôÞóåéò, Ýíáò óêáíäáëéóìüò äåí äÝ-
÷åôáé ðáñáìÝôñïõò êáé äåí ìðïñåß íá êëçèåß Üìåóá áðü êÜðïéï ôìÞìá êþäéêá
ðñïãñÜììáôïò åöáñìïãÞò. Ïé óêáíäáëéóìïß ìðïñïýí íá ÷ñçóéìïðïéçèïýí ãéá
ôïõò áêüëïõèïõò óêïðïýò:
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 493
• äéåíÝñãåéá åëÝã÷ùí ðñéí áðü ôçí åéóáãùãÞ äåäïìÝíùí, Ýôóé þóôå ôá äå-
äïìÝíá ðïõ åéóÜãïíôáé íá éêáíïðïéïýí ðïëýðëïêïõò ðåñéïñéóìïýò áêå-
ñáéüôçôáò,
• êáôáãñáöÞ ôùí åíåñãåéþí ðïõ Ý÷ïõí ðñáãìáôïðïéçèåß óå Ýíáí ðßíáêá (log-
ging),
• õðïóôÞñéîç ðñïåéäïðïéÞóåùí üôáí åéóá÷èïýí, äéáãñáöïýí Þ åíçìåñùèïýí
äåäïìÝíá åíüò ðßíáêá.
Ç êáôáóêåõÞ åíüò óêáíäáëéóìïý ðñáãìáôïðïéåßôáé ìå ôçí åêôÝëåóç ôçò åíôïëÞò
CREATE TRIGGER Þ óýíôáîç ôçò ïðïßáò Ý÷åé ùò åîÞò:
¼ðùò Ý÷åé Þäç áíáöåñèåß ôá ãåãïíüôá ðïõ åíåñãïðïéïýí ôïõò óêáíäáëéóìïýò åß-
íáé ïé åéóáãùãÝò, äéáãñáöÝò êáé åíçìåñþóåéò äåäïìÝíùí ôïõ ðßíáêá. Ìðïñïýìå
íá åðéëÝîïõìå áí ï óêáíäáëéóìüò èá åíåñãïðïéçèåß ðñéí Þ ìåôÜ ôéò ëåéôïõñãßåò
áõôÝò. ¸ôóé Ý÷ïõìå BEFORE INSERT, BEFORE DELETE, BEFORE UPDATE êáé
AFTER INSERT, AFTER DELETE, AFTER UPDATE. Ïé ëåéôïõñãßåò ôïõ óêáíäáëé-
óìïý ìðïñïýí íá åöáñìïóèïýí åßôå óå êÜèå ãñáììÞ ôïõ ðßíáêá (FOR EACH ROW)
åßôå ìüíï ìßá öïñÜ (FOR EACH STATEMENT). ÌåôÜ ôçí Ýêöñáóç REFERENCES
áêïëïõèåß ìßá ëßóôá ìå ôá øåõäþíõìá ôùí íÝùí êáé ôùí ðáëáéþí ôéìþí þóôå íá
åßíáé äõíáôÞ ç ðñïóðÝëáóÞ ôïõò. Ï êþäéêáò ðïõ åêôåëåß ï óêáíäáëéóìüò âñßóêå-
ôáé ìåôáîý ôùí ëÝîåùí BEGIN êáé END êáé áðïôåëåß ôï óþìá ôïõ óêáíäáëéóìïý.
Ôïíßæåôáé üôé äåí åðéôñÝðåôáé ç åêôÝëåóç ôùí åíôïëþí COMMIT êáé ROLLBACK
ìÝóá óôï óþìá ôïõ óêáíäáëéóìïý.
ση
χ
ρ
ή ρ
Σ χ ε σ ι α κ ά Σ Β Α ν τ ι κ ε ι ε ν ο σ χ ε σ ι α κ ά Σ Β
ο
σ
π
υ
η
σ
Σ ύ σ τ η
α Α ρ χ ε ί ω ν Α ν τ ι κ ε ι
ε ν ο σ τ ρ α φ ή Σ Β
ς
ή σ
Α π
Π ο λ υ π λ ο κ ό τ η τ α δ ε δ ο έ ν ω ν κ α ι ε π ε κ τ α σ ι ό τ η τ α
19.4 Óýíïøç
Ôá áíôéêåéìåíï-ó÷åóéáêÜ ÓÄÂÄ áêïëïõèïýí ìßá äéáöïñåôéêÞ ðñïóÝããéóç ãéá
ôçí õðïóôÞñéîç ôùí óýã÷ñïíùí åöáñìïãþí óå ó÷Ýóç ìå ôá áíôéêåéìåíïóôñåöÞ
ÓÄÂÄ. ¸íá áíôéêåéìåíï-ó÷åóéáêü ÓÄÂÄ õðïóôçñßæåé ðëÞñùò ôï ó÷åóéáêü ìï-
íôÝëï äåäïìÝíùí, åíþ Ý÷åé åìðëïõôéóèåß ìå åðéðëÝïí äõíáôüôçôåò ìå óôü÷ï ôçí
õðïóôÞñéîç ðïëýðëïêùí áíôéêåéìÝíùí. Ïé ëüãïé ðïõ ïäÞãçóáí ôïõò åñåõíçôÝò
ðñïò áõôÞí ôçí êáôåýèõíóç åßíáé áö’ åíüò ôá ìåéïíåêôÞìáôá ðïõ ðáñïõóéÜæïõí ôá
áíôéêåéìåíïóôñåöÞ ÓÄÂÄ êáé áö’ åôÝñïõ ôï ãåãïíüò üôé ôá ó÷åóéáêÜ ÓÄÂÄ Ý÷ïõí
ëýóåé ðïëëÜ ðñïâëÞìáôá ðïõ áöïñïýí óôç äéá÷åßñéóç äåäïìÝíùí, êáé åðïìÝíùò
áðïôåëïýí ìßá êáëÞ âÜóç ãéá ôçí êáôáóêåõÞ íÝùí óõóôçìÜôùí ìå ðåñéóóüôåñåò
äõíáôüôçôåò. Ðïëëïß êáôáóêåõáóôÝò åìðïñéêÜ äéáèÝóéìùí ÓÄÂÄ üðùò ç IBM,
ç Microsoft êáé ç Oracle Ý÷ïõí Þäç ðñï÷ùñÞóåé óôçí åðÝêôáóç ôùí óõóôçìÜôùí
ôïõò óå áíôéêåéìåíï-ó÷åóéáêÜ.
496 ÊåöÜëáéï 19. Áíôéêåéìåíï-Ó÷åóéáêÜ ÓÄÂÄ
¸íá áðü ôá äõíáôÜ óçìåßá ôùí ó÷åóéáêþí ÓÄÂÄ åßíáé ç åõêïëßá óôç äéá-
ôýðùóç åñùôçìÜôùí ìÝóù ôçò ãëþóóáò SQL. Ç õðïóôÞñéîç áíôéêåéìÝíùí êáé
ðïëýðëïêùí ôýðùí äåäïìÝíùí áðü Ýíá ó÷åóéáêü óýóôçìá åðéâÜëëåé êáé ôçí åðÝ-
êôáóç ôçò ãëþóóáò SQL Ýôóé þóôå íá ìðïñïýìå íá åêìåôáëëåõèïýìå ôéò åðéðëÝïí
ëåéôïõñãßåò ôïõ óõóôÞìáôïò. Ãéá ôï óêïðü áõôü äçìéïõñãÞèçêå Ýíá íÝï ðñüôõðï
ôçò ãëþóóáò SQL ìå ôçí ïíïìáóßá SQL3, ôï ïðïßï åìðëïõôßæåé ôç ãëþóóá SQL
ìå íÝá óôïé÷åßá üðùò: á) õðïóôÞñéîç ôýðïõ ãñáììÞò, â) õðïóôÞñéîç áíôéêåéìÝíùí
êáé åííïéþí ôïõ áíôéêåéìåíïóôñåöïýò ìïíôÝëïõ, ã) õðïóôÞñéîç áöáéñåôéêþí ôý-
ðùí äåäïìÝíùí, ä) ôýðïé äåäïìÝíùí ïñéæüìåíïé áðü ôï ÷ñÞóôç, å) äéáäéêáóßåò êáé
óõíáñôÞóåéò ïñéæüìåíåò áðü ôï ÷ñÞóôç, óô) õðïóôÞñéîç ìåãÜëùí áíôéêåéìÝíùí, æ)
áõôüìáôç åêôÝëåóç åíôïëþí ìåôÜ Þ ðñéí áðü åéóáãùãÞ, äéáãñáöÞ Þ åíçìÝñùóç
äåäïìÝíùí.
19.7. Èåùñåßóôå ôïõò ðßíáêåò R1 (a, b, c) êáé R2 (a, d, e), üðïõ a åßíáé ôï
ðñùôåýïí êëåéäß êáé ôùí äýï ðéíÜêùí. ÈÝëïõìå êÜèå öïñÜ ðïõ åéóÜãåôáé ìßá
íÝá ãñáììÞ óôïí ðßíáêá R1 íá åéóÜãåôáé ìßá áíôßóôïé÷ç ãñáììÞ óôïí ðßíáêá R2 .
ÐåñéãñÜøôå ôï ìç÷áíéóìü åðßëõóçò, ÷ùñßò íá äþóåôå áêñéâåßò åíôïëÝò SQL.
19.8. Ìßá ÷ñïíéêÞ áêïëïõèßá åßíáé Ýíáò ôýðïò äåäïìÝíùí ðïõ áðïôåëåßôáé áðü
ðñáãìáôéêïýò áñéèìïýò. Ï êÜèå áñéèìüò äçëþíåé ôçí ôéìÞ ôïõ ìåãÝèïõò óå ìßá
óõãêåêñéìÝíç ÷ñïíéêÞ óôéãìÞ (ð.÷., ôéìÞ ìåôï÷Þò ãéá êÜèå çìÝñá ôïõ ÷ñüíïõ).
×ñçóéìïðïéþíôáò ôéò äõíáôüôçôåò ôçò SQL3 íá ïñéóèåß Ýíáò íÝïò ôýðïò äåäïìÝ-
íùí Time-Sequence, èåùñþíôáò üôé ôï ìÞêïò ìßáò ÷ñïíéêÞò áêïëïõèßáò åßíáé ôï
ðïëý 1024. Áðü ôçí êÜèå ÷ñïíéêÞ áêïëïõèßá åíäéáöåñüìáóôå ãéá ôçí áíÜãíùóç
ôçò ôéìÞò óå ìßá ÷ñïíéêÞ óôéãìÞ, ôï ìÞêïò ôçò, ôç ìÝóç ôéìÞ ôùí ôéìþí, ôçí åëÜ÷é-
óôç êáé ôç ìÝãéóôç ôéìÞ. Åðßóçò ðñÝðåé íá õðÜñ÷åé ç äõíáôüôçôá ðñïóèÞêçò íÝáò
ôéìÞò êáé ìåôáâïëÞò ôçò ôéìÞò ôçò áêïëïõèßáò ãéá óõãêåêñéìÝíç ÷ñïíéêÞ óôéãìÞ.
ÈåùñÞóôå üôé ïé ÷ñïíéêÝò óôéãìÝò áñéèìïýíôáé áðü 0 Ýùò êáé 1023. Íá ïñéóèïýí
ïé êáôÜëëçëåò ìÝèïäïé óôï íÝï ôýðï äåäïìÝíùí þóôå íá ðáñÝ÷ïíôáé ïé áíùôÝñù
äõíáôüôçôåò.
19.9. Íá ïñßóåôå Ýíá íÝï ôýðï äåäïìÝíùí Polygon ìå óôü÷ï ôçí áðïèÞêåõóç
ðïëõãþíùí, ÷ñçóéìïðïéþíôáò äçëþóåéò ôçò SQL3.
499
500 ÊåöÜëáéï 20. ÕðïóôÞñéîç Óýã÷ñïíùí Åöáñìïãþí
20.1.2 ÅñùôÞìáôá
Ç áíáðáñÜóôáóç ðëçñïöïñßáò ÷þñïõ óå ìßá ÂÜóç ÄåäïìÝíùí ðñïóöÝñåé ôç
äõíáôüôçôá äéáôýðùóçò íÝùí ôýðùí åñùôçìÜôùí. ÃåíéêÜ äéáêñßíïõìå ôñåéò ôý-
502 ÊåöÜëáéï 20. ÕðïóôÞñéîç Óýã÷ñïíùí Åöáñìïãþí
(α) οι χώρες της Ευρώπης µε αναπαράσταση πολυγώνων (β) χάρτης του νοµού Καβάλας
íá óêåöôïýìå üôé áðáéôåßôáé Ýíá ÓÄÂÄ ãéá ôçí õðïóôÞñéîç åíüò GIS, ðáñÜ íá
óôçñé÷èïýìå áðëþò óå Ýíá óýóôçìá áñ÷åßùí ãéá ôçí áðïèÞêåõóç ôùí ðëçñïöï-
ñéþí. ÕðÜñ÷ïõí äýï ôñüðïé õðïóôÞñéîçò åíüò GIS áðü Ýíá ÓÄÂÄ, ïé ïðïßïé
áðåéêïíßæïíôáé óôï Ó÷Þìá 20.2 êáé åßíáé ïé åîÞò:
1. ç ÷ñÞóç åíüò ó÷åóéáêïý ÓÄÂÄ ãéá ôç äéá÷åßñéóç ôçò ðåñéãñáöéêÞò ðëç-
ñïöïñßáò êáé ç ÷ñÞóç áñ÷åßùí ãéá ôç äéá÷åßñéóç ôçò ãåùãñáöéêÞò ðëçñï-
öïñßáò, Þ
2. ç ÷ñÞóç åíüò ÓÄÂÄ ìå äõíáôüôçôåò áðïèÞêåõóçò êáé äéá÷åßñéóçò ðïëýðëï-
êùí áíôéêåéìÝíùí (áíôéêåéìåíïóôñåöÝò Þ áíôéêåéìåíï-ó÷åóéáêü), Ýôóé þóôå
íá åßíáé äõíáôÞ ç õðïóôÞñéîç ãåùãñáöéêþí áíôéêåéìÝíùí ìå ãåùãñáöéêïýò
ôýðïõò äåäïìÝíùí.
Π ρ ο γ ρ ά α τ α Ε φ α ρ ο γ ή ς ( π . χ . G I S ) Π ρ ο γ ρ ά α τ α Ε φ α ρ ο γ ή ς ( π . χ . G I S )
Σ χ ε σ ι α κ ό Σ Β γ ι α τ η ν Ε ι δ ι κ ή ε φ α ρ ο γ ή γ ι α τ η ν Α ν τ ι κ ε ι ε ν ο σ τ ρ α φ έ ς ή
ε π ε ξ ε ρ γ α σ ί α τ η ς ε π ε ξ ε ρ γ α σ ί α Α ν τ ι κ ε ι ε ν ο & σ χ ε σ ι α κ ό Σ Β ε δ υ ν α τ ό τ η τ ε ς
π ε ρ ι γ ρ α φ ι κ ή ς γ ε ω γ ρ α φ ι κ ή ς α π ο θ ή κ ε υ σ η ς κ α ι δ ι α χ ε ί ρ ι σ η ς γ ε ω γ ρ α φ ι κ ώ ν
π λ η ρ ο φ ο ρ ί α ς π λ η ρ ο φ ο ρ ί α ς δ ε δ ο έ ν ω ν
Σ χ ε σ ι α κ ή Β ά σ η
Σ ύ σ τ η α Α ρ χ ε ί ω ν
ε δ ο έ ν ω ν
Γ ε ω γ ρ α φ ι κ ά
( γ ε ω γ ρ α φ ι κ ά δ ε δ ο έ ν α )
( π ε ρ ι γ ρ α φ ι κ ά δ ε δ ο έ ν α )
κ α ι π ε ρ ι γ ρ α φ ι κ ά δ ε δ ο έ ν α
( α ) χ ρ ή σ η σ χ ε σ ι α κ ο ύ ( β ) χ ρ ή σ η α ν τ ι κ ε ι ε ν ο σ τ ρ α φ ο ύ ς ή
Σ Β α ν τ ι κ ε ι ε ν ο & σ χ ε σ ι α κ ο ύ Σ Β
Åßíáé ðñïöáíÝò üôé ï äåýôåñïò ôñüðïò õðïóôÞñéîçò åíüò GIS áðü Ýíá ÓÄÂÄ
åßíáé ðñïôéìüôåñïò, äéüôé ç äéá÷åßñéóç ôùí ãåùãñáöéêþí áíôéêåéìÝíùí ðñáãìáôï-
ðïéåßôáé áðü ôï ßäéï ôï ÓÄÂÄ (ïñßæïíôáò öõóéêÜ ôïõò êáôÜëëçëïõò ôýðïõò äåäïìÝ-
íùí êáé ôéò ðñÜîåéò ìåôáîý ôùí ãåùãñáöéêþí áíôéêåéìÝíùí). Ãéá ðáñÜäåéãìá,
÷ñçóéìïðïéþíôáò Ýíá áíôéêåéìåíï-ó÷åóéáêü ÓÄÂÄ ìðïñïýìå íá äçìéïõñãÞóïõìå
Ýíáí ðßíáêá ãéá ôçí áðïèÞêåõóç ôùí ÷ùñþí. Ï ðßíáêáò áõôüò èá ðåñéÝ÷åé óôÞ-
ëåò ãéá ôçí áðïèÞêåõóç ôçò ðåñéãñáöéêÞò ðëçñïöïñßáò êáé ìßá Þ ðåñéóóüôåñåò
óôÞëåò ãéá ôçí áðïèÞêåõóç ôçò ãåùãñáöéêÞò ðëçñïöïñßáò:
CREATE TABLE ×þñá
(êùäéêüò INT NOT NULL,
504 ÊåöÜëáéï 20. ÕðïóôÞñéîç Óýã÷ñïíùí Åöáñìïãþí
üíïìá VARCHAR(30),
ðëçèõóìüò INT,
åðßóçìç-ãëþóóá VARCHAR(20),
ðñùôåýïõóá VARCHAR (30),
óýíïñá PolygonType,
PRIMARY KEY (êùäéêüò));
Π ε ρ ι ο χ ή
ε ρ ώ τ η σ η ς
Ìßá áðü ôéò äçìïöéëÝóôåñåò äïìÝò åßíáé ôï R-äÝíäñï (R-tree) [Guttman 1984,
Manolopoulos 2005] ðïõ ìðïñåß íá èåùñçèåß ùò åðÝêôáóç ôïõ B-äÝíäñïõ ãéá
ìåãáëýôåñï áñéèìü äéáóôÜóåùí. Ôï R-äÝíäñï ÷ñçóéìïðïéåß ïñèïãþíéá ãéá ôç
äåéêôïäüôçóç ôùí áíôéêåéìÝíùí. Áíáëõôéêüôåñá, áðü êÜèå ãåùãñáöéêÞ áíá-
ðáñÜóôáóç (ðïëýãùíï) õðïëïãßæåôáé ôï åëÜ÷éóôï ïñèïãþíéï ðïõ ðåñéêëåßåé ôçí
ðåñéï÷Þ (minimum bounding rectangle, MBR). Ôï R-äÝíäñï êáôáóêåõÜæåôáé ìå
âÜóç ôá MBRs ôùí áíôéêåéìÝíùí ðïõ áðïèçêåýïíôáé óôá öýëëá ôïõ äÝíäñïõ. Ïé
åóùôåñéêïß êüìâïé ðåñéÝ÷ïõí ïñèïãþíéá. ÊÜèå ïñèïãþíéï ðåñéêëåßåé üëá ôá ïñ-
èïãþíéá ôïõ áíôßóôïé÷ïõ õðïäÝíäñïõ. ¸ôóé ó÷çìáôßæåôáé ìßá éåñáñ÷éêÞ äïìÞ ðïõ
ìðïñåß íá ìåéþóåé äñáóôéêÜ ôï ÷ñüíï áíáæÞôçóçò. Óôï Ó÷Þìá 20.4 áðåéêïíßæåôáé
Ýíá ðáñÜäåéãìá êáôáóêåõÞò ôïõ R-äÝíäñïõ.
Ãéá íá áðáíôÞóïõìå óôï åñþôçìá ðåñéï÷Þò, äéáâÜæïõìå ôç ñßæá ôïõ R-äÝíäñïõ
êáé ðñïóäéïñßæïõìå ôá ïñèïãþíéá ðïõ ôÝìíïõí ôçí ðåñéï÷Þ åñùôÞìáôïò R. Ìå
âÜóç ôï ðáñÜäåéãìá ôïõ Ó÷Þìáôïò 20.4, ôá ïñèïãþíéá áõôÜ åßíáé ôá R1 êáé R2.
Óôç óõíÝ÷åéá ãéá êÜèå Ýíá áðü ôá ïñèïãþíéá ðïõ ôÝìíåé ç ðåñéï÷Þ åñùôÞìá-
ôïò åñåõíïýìå ôï áíôßóôïé÷ï õðïäÝíäñï åðáíáëáìâÜíïíôáò ôçí ßäéá äéáäéêáóßá.
ÌåôÜ ôçí åîÝôáóç üëùí ôùí õðïäÝíäñùí, Ý÷ïõìå Ýíá óýíïëï ïñèïãùíßùí ðïõ ôÝ-
506 ÊåöÜëáéï 20. ÕðïóôÞñéîç Óýã÷ñïíùí Åöáñìïãþí
R1
R2
A ∆
Γ Ε R1 R2 R3
R (περιοχή ερωτήµατος)
Ζ
R3
Θ R(A) R(Β) R(Γ) R(∆) R(Ε) R(Ζ) R(Η) R(Θ) R(Ι)
Η
Ι
ìíïõí ôçí ðåñéï÷Þ åñùôÞìáôïò. Áõôü üìùò äåí óçìáßíåé üôé ôÝìíïíôáé êáé ôá áíôß-
óôïé÷á ðïëýãùíá. Áõôü öáßíåôáé êáèáñÜ ãéá ôï áíôéêåßìåíï E. Áí êáé ç ðåñéï÷Þ
åñùôÞìáôïò ôÝìíåé ôï R(E) äåí ôÝìíåé êáé ôï ßäéï ôï Å. Áõôü åßíáé ðïëý öõóéêü íá
óõìâåß åðåéäÞ ôï R-äÝíäñï Ý÷åé êáôáóêåõáóèåß ìå âÜóç ôï MBR ôùí áíôéêåéìÝ-
íùí, ôï ïðïßï áðïôåëåß ðñïóÝããéóç ôçò ðñáãìáôéêÞò ãåùìåôñßáò ôïõ áíôéêåéìÝíïõ.
ÅðïìÝíùò, ôá áíôéêåßìåíá ðïõ åðéóôñÝöïíôáé áðü ôçí áíáæÞôçóç ôïõ R-äÝíäñïõ
ðñÝðåé íá åîåôáóèïýí ìå âÜóç ôçí ðñáãìáôéêÞ ôïõò ãåùìåôñßá þóôå íá ðñïóäéï-
ñéóèåß áí ôÝìíïõí Þ ü÷é ôçí ðåñéï÷Þ åñùôÞìáôïò. Ç ðñÜîç áõôÞ åßíáé áñêåôÜ ÷ñï-
íïâüñá êáé áðáéôåß ôçí õëïðïßçóç áëãïñßèìùí õðïëïãéóôéêÞò ãåùìåôñßáò (com-
putational geometry). Óôá âéâëßá [Manolopoulos 1999, Manolopoulos 2003] ðåñé-
ãñÜöïíôáé ìå ëåðôïìÝñåéá ðïëëÝò äïìÝò êáôáëüãùí ãéá ÷ùñéêÝò, ÷ùñï-÷ñïíéêÝò
êáé Üëëåò óýã÷ñïíåò åöáñìïãÝò.
ãéá ôï ëüãï áõôü ïé åñåõíçôÝò Ý÷ïõí ðñï÷ùñÞóåé óôç ìåëÝôç íÝùí ìåèüäùí. Ïé
êõñéüôåñïé ôýðïé äåäïìÝíùí ðïõ óõíáíôïýìå óôéò ðïëõìåóéêÝò åöáñìïãÝò åßíáé:
êåßìåíï (text), åéêüíá (image), Þ÷ïò (audio), êéíïýìåíç åéêüíá (video).
¼ðùò êáé óôçí ðåñßðôùóç åíüò GIS, ôá ðïëõìåóéêÜ äåäïìÝíá áðïôåëïýíôáé
áðü ôçí ðåñéãñáöéêÞ ðëçñïöïñßá (ð.÷., ôßôëïò ôáéíßáò) êáé ôçí ðëçñïöïñßá ðåñéå-
÷ïìÝíïõ (content). ¸íáò ôñüðïò äéá÷åßñéóçò ôùí ðïëõìåóéêþí ôýðùí äåäïìÝíùí
÷ñçóéìïðïéþíôáò Ýíá ðáñáäïóéáêü ÓÄÂÄ åßíáé íá áðïèçêåýóïõìå ôçí ðåñé-
ãñáöéêÞ ðëçñïöïñßá óôç ÂÜóç ÄåäïìÝíùí ôïõ ÓÄÂÄ êáé íá ÷ñçóéìïðïéÞóïõìå
åîùôåñéêÜ áñ÷åßá ãéá ôçí áðïèÞêåõóç ôïõ ðåñéå÷ïìÝíïõ. Ôï âáóéêü ìåéïíÝêôçìá
áõôÞò ôçò ðñïóÝããéóçò åßíáé üôé äåí ìðïñïýìå íá ÷ñçóéìïðïéÞóïõìå ôç ëåéôïõñãé-
êüôçôá ôïõ ÓÄÂÄ ãéá ôï ðåñéå÷üìåíï ôùí ôýðùí äåäïìÝíùí (ð.÷., ôçí êáôáóêåõÞ
äïìþí êáôáëüãùí).
¸íáò Üëëïò ôñüðïò äéá÷åßñéóçò åßíáé íá ÷ñçóéìïðïéÞóïõìå ôïí ôýðï äåäïìÝ-
íùí BLOB (âë. ÊåöÜëáéï 18) ãéá ôçí áðïèÞêåõóç ôïõ ðåñéå÷ïìÝíïõ, ï ïðïßïò
õðïóôçñßæåôáé áðü ôï ðñüôõðï SQL3. ÁõôïìÜôùò, áõôÞ ç ðñïóÝããéóç êáèéóôÜ
õðåýèõíç ôçí åöáñìïãÞ ãéá ôç äéá÷åßñéóç ôïõ ðåñéå÷ïìÝíïõ ôïõ BLOB, êáèþò ôï
ÓÄÂÄ äåí Ý÷åé ãíþóç ôçò äïìÞò ôïõ ðåñéå÷ïìÝíïõ ôïõ BLOB. Ãéá ðáñÜäåéãìá,
áí óå Ýíá BLOB áðïèçêåýóïõìå video ìå äéáìüñöùóç MPEG, ôï ÓÄÂÄ äåí
åßíáé óå èÝóç íá áíáãíùñßóåé ôá ðåñéå÷üìåíá ôïõ BLOB êáèþò ç äéáìüñöùóç
MPEG åßíáé Üãíùóôç óå áõôü. Ùóôüóï, ìå ôéò äõíáôüôçôåò ôïõ ðñïôýðïõ SQL3
ìðïñïýìå íá ïñßóïõìå íÝïõò ôýðïõò äåäïìÝíùí ïñéæüìåíùí áðü ôï ÷ñÞóôç, Ýôóé
þóôå ç äéá÷åßñéóç ôùí ðïëõìÝóùí íá áðïôåëåß ôìÞìá ôïõ ÓÄÂÄ êáé ü÷é ôçò åöáñ-
ìïãÞò. Áêüìç üìùò êáé ìå áõôÞ ôçí ðñïóÝããéóç, ç õðïóôÞñéîç ôùí ðïëõìåóéêþí
äåäïìÝíùí äåí åßíáé ç êáëýôåñç äõíáôÞ. Åêôüò áðü ôçí áðïèÞêåõóç êáé äéá÷åß-
ñéóç ôùí äåäïìÝíùí, ðñÝðåé íá ëÜâïõìå õð’ üøç êáé Üëëïõò âáóéêïýò ðáñÜãïíôåò
üðùò:
• Ç åêôßìçóç ôïõò êüóôïõò ìßáò ðñÜîçò ðñÝðåé íá ëçöèåß õð’ üøç êáôÜ ôç
âåëôéóôïðïßçóç åíüò åñùôÞìáôïò. Áõôü äåí åßíáé åöéêôü áí ïé ðïëõìåóéêïß
508 ÊåöÜëáéï 20. ÕðïóôÞñéîç Óýã÷ñïíùí Åöáñìïãþí
• Ìßá áðïèÞêç äåäïìÝíùí áðïôåëåß îå÷ùñéóôü óýóôçìá áðü Ýíá ÓÄÂÄ. Ëåé-
ôïõñãßåò üðùò äéá÷åßñéóç óõíáëëáãþí êáé åðáíÜêôçóç äåí åßíáé áðáñáß-
ôçôåò, êáèþò ôá äåäïìÝíá ÷ñçóéìïðïéïýíôáé ìüíï ãéá áíÜãíùóç.
Ï ñüëïò ìßáò áðïèÞêçò äåäïìÝíùí åßíáé ôåëåßùò äéáöïñåôéêüò áðü áõôüí åíüò
ÓÄÂÄ. ¸íá ÓÄÂÄ ðñÝðåé íá åßíáé óå èÝóç íá äÝ÷åôáé óõíáëëáãÝò áðü ôïõò ÷ñÞ-
óôåò êáé íá ôéò åðåîåñãÜæåôáé ìå áðïôåëåóìáôéêüôçôá êáé áõîçìÝíç áðüäïóç. Ãéá
ôï ëüãï áõôü ôá óõóôÞìáôá áõôÜ êáëïýíôáé OLTP (on-line transaction process-
ing). Ç áðïèÞêç äåäïìÝíùí ðñÝðåé íá õðïóôçñßæåé êõñßùò áíÜëõóç äåäïìÝíùí
ìå óôü÷ï ôç äéåõêüëõíóç ôùí ÷ñçóôþí óôç ëÞøç áðïöÜóåùí (decision making).
Ìßá áðïèÞêç äåäïìÝíùí áíÞêåé óôçí êáôçãïñßá ôùí óõóôçìÜôùí OLAP (on-line
analytical processing). Ïé âáóéêÝò äéáöïñÝò ìåôáîý ôùí óõóôçìÜôùí OLTP êáé
OLAP äßíïíôáé óôïí Ðßíáêá 20.1 [Han 2001, Dunham 2003].
Λ ε ι τ ο υ ρ γ ι έ ς
Κ α θ α ρ ι σ ό ς
β ά σ ε ι ς δ ε δ ο έ ν ω ν
α ι
ε τ α τ ρ ο π ή
Ε ρ γ α λ ε ί α O L A P
δ ε δ ο έ ν ω ν
Α π ο θ ή
κ η
ε δ ο έ ν ω ν
Ε ρ γ α λ ε ί α
Ε ξ ό ρ υ ξ ς
ε δ ο έ ν ω ν
Καβάλα
50
Πάτρα 100
100 100 100 100
Αθήνα 300
100 100 100 100
Θεσσαλονίκη
100 100100100100100100 100
1ο τρίµηνο 200 200100300100 0 100 100
100 100100100100100100 100
2ο τρίµηνο 200 100100100100100100 100
100 100100100100100100 100
3ο τρίµηνο 100 0 100100100100100 100
100 100 100 100
4ο τρίµηνο 300 200 100 100
Ιστορία Μεταφυσική
Λογοτεχνία Πληροφορική
óåéò ôï ÷ñüíï, ôçí ðüëç êáé ôçí êáôçãïñßá ôùí âéâëßùí. Ôï Ó÷Þìá 20.6 áðåéêïíßæåé
ôç ìïñöÞ ôïõ êýâïõ. Ç áíÜãíùóç åíüò êýâïõ ãßíåôáé ðïëý áðëÜ. Ãéá ðáñÜäåéãìá,
ç ôéìÞ ðïõ âñßóêåôáé óå êýêëï äßíåé ôéò ðùëÞóåéò âéâëßùí ÌåôáöõóéêÞò óôçí ðüëç
ôçò Èåóóáëïíßêçò, ãéá ôï 1ï ôñßìçíï ôïõ 2002.
Π ί ν α κ α ς Π ί ν α κ α ς Π ί ν α κ α ς Π ί ν α κ α ς Π ί ν α κ α ς
δ ι ά σ τ α σ η ς δ ι ά σ τ α σ η ς δ ι ά σ τ α σ η ς δ ι ά σ τ α σ η ς δ ι ά σ τ α σ η ς
Π ί ν α κ α ς Π ί ν α κ α ς
ν ό τ ω ν ν ό τ ω ν
γ ε γ ο γ ε γ ο
Π ί ν α κ α ς Π ί ν α κ α ς Π ί ν α κ α ς Π ί ν α κ α ς Π ί ν α κ α ς
δ ι ά σ τ α σ η ς δ ι ά σ τ α σ η ς δ ι ά σ τ α σ η ς δ ι ά σ τ α σ η ς δ ι ά σ τ α σ η ς
( α ) α σ τ έ ρ α ς ( β ) χ ι ν ν ι φ ά δ α
ο ο
Π ί ν α κ α ς Π ί ν α κ α ς
Π ί ν α κ α ς Π ί ν α κ α ς
δ ι ά σ τ α σ η ς δ ι ά σ τ α σ η ς
Π ί ν α κ α ς
ν ό τ ω ν ν ό τ ω ν
γ ε γ ο γ ε γ ο
δ ι ά σ τ α σ η ς
A B
Π ί ν α κ α ς Π ί ν α κ α ς
δ ι ά σ τ α σ η ς δ ι ά σ τ α σ η ς
( ) α σ τ ρ ι σ ό ς
γ ε
(fact table) êáé Ýíá óýíïëï ìéêñüôåñùí ðéíÜêùí ðïõ êáëïýíôáé ðßíáêåò
äéáóôÜóåùí (dimension tables).
Καβάλα Καβάλα
50 200
Πάτρα 100 Πάτρα 500
100 100 100 100 100 100 100 100
Αθήνα 300 Αθήνα 700
100 100 100 100 Θεσσαλονίκη 100 100 100 100
Θεσσαλονίκη
100 100100100100100100 100 100 100100100100100100 100
1ο τρίµηνο 200 200100300100250100 100 1ο εξάµηνο 400 300100400100350100 100
100 100100100100100100 100 100 100100100100100
2ο τρίµηνο 200 100100100100100100 100 2ο εξάµηνο 400 200100200100200
100 100100100100100100 100
3ο τρίµηνο 100 0 100100100100100 100 Ιστορία Μεταφυσική
100 100 100 100 Λογοτεχνία Πληροφορική
4ο τρίµηνο 300 200 100 100 R O L L
U P σ
τ ο
ρ ό ν ο α π ό
σ ε
20
Λογοτεχνία Πληροφορική ε ξ
ά
η ν α
Πάτρα 50
100 100 100 100
Αθήνα 200
100 100 100 100
Θεσσαλονίκη
100 100100100100100100 100
D R I L L D O W N τ ο
Ιανουάριος 50 100100 50 100 50 100 100
100 100100100100100100 100
σ
D I C E
ρ ό ν ο α π ό τ ρ ί
η ν α
S L I C E γ ι α τ ο
1 ο τ ρ ί η ν ο
1 ο κ α ι 2 ο τ ρ ί
η ν ο
σ ε
ή ν
ε ς
Φεβρουάριος 50 100100150100120100 100
Θ ε σ σ
α λ ο ν ί κ η , Κ α β ά λ α
σ
ι κ ή , Π λ η ρ ο φ ο ρ ι κ ή
Ιστορία Μεταφυσική
Λογοτεχνία Πληροφορική
Π α λ υ ν δ ρ ό
η σ η
Λ ε ι τ ο υ ρ γ ί ε ς Π ρ ό β λ ε ψ η ς
Α ν ά λ υ σ η Χ ρ ο ν ο σ ε ι ρ ώ ν
Π ρ ό β λ ε ψ η
Ε ξ ό ρ υ ξ η ε δ ο
έ ν ω ν
Ο
α δ ο π ο ί η σ η
Π ε ρ ί λ η ψ η
Λ ε ι τ ο υ ρ γ ί ε ς Π ε ρ ι γ ρ α φ ή ς
Κ α ν ό ν ε ς Σ υ σ χ έ τ ι σ η ς
Α ν α κ ά λ υ ψ η Α κ ο λ ο υ θ ί α ς
Ç ðëÞñçò ìåëÝôç ôùí ëåéôïõñãéþí áõôþí åßíáé ðÝñá áðü ôïõò óêïðïýò ôïõ
âéâëßïõ áõôïý. Ï åíäéáöåñüìåíïò áíáãíþóôçò ìðïñåß íá óõìâïõëåõèåß åîåéäé-
êåõìÝíá âéâëßá [Han 2001, Dunham 2003] óôïí ôïìÝá ôçò åîüñõîçò äåäïìÝíùí.
Åäþ äßíïõìå Ýìöáóç óôéò ìåñéêÝò ëåéôïõñãßåò, ç áðïôåëåóìáôéêüôçôá êáé áðü-
516 ÊåöÜëáéï 20. ÕðïóôÞñéîç Óýã÷ñïíùí Åöáñìïãþí
äïóç ôùí ïðïßùí Ý÷ïõí áðáó÷ïëÞóåé óå ìåãÜëï âáèìü ôïõò åñåõíçôÝò ôá ôåëåõ-
ôáßá ÷ñüíéá:
20.4.1 Ïìáäïðïßçóç
¸óôù X = {x1 , x2 , ..., xn } Ýíá óýíïëï äåäïìÝíùí áðü n óôïé÷åßá. Ç ïìáäïðïß-
çóç áöïñÜ óôïí ðñïóäéïñéóìü åíüò áñéèìïý k õðïóõíüëùí Y1 , ..., Yk ôá ïðïßá
íá áðïôåëïýí äéáìÝñéóç ôïõ óõíüëïõ X. Ôá óôïé÷åßá åíüò õðïóõíüëïõ ðñÝðåé
íá åßíáé üóï ãßíåôáé ðáñüìïéá (similar) ìåôáîý ôïõò. Ç Ýííïéá ôçò ïìïéüôçôáò
åêöñÜæåôáé óõíÞèùò ìå ìßá ìáèçìáôéêÞ åîßóùóç äýï ìåôáâëçôþí ç ïðïßá åðé-
óôñÝöåé ôï âáèìü ïìïéüôçôáò ôùí äýï óôïé÷åßùí. ÅðåéäÞ ç Ýííïéá ôçò ïìïéüôçôáò
åßíáé áñêåôÜ ó÷åôéêÞ êáé ìðïñåß íá åîáñôÜôáé áðü ôï åßäïò ôçò åöáñìïãÞò, Ý÷ïõí
ðñïôáèåß óôç âéâëéïãñáößá áñêåôïß áëãüñéèìïé ïìáäïðïßçóçò ìå äéáöïñåôéêÜ
÷áñáêôçñéóôéêÜ, áðïôåëåóìáôéêüôçôá, êáé ôá÷ýôçôá åêôÝëåóçò.
Ç ïìáäïðïßçóç ÷ñçóéìïðïéåßôáé óå ðïëëïýò ôïìåßò ôçò åðéóôÞìçò, üðùò éá-
ôñéêÞ, âéïëïãßá, ïéêïíïìéêÝò åðéóôÞìåò. Ìßá áðü ôéò ðñþôåò åöáñìïãÝò ôçò
ïìáäïðïßçóçò Þôáí óôç âéïëïãßá ãéá ôçí ôáîéíüìçóç ôùí äéáöüñùí åéäþí óôïí
ðëáíÞôç. ×ñçóéìïðïéåßôáé åõñýôáôá óå ÂÜóåéò ÄåäïìÝíùí êåéìÝíùí ãéá ôïí
ðñïóäéïñéóìü êåéìÝíùí ìå ðáñüìïéï ðåñéå÷üìåíï, óôéò ÷ùñéêÝò ÂÜóåéò ÄåäïìÝ-
íùí ãéá ôçí ïìáäïðïßçóç óçìåßùí Þ ðåñéï÷þí åíüò ÷Üñôç, åíþ ðñüóöáôá Ý÷åé
÷ñçóéìïðïéçèåß êáé óôïõò åîõðçñÝôåò éóôïý (web servers) ãéá ôçí áíÜëõóç ôïõ
çìåñïëïãßïõ (log) êáé ôçí åîáãùãÞ óôáôéóôéêþí óôïé÷åßùí ãéá ôéò ðñïóðåëÜóåéò.
¸óôù üôé êÜèå êïõêßäá ôïõ Ó÷Þìáôïò 20.10á áíáðáñéóôÜ ôç èÝóç ìßáò ðüëçò
óôï ÷Üñôç. Åöáñìüæïíôáò ïìáäïðïßçóç óôá äåäïìÝíá áõôÜ ðáßñíïõìå ðÝíôå
αποµονωµένο σηµείο
óõíïëéêÜ ïìÜäåò, ðïõ áðåéêïíßæïíôáé óôï Ó÷Þìá 20.10â. O áíèñþðéíïò íïõò åßíáé
ðïëý åýêïëï íá áíôéëçöèåß ôçí ýðáñîç êÜðïéáò ó÷Ýóçò ìåôáîý ôùí äåäïìÝíùí,
êáé Ýôóé ç ïìáäïðïßçóç ôïõ ó÷Þìáôïò öáßíåôáé ðïëý öõóéêÞ. Ùóôüóï, ç áõôüìáôç
ïìáäïðïßçóç áðü Ýíá õðïëïãéóôéêü óýóôçìá áðáéôåß ôïí ïñéóìü óõãêåêñéìÝíùí
êñéôçñßùí ðïõ ðñÝðåé íá ðëçñïýíôáé áðü ôéò ïìÜäåò äåäïìÝíùí.
Ç åöáñìïãÞ ôçò ïìáäïðïßçóçò ðáñïõóéÜæåé ïñéóìÝíåò äõóêïëßåò ðïõ ðñÝðåé
íá îåðåñáóèïýí áðü ôéò ìåèüäïõò ïìáäïðïßçóçò. Ïé äõóêïëßåò áõôÝò ïöåßëïíôáé
óôïõò åîÞò ðáñÜãïíôåò:
ôùí äåäïìÝíùí. Óôç óõíÝ÷åéá åöáñìüæåôáé ìßá ôå÷íéêÞ âåëôßùóçò ôùí ïìÜ-
äùí ìå áðïôÝëåóìá êÜðïéá óôïé÷åßá íá áëëÜîïõí ïìÜäá. Ç äéáäéêáóßá
óõíå÷ßæåôáé ìÝ÷ñé íá ìçí åßíáé åöéêôÞ ðåñáéôÝñù âåëôßùóç. Ïé ðëÝïí äéá-
äåäïìÝíïé áëãüñéèìïé äéáìÝñéóçò åßíáé ïé k-means [MacQueen 1967] êáé
k-medoids [Kaufman 1990]. Âáóéêü ìåéïíÝêôçìá ôùí ìåèüäùí áõôþí åßíáé
üôé äåí Ý÷ïõí êáëÞ áðüäïóç ãéá ìåãÜëï ðëÞèïò äåäïìÝíùí êáé åðéðëÝïí ïé
ïìÜäåò ðïõ ðáñÜãïíôáé ôåßíïõí íá Ý÷ïõí óöáéñéêü ó÷Þìá.
α ρ χ ι κ ό σ ύ ν ο λ ο δ ε δ ο έ ν ω ν α π ο τ έ λ ε σ α ε θ ό δ ω ν δ ι α έ ρ ι σ η ς κ α ι ι ε ρ α ρ χ ι κ ώ ν α π ο τ έ λ ε σ α ε θ ό δ ω ν π υ κ ν ό τ η τ α ς
ÁãïñÝò Ðñïúüíôá
a1 øùìß, ìáñìåëÜäá, âïýôõñï
a2 øùìß, âïýôõñï
a3 øùìß, ãÜëá, âïýôõñï
a4 ìðýñá, øùìß
a5 ìðýñá, ãÜëá
ðñïúüíôùí ðáñïõóéÜæåôáé óôïí Ðßíáêá 20.3. Åö’ üóïí Ý÷ïõìå ðÝíôå ðñïúüíôá, ï
áñéèìüò ôùí ìç êåíþí õðïóõíüëùí åßíáé 25 − 1 = 31.
Õðïóýíïëï Ðñïúüíôùí ÕðïóôÞñéîç Õðïóýíïëï Ðñïúüíôùí ÕðïóôÞñéîç
{ìðýñá} 40 {ìðýñá,øùìß,ãÜëá} 0
{øùìß} 80 {ìðýñá,øùìß,âïýôõñï} 0
{ìáñìåëÜäá} 20 {ìðýñá,ìáñìåëÜäá,ãÜëá} 0
{ãÜëá} 40 {ìðýñá,ìáñìåëÜäá,âïýôõñï} 0
{âïýôõñï} 60 {ìðýñá,ãÜëá,âïýôõñï} 0
{ìðýñá,øùìß} 20 {øùìß,ìáñìåëÜäá,ãÜëá} 0
{ìðýñá,ìáñìåëÜäá} 0 {øùìß,ìáñìåëÜäá,âïýôõñï} 20
{ìðýñá,ãÜëá} 20 {øùìß,ãÜëá,âïýôõñï} 20
{ìðýñá,âïýôõñï} 0 {ìáñìåëÜäá,ãÜëá,âïýôõñï} 0
{øùìß,ìáñìåëÜäá} 20 {ìðýñá,øùìß,ìáñìåëÜäá,ãÜëá} 0
{øùìß,ãÜëá} 20 {ìðýñá,øùìß,ìáñìåëÜäá,âïýôõñï} 0
{øùìß,âïýôõñï} 60 {ìðýñá,øùìß,ãÜëá,âïýôõñï} 0
{ìáñìåëÜäá,ãÜëá} 0 {ìðýñá,ìáñìåëÜäá,ãÜëá,âïýôõñï} 0
{ìáñìåëÜäá,âïýôõñï} 20 {øùìß,ìáñìåëÜäá,ãÜëá,âïýôõñï} 0
{ãÜëá,âïýôõñï} 20 {ìðýñá,øùìß,ìáñìåëÜäá,ãÜëá,âïýôõñï} 0
{ìðýñá,øùìß,ìáñìåëÜäá} 0
ôïõ óõíüëïõ X. Ïé äýï áõôÝò éäéüôçôåò åßíáé ðïëý óçìáíôéêÝò óôïí ðñïóäéï-
ñéóìü ÷ñÞóéìùí êáíüíùí óõó÷Ýôéóçò ïé ïðïßïé ðåñéÝ÷ïõí ìç ôåôñéììÝíç ãíþóç.
Óôïí Ðßíáêá 20.4 äßíïíôáé ìåñéêïß êáíüíåò óõó÷Ýôéóçò ìå ôéò áíôßóôïé÷åò ôéìÝò
õðïóôÞñéîçò êáé âåâáéüôçôáò.
20.5 Óýíïøç
Ç áíÜãêç ãéá åíáëëáêôéêÝò ìåèüäïõò áðïèÞêåõóçò êáé äéá÷åßñéóçò äåäïìÝíùí
ðñïÝêõøå áðü ôéò áðáéôÞóåéò ôùí óýã÷ñïíùí åöáñìïãþí ðïõ ÷áñáêôçñßæïíôáé
áðü óýíèåôá äåäïìÝíá êáé ðïëýðëïêåò ëåéôïõñãßåò. Óôï êåöÜëáéï áõôü ðáñïõ-
óéÜóèçêáí ìåñéêÜ ðáñáäåßãìáôá ôÝôïéùí åöáñìïãþí, ãéá ôçí õðïóôÞñéîç ôùí
ïðïßùí ôï ÓÄÂÄ ðñÝðåé íá åíéó÷õèåß óôïí ôïìÝá ôçò áðïèÞêåõóçò êáé äéá÷åßñé-
óçò äåäïìÝíùí. Ðéï óõãêåêñéìÝíá åîåôÜóáìå:
522 ÊåöÜëáéï 20. ÕðïóôÞñéîç Óýã÷ñïíùí Åöáñìïãþí
20.4. Ìßá åíáëëáêôéêÞ ëýóç ãéá ôçí ïñãÜíùóç ðïëõäéÜóôáôùí äåäïìÝíùí åßíáé
íá ÷ñçóéìïðïéÞóïõìå Ýíá B-äÝíäñï ãéá êÜèå äéÜóôáóç. Ó÷ïëéÜóôå ôá ðëåïíå-
êôÞìáôá êáé ôá ìåéïíåêôÞìáôá áõôïý ôïõ ôñüðïõ ïñãÜíùóçò.
20.6. ÐïéÜ åßíáé ôá âáóéêÜ ÷áñáêôçñéóôéêÜ ìßáò áðïèÞêçò äåäïìÝíùí; Äþóôå ôéò
âáóéêÝò äéáöïñÝò ìåôáîý OLTP êáé OLAP.
525
526 ÊåöÜëáéï 21. ÅéäéêÜ ÈÝìáôá ôïõ MSSQLS-2000
Ç T-SQL äéáèÝôåé ôçí åíôïëÞ CREATE PROCEDURE ãéá ôçí êáôáóêåõÞ ìßáò
áðïèçêåõìÝíçò äéáäéêáóßáò. Ç ãåíéêÞ ìïñöÞ ôçò åíôïëÞò Ý÷åé ùò åîÞò:
Ç ÷ñÞóç ôçò åðéëïãÞò RECOMPILE áêõñþíåé ìßá ðïëý ÷ñÞóéìç éäéüôçôá ôùí
áðïèçêåõìÝíùí äéáäéêáóéþí. Ôï ðëÜíï åêôÝëåóçò ãéá ìßá áðïèçêåõìÝíç äéáäé-
êáóßá äçìéïõñãåßôáé ìßá öïñÜ êáé óôç óõíÝ÷åéá åêôåëåßôáé ðïëëÝò öïñÝò ÷ùñßò åê
íÝïõ ìåôáãëþôôéóç. Ìå ôçí åðéëïãÞ RECOMPILE áíáãêÜæïõìå ôïí MSSQLS-2000
íá ìåôáãëùôôßæåé ôç äéáäéêáóßá êÜèå öïñÜ ðïõ êáëåßôáé. Ç óõãêåêñéìÝíç åðé-
ëïãÞ ðñÝðåé íá ÷ñçóéìïðïéåßôáé ìå ðïëëÞ ðñïóï÷Þ êáé ìüíïí üôáí ôá áíôéêåßìåíá
ôçò ÂÜóçò ÄåäïìÝíùí ôñïðïðïéïýíôáé áñêåôÜ óõ÷íÜ. Ç åðéëïãÞ ENCRYPTION
äçëþíåé üôé ï êþäéêáò ôçò áðïèçêåõìÝíçò äéáäéêáóßáò èá áðïèçêåõèåß êùäéêï-
ðïéçìÝíïò óôç ÂÜóç ÄåäïìÝíùí, þóôå íá Ý÷ïõìå áðüêñõøç ôïõ ðçãáßïõ êþäéêá
áðü ìç åîïõóéïäïôçìÝíïõò ÷ñÞóôåò.
Ïé äéáäéêáóßåò ðïõ äçìéïõñãïýíôáé ìå ôçí åðéëïãÞ FOR REPLICATION ÷ñç-
óéìïðïéïýíôáé ìüíï êáôÜ ôç ÷ñÞóç ðïëëáðëþí áíôéãñÜöùí äåäïìÝíùí (replicated
data). Óôéò äéáäéêáóßåò áõôÝò äåí ìðïñåß íá ÷ñçóéìïðïéçèåß ç åðéëïãÞ WITH RE-
COMPILE.
Ôï óýíïëï ôùí ðñïôÜóåùí áðïôåëåß ôï óþìá ôçò äéáäéêáóßáò, ôï ïðïßï ìðïñåß
íá ðåñéëáìâÜíåé åíôïëÝò T-SQL ãéá ôç äéá÷åßñéóç äåäïìÝíùí. Ç T-SQL, åêôüò
áðü ôéò åíôïëÝò ïñéóìïý êáé ÷åéñéóìïý äåäïìÝíùí ðïõ åîåôÜóáìå óå ðñïçãïý-
ìåíï êåöÜëáéï, äéáèÝôåé êáé ìßá óåéñÜ åíôïëþí êáé äõíáôïôÞôùí ðïõ ìåôáôñÝðïõí
ôç ãëþóóá óå äéåñãáóéáêÞ. Ãéá ðáñÜäåéãìá, õðÜñ÷åé ç äõíáôüôçôá ïñéóìïý ìå-
ôáâëçôþí, áëëáãÞò ôçò ñïÞò ôïõ ðñïãñÜììáôïò, åíôïëÝò âñü÷ïõ êáé ãåíéêÜ üëá
åêåßíá ôá óôïé÷åßá ðïõ äéåõêïëýíïõí ôçí áíÜðôõîç åöáñìïãþí. Ïé äõíáôüôçôåò
áõôÝò ìåôáôñÝðïõí ôçí T-SQL óå ìßá ãëþóóá ðñïãñáììáôéóìïý, ç ïðïßá üìùò
óå êáìßá ðåñßðôùóç äåí ìðïñåß íá óõãêñéèåß óå éó÷ý ìå ôç C++ Þ ôçí Java.
Ùóôüóï, êáëýðôïíôáé ïé áíÜãêåò äéá÷åßñéóçò äåäïìÝíùí êáé ìðïñïýìå íá áíá-
ðôýîïõìå ðïëý éó÷õñÝò åöáñìïãÝò ìå óçìáíôéêÞ ëåéôïõñãéêüôçôá.
¼ôáí äçìéïõñãåßôáé ìßá áðïèçêåõìÝíç äéáäéêáóßá ìðïñåß íá ïñéóèåß ìßá ðñï-
áéñåôéêÞ ëßóôá ðáñáìÝôñùí. Ç äéáäéêáóßá äÝ÷åôáé ôá áíôßóôïé÷á ïñßóìáôá êÜèå
öïñÜ ðïõ êáëåßôáé. Èåùñåßóôå ãéá ðáñÜäåéãìá ôç äéáäéêáóßá Áýîçóç Ìéóèïý, ç
ïðïßá äÝ÷åôáé ùò ðáñÜìåôñï ôçí åðß ôïéò åêáôü áýîçóç ðïõ èá äïèåß óå üëïõò
ôïõò õðáëëÞëïõò ìßáò åôáéñåßáò ôá óôïé÷åßá ôùí ïðïßùí åßíáé áðïèçêåõìÝíá óôïí
ðßíáêá ÕðÜëëçëïò. Ç êáôáóêåõÞ ôçò äéáäéêáóßáò Ý÷åé ùò åîÞò:
CREATE PROCEDURE Áýîçóç_Ìéóèïý} (@ðïóïóôü INT=5)
AS
UPDATE ÕðÜëëçëïò
SET ìéóèüò=ìéóèüò + ìéóèüò*@ðïóïóôü/100;
¸óôù üôé èÝëïõìå íá áõîÞóïõìå ôïõò ìéóèïýò ôùí õðáëëÞëùí óå ðïóïóôü 10%.
Áõôü ìðïñåß íá ãßíåé ìå ôçí åîÞò åíôïëÞ:
RETURN
(SELECT COUNT(*)
FROM Ôáéíßá
WHERE DVD>=@áñéèìüò_DVD)
END;
21.3 Óêáíäáëéóìïß
Ï MSSQLS-2000 õðïóôçñßæåé ôïí ïñéóìü óêáíäáëéóìþí ðïõ áíáöÝñèçêáí óôï
ÊåöÜëáéï 18 ùò ÷áñáêôçñéóôéêü ôïõ ðñïôýðïõ SQL3. Õðåíèõìßæåôáé üôé ïé óêáí-
äáëéóìïß ÷ñçóéìïðïéïýíôáé êõñßùò ãéá:
Ç åðéëïãÞ AFTER ïäçãåß óôçí åêôÝëåóç ôïõ óêáíäáëéóìïý ìåôÜ ôçí åéóáãùãÞ,
äéáãñáöÞ Þ åíçìÝñùóç ôùí äåäïìÝíùí. Ç åðéëïãÞ INSTEAD OF åðéâÜëëåé ôçí
åêôÝëåóç ôïõ óêáíäáëéóìïý ÷ùñßò ôçí ïëïêëÞñùóç ôçò åéóáãùãÞò, äéáãñáöÞò
Þ åíçìÝñùóçò. Ç åðéëïãÞ AFTER ìðïñåß íá ÷ñçóéìïðïéçèåß ìüíï óå ðßíáêåò,
åíþ ç åðéëïãÞ INSTEAD OF ìðïñåß íá ÷ñçóéìïðïéçèåß óå ðßíáêåò êáé üøåéò. Ç
öñÜóç IF UPDATE ÷ñçóéìïðïéåßôáé ùò ìßá åðéðñüóèåôç óõíèÞêç óêáíäáëéóìïý
áí Ýíáò óêáíäáëéóìüò ðïõ áöïñÜ óå åéóáãùãÞ Þ åíçìÝñùóç êáèïñßæåôáé ãéá ìßá
óõãêåêñéìÝíç óôÞëç Þ óôÞëåò ôïõ ðßíáêá. Ïé öñÜóåéò IF UPDATE ìðïñïýí íá
óõíäõáóèïýí ìå ôïõò ëïãéêïýò ôåëåóôÝò AND êáé OR. Ç åðéëïãÞ WITH ENCRYP-
TION Ý÷åé ôï ßäéï áðïôÝëåóìá üðùò êáé óôçí ðåñßðôùóç ôùí áðïèçêåõìÝíùí
äéáäéêáóéþí êáé ôùí óõíáñôÞóåùí ïñéæüìåíùí áðü ôï ÷ñÞóôç êáé åðéâÜëëåé êù-
äéêïðïßçóç óôïí ðçãáßï êþäéêá ôïõ óêáíäáëéóìïý.
¼ôáí äçìéïõñãåßôáé Ýíáò óêáíäáëéóìüò ðñÝðåé íá äçëùèåß áí áíáöåñüìáóôå
óôçí ôéìÞ ôçò óôÞëçò ðñéí Þ ìåôÜ ôçí åðßäñáóç ôïõ óêáíäáëéóìïý. Ãéá ôï ëüãï
áõôü ÷ñçóéìïðïéïýíôáé äýï åéêïíéêïß ðßíáêåò ìå ôá åéäéêÜ ïíüìáôá inserted êáé
deleted. Ï ðßíáêáò deleted ðåñéÝ÷åé áíôßãñáöá ôùí ãñáììþí ðïõ äéáãñÜöïíôáé
áðü ôïí ðßíáêá ðïõ åöáñìüæåôáé ï óêáíäáëéóìüò. Ðáñüìïéá, ï ðßíáêáò inserted
ðåñéÝ÷åé áíôßãñáöá ôùí ãñáììþí ðïõ åéóÜãïíôáé óôïí ðßíáêá. Áí ï óêáíäáëé-
óìüò åíåñãïðïéåßôáé áðü ìßá ðñüôáóç UPDATE, ôüôå ï ðßíáêáò deleted ðåñéÝ÷åé ôá
äåäïìÝíá ðñéí áðü ôçí ôñïðïðïßçóç ôïõ ðßíáêá, åíþ ï ðßíáêáò inserted ðåñéÝ÷åé
ôá äåäïìÝíá ìåôÜ ôçí ôñïðïðïßçóç ôïõ ðßíáêá.
Ï íÝïò ðßíáêáò Ôáéíßá ðïõ ðñïêýðôåé ðåñéÝ÷åé ôñåéò íÝåò óôÞëåò, åê ôùí ïðïßùí
ç ìßá åßíáé ôýðïõ TEXT êáé ïé Üëëåò äýï ôýðïõ IMAGE.
Ï MSSQLS-2000 äéáèÝôåé åéäéêÝò óõíáñôÞóåéò êáé äéáäéêáóßåò ãéá ôï ÷åéñéóìü
äåäïìÝíùí ôýðïõ TEXT, NTEXT êáé IMAGE, ç ðåñéãñáöÞ ôùí ïðïßùí åßíáé Ýîù
áðü ôïõò óêïðïýò ôïõ âéâëßïõ áõôïý. Ï åíäéáöåñüìåíïò áíáãíþóôçò ìðïñåß
íá óõìâïõëåõèåß åîåéäéêåõìÝíá âéâëßá ãéá ôïí MSSQLS-2000 ãéá ðåñéóóüôåñåò
ëåðôïìÝñåéåò.
21.5.1 Áñ÷éôåêôïíéêÞ
Ôï MAS áêïëïõèåß ôçí áñ÷éôåêôïíéêÞ ðåëÜôç/åîõðçñÝôç (client/server) êáé åðé-
ôñÝðåé óå áíåîÜñôçôåò åöáñìïãÝò íá ÷ñçóéìïðïéïýí ôçò õðçñåóßåò áíÜëõóçò äå-
äïìÝíùí. Óôï Ó÷Þìá 21.1 ðáñïõóéÜæåôáé ç áñ÷éôåêôïíéêÞ ðåëÜôç/åîõðçñÝôç ôïõ
MAS. Ôï MAS ðåñéëáìâÜíåé ôá õðïóõóôÞìáôá Analysis Server êáé PivotTable. Ï
Analysis Server åßíáé õðåýèõíïò ãéá ôçí êáôáóêåõÞ êáé äéá÷åßñéóç ðïëõäéÜóôáôùí
êýâùí ãéá ëåéôïõñãßåò OLAP. Åðßóçò, ôñïöïäïôåß ìå ðïëõäéÜóôáôá äåäïìÝíá ôï
õðïóýóôçìá PivotTable ðïõ áíáëáìâÜíåé ôç ìåôáöïñÜ ôùí äåäïìÝíùí ðñïò ôïõò
ðåëÜôåò (clients) ìÝóù ôùí äéåðáöþí ADO Multidimensional (ADO MD) êáé
OLE DB.
Πελάτης
MOLAP
OLE DB
• Êåëß (cell) - Åßíáé ôï ôìÞìá ìßáò ìÝôñçóçò ðïõ âñßóêåôáé óôçí ôïìÞ ôùí
äéáóôÜóåùí. Óå êÜèå êåëß áðïèçêåýåôáé ìßá ìüíï ôéìÞ. Ãéá ðáñÜäåéãìá
Ýíá óõãêåêñéìÝíï êåëß ìðïñåß íá ðåñéÝ÷åé ôï ðëÞèïò ôùí ôåìá÷ßùí ðïõ
ðùëÞèçêáí (ìÝôñçóç) ôï ôåëåõôáßï ôñßìçíï ôïõ 2000 (äéÜóôáóç 1) óôçí
ðüëç ôçò Èåóóáëïíßêçò (äéÜóôáóç 2) áðü ôï õðïêáôÜóôçìá × (äéÜóôáóç
3).
• Åéêïíéêüò Êýâïò (virtual cube) - ¸íáò åéêïíéêüò êýâïò äåí Ý÷åé öõóéêÞ
õðüóôáóç êáé óôçñßæåôáé óå Ýíáí Þ ðåñéóóüôåñïõò êáíïíéêïýò êýâïõò. Ç
ÓõóôÞìáôá ÂÜóåùí ÄåäïìÝíùí: Èåùñßá êáé ÐñáêôéêÞ ÅöáñìïãÞ 535
Ýííïéá ôïõ åéêïíéêïý êýâïõ åßíáé áíôßóôïé÷ç ìå áõôÞí ôçò üøçò óå Ýíá
ó÷åóéáêü ÓÄÂÄ.
÷ñçóéìïðïéçèåß ãéá ôçí ðñüâëåøç ôéìþí íÝùí äåäïìÝíùí. Ç ìÝèïäïò ôçò ïìáäï-
ðïßçóçò óôçñßæåôáé óôç ìÝèïäï ðëçóéÝóôåñùí ãåéôüíùí (nearest neighbors). Åã-
ãñáöÝò ðïõ Ý÷ïõí ðáñüìïéá ÷áñáêôçñéóôéêÜ (åðïìÝíùò âñßóêïíôáé êïíôÜ óôïí
ðïëõäéÜóôáôï ÷þñï) ó÷çìáôßæïõí ïìÜäåò.
Ïé äýï ìÝèïäïé åîüñõîçò äåäïìÝíùí ðïõ õðïóôçñßæïíôáé áðü ôï MAS äß-
íïõí ôç äõíáôüôçôá ãéá áíáêÜëõøç ÷ñÞóéìçò ðëçñïöïñßáò ðïõ äåí åßíáé êáèüëïõ
ðñïöáíÞò êáé äåí åßíáé äéáèÝóéìç ìå ôéò ðáñáäïóéáêÝò ìåèüäïõò åðåîåñãáóßáò
äåäïìÝíùí.
21.6 Óýíïøç
Ï MSSQLS-2000 åßíáé ÓÄÂÄ ðïõ õðïóôçñßæåé ðëÞñùò ôï ó÷åóéáêü ìïíôÝëï äå-
äïìÝíùí êáé åðéðëÝïí ðåñéëáìâÜíåé ðïëëÝò äõíáôüôçôåò ãéá ôçí õðïóôÞñéîç áðáé-
ôçôéêþí åöáñìïãþí. Ç õðïóôÞñéîç áðïèçêåõìÝíùí äéáäéêáóéþí êáé óõíáñôÞ-
óåùí ïñéæüìåíùí áðü ôï ÷ñÞóôç ðñïóöÝñåé ìåãÜëç åõåëéîßá êáé ëåéôïõñãéêüôçôá.
Ìå ôï ìç÷áíéóìü ôùí óêáíäáëéóìþí ìðïñïýìå íá åëÝã÷ïõìå ôéò åéóáãùãÝò, äéá-
ãñáöÝò êáé åíçìåñþóåéò äåäïìÝíùí êáé íá åêôåëïýìå åðéðëÝïí ëåéôïõñãßåò.
Ç õðïóôÞñéîç ôùí íÝùí ôýðùí äåäïìÝíùí TEXT, NTEXT êáé IMAGE åðéôñÝðåé
538 ÊåöÜëáéï 21. ÅéäéêÜ ÈÝìáôá ôïõ MSSQLS-2000
21.2. Óôç ÂÜóç ÄåäïìÝíùí movies-db êáôáóêåõÜóôå Ýíá íÝï ðßíáêá Ìç ÄéáèÝ-
óéìç Ôáéíßá, ï ïðïßïò Ý÷åé ùò ÷áñáêôçñéóôéêÜ ôïí êùäéêü êáé ôï ôßôëï ôçò ôáéíßáò.
Óôïí ðßíáêá áõôü áðïèçêåýïíôáé ïé ôáéíßåò ôùí ïðïßùí ç äéáèåóéìüôçôá óå VHS
êáé DVD åßíáé 0. Íá ó÷åäéáóèåß Ýíáò óêáíäáëéóìüò Ýôóé þóôå ìåôÜ ôçí åíçìÝ-
ñùóç ôùí ÷áñáêôçñéóôéêþí VHS Þ DVD ôïõ ðßíáêá Ôáéíßá íá åëÝã÷åôáé áí êáé
ôá äýï ðåäßá åßíáé 0. Áí éó÷ýåé ç óõíèÞêç, ôüôå íá åéóÜãïíôáé ôá ÷áñáêôçñéóôéêÜ
ôçò ôáéíßáò óôïí ðßíáêá Ìç ÄéáèÝóéìç Ôáéíßá.
2000.
[Agrawal 1994] R. Agrawal and R. Srikant: "Fast Algorithms for Mining Asso-
ciation Rules", Proceedings 20th International Conference on Very Large Data
Bases, pp.487-499, 1994.
[Aho 1979b] A. Aho, C. Beeri and J. D. Ullman: "The Theory of Joins in Re-
lational Databases", ACM Transactions on Database Systems, Vol.4, No.3,
pp.297-314, 1979.
[Ankerst 1999] M. Ankerst, C. Elsen, M. Ester and H.-P. Kriegel: "Visual Classifi-
cation: an Interactive Approach to Decision Tree Construction", Proceedings
International Conference on Knowledge Discovery and Data Mining, pp.392-396,
1999.
[ANSI 1989] ANSI: "Database Language SQL with Integrity Enhancement", ANSI
X3,135-1989, ANSI, New York, 1989. Also as ISO/IEC Document 9075:1989.
541
542 Âéâëéïãñáößá
[ANSI 1992] ANSI: "Database Language SQL", ANSI X3,135-1992, ANSI, New
York, 1992. Also as ISO/IEC Document 9075:1992.
[Bell 1974] D.E. Bell and L.J. La Padulla: "Secure Computer Systems: Mathemat-
ical Foundations and Model", MITRE Technical Report M74-244, 1974.
[Cattell 2000] R.G.G. Cattell (ed.): "The Object Database Standard: ODMG Re-
lease 3.0", Morgan Kaufmann, 2000.
Âéâëéïãñáößá 543
[Chen 1994] P.M. Chen, E.K. Lee, G.A. Gibson, R.H. Katz and D.A. Patterson:
"RAID: High-Performance, Reliable Secondary Storage", ACM Computing
Surveys, Vol.26, No.2, pp.145-185, 1994.
[Clark 1991] R. Clark, S. Holloway and W. List: "The Security, Audit and Control
of Databases", Avebury Technical Pub. Group, 1991.
[Codd 1970] E. F.Codd, "A Relational Model for Large Shared Databanks", Com-
munications of the ACM, Vol.13, No.6, pp.377-387, 1970.
[Codd 1972] E.F. Codd: "Further Normalization of the Data Base Relational
Model", in Data Base Systems (R. Rustin, ed.), Prentice-Hall, 1972.
[Codd 1979] E.F. Codd, Extending the Relational Model to Capture More Mean-
ing, ACM Transactions on Database Systems, Vol.4, No.4, pp.397-434, 1979.
[Connolly 2002] T.M. Connolly and C.E. Begg: "Database Systems: a Practical
Approach to Design, Implementation and Management", (3rd edition), Addison-
Wesley, 2002.
[Date 2003] C.J. Date: ‘‘An Introduction to Database Systems’’, Addison Wesley,
8th edition, 2003.
544 Âéâëéïãñáößá
[DBTG 1971] DBTG: "Report of the CODASYL Database Task Group", ACM,
April 1971.
[Dunham 2003] M.H. Dunham: "Data Mining, Introductory and Advanced Topics",
Prentice Hall, 2003.
[Dutka 1989] A.F. Dutka and H.H. Hanson: "Fundamentals of Data Normaliza-
tion", Addison-Wesley, 1989.
[Ester 1996] M. Ester, H.-P. Kriegel, J. Sander and X. Xu: "A Density-Based
Algorithm for Discovering Clusters in Large Spatial Databases", Proceedings
International Conference on Knowledge Discovery and Data Mining, pp.226-231,
1996.
Âéâëéïãñáößá 545
[Eswaran 1976] K.P. Eswaran, J.N. Gray, R.A. Lorie and I.L. Traiger: "The Notion
of Consistency and Predicate Locks in Database Systems", Communications
of the ACM, Vol.19, No.11, pp.624-633, 1976.
[Fagin 1977] R. Fagin: "Multivalued Dependencies and a New Normal Form for
Relational Databases", ACM Transactions on Database Systems, Vol.2, No.3,
pp.262-278, 1977.
[Fagin 1979] R. Fagin: "Normal Forms and Relational Database Operators", Pro-
ceedings ACM SIGMOD Conference, pp.153-160, 1979.
[Fagin 1981] R. Fagin: "A Normal Form for Relational Databases that is Based
on Domains and Keys", ACM Transactions on Database Systems, Vol.6, No.3,
pp.387-415, 1981.
[Fernandez 1981] E.B. Fernandez, R.C. Summers and C. Wood: "Database Secu-
rity and Integrity", Addison-Wesley, 1981.
[Fujitani 1984] L. Fujitani: "Laser Optical Disk: The Coming Revolution in On-
Line Storage", Communications of the ACM, Vol.27, No.6, pp.546-554, 1984.
[Guha 1998] S. Guha, R. Rastogi and K. Shim: "A Robust Clustering Algorithm
for Categorical Attributes", Proceedings IEEE International Conference on Data
Engineering, pp.512-521, 1990.
[Han 2001] J. Han and M. Kamber: "Data Mining, Concepts and Techniques", Mor-
gan Kaufmann, 2001.
546 Âéâëéïãñáößá
[Inmon 1996] W.H. Inmon: "Building the Data Warehouse", John Wiley, 1996.
[ISO 1999a] ISO: "Database Language SQL - Part 2: Foundation (ISO/IEC 9075-
2)", International Organization for Standardization, 1999.
[ISO 1999b] ISO: "Database Language SQL - Part 2: Persistent Stored Modules
(ISO/IEC 9075-4)", International Organization for Standardization, 1999.
[Kenville 1982] R.F. Kenville: "Optical Disk Data Storage", IEEE Computer,
Vol.15, No.7, pp.787-804, 1982.
[Knuth 1973] D.E. Knuth: "The Art of Computer Programming: Sorting and Search-
ing", Addison-Wesley, 1973.
[Larson 1978] P.A. Larson: "Dynamic Hashing", BIT, Vol.18, No.2, pp.184-201,
1978.
[Litwin 1980] W. Litwin: "Linear Hashing - A New Tool for File and Table Ad-
dressing", Proceedings 6th International Conference on Very Large Data Bases,
pp.212-223, 1980.
[Molina 2002] H.G. Molina, J.D. Ullman and J. Widom: ‘‘Database Systems: the
Complete Book’’, Prentice Hall, 2002.
[Natan 2005] R.B. Natan: ‘‘Implementing Database Security and Auditing’’, Digital
Press, 2005.
[O’Leary 1985] B.T. O’Leary and D.L. Kitts: "Optical Device for a Mass Storage
System", IEEE Computer, Vol.18, No.7, pp.24-32, 1985.
[Patterson 1988] D.A. Patterson, G. Gibson and R.H. Katz: "A Case for Redun-
dant Arrays of Inexpensive Disks (RAID)", Proceedings ACM SIGMOD Con-
ference, pp.109-116, 1988.
[Polk 1993] T.W. Polk and L.E. Bassham: "Security Issues in the Database Lan-
guage SQL", Technical Report NIST Special Publication 800-8, National In-
stitute of Standards and Technology, USA, 1993. ÄéáèÝóéìï óôç äéåýèõíóç:
http://www.secinf.net/uplarticle/14/sqlsec.ps
[Rankins 2003] R. Rankins, P. Bertucci and P. Jensen: "Microsoft SQL Server 2000
Unleashed", Sams Publishing, 2003.
[Rigaux 2002] P. Rigaux, M. Scholl and A. Voisard: "Spatial Databases with Appli-
cations to GIS", Morgan Kaufmann, 2002.
[Riordan 2000] R.M. Riordan: "Microsoft SQL Server 2000 Programming Step by
Step", Microsoft Corporation, 2000.
Âéâëéïãñáößá 549
[Rivest 1978] Rivest R., Shamir A. and Adleman L.: "A Method for Obtaining Dig-
ital Signatures and Public-Key Cryptosystems", Communications of the ACM,
Vol.21, No.2, pp.120-126, 1978.
[Rosenberg 1981] A.L. Rosenberg and L. Snyder: "Time and Space Optimality
in B-trees", ACM Transactions on Database Systems, Vol.6, No.1, pp.174-183,
1981.
[Rosenkrantz 1978] D.J. Rosenkrantz, R.E. Streams and P.M. Lewis II: "System
Level Concurrency Control for Distributed Database Systems", ACM Trans-
actions on Database Systems, Vol.3, No.2, pp.178-198, 1978.
[Teorey 1994] T.J. Teorey: "Database Modeling and Design: the Fundamental Prin-
ciples", 2nd edition, Morgan Kaufmann, 1994.
550 Âéâëéïãñáößá
[Tharp 1987] A.L. Tharp: "File Organization and Processing", John Wiley, 1988.
[Wong 1983] C.K. Wong: "Algorithmic Studies in Mass Storage Systems", Springer
Verlag, 1983.
[Zaniolo 1976] C. Zaniolo: "Analysis and Design of Relation Schemata for Database
Systems", Ph.D. Thesis, Department of Computer Science, University of Cal-
ifornia, Los Angeles, 1976.
551
552 ÅõñåôÞñéï