Cuprins
- CUPRINS 1
- 1 INTRODUCERE ÎN PERSISTENŢA RELAŢIONALĂ 3
- 1.1 CE ESTE PERSISTENŢA? 3
- 1.1.1 Baze de date relaţionale 3
- 1.1.2 Despre SQL 4
- 1.1.3 Persistenţa în aplicaţiile orientate obiect 4
- 1.2 MOTIVE ŞI SCOPURI 5
- 1.2.1 Reducerea efortului la dezvoltare 5
- 1.2.2 Producerea de cod optimizat 6
- 1.2.3 Persistenţă independentă de container 6
- 1.3 PROBLEME DES ÎNTÂLNITE 6
- 1.3.1 Probleme de granularitate 8
- 1.3.2 Probleme de subtipuri 9
- 1.3.3 Probleme de identitate 11
- 1.3.4 Probleme legate de asociere 12
- 1.3.5 Probleme legate de navigabilitatea în graf 14
- 1.3.6 Costul acestor probleme 15
- 1.4 MAPAREA OBIECTUAL RELAŢIONALĂ 16
- 1.4.1 Ce este ORM? 16
- 1.4.2 Nivele de calitate a ORM urilor 17
- 1.4.2.1 Pur relaţionale 17
- 1.4.2.2 Mapare obiectuală uşoară 17
- 1.4.2.3 Mapare obiectuală medie 17
- 1.4.2.4 Mapare obiectuală completă 18
- 1.4.3 Probleme generice 18
- 1.4.4 De ce ORM? 19
- 1.4.4.1 Productivitate 20
- 1.4.4.2 Mentenanţă 20
- 1.4.4.3 Performanţă 20
- 1.4.4.4 Independenţa de straturile inferioare 21
- 1.5 LUCRUL CU OBIECTE PERSISTENTE 21
- 1.5.1 Ciclul de viaţă al persistenţei 22
- 1.5.1.1 Obiecte transiente 23
- 1.5.1.2 Obiecte persistente 23
- 1.5.1.3 Obiecte detaşate 24
- 2 PERSISTENŢA RELAŢIONALĂ APLICATĂ 26
- 2.1 MANAGERUL DE PERSISTENŢĂ HIBERNATE 26
- 2.1.1 Un obiect făcut persistent 26
- 2.1.2 Un obiect adus din persistenţă 27
- 2.1.3 Un obiect persistent modificat 27
- 2.1.4 Un obiect persistent făcut transient 28
- 2.1.5 Persistenţa tranzitivă în Hibernate 28
- 2.1.6 Aducerea obiectelor cu Hibernate 30
- 2.2 ACTIVERECORD – MANAGERUL DE PERSISTENŢĂ DIN RUBY ON RAILS 31
- 2.2.1 Mapare automată între clase şi tabele, între atribute şi coloane 32
- 2.2.2 Asocierea dintre obiecte prin meta instrucţiuni simple 32
- 2.2.3 Agregare între obiectele valoare 33
- 2.2.4 Regulile de validare pot să difere pentru obiecte noi sau existente 33
- 2.2.5 Înregistrările pot să funcţioneze ca liste sau arbori 34
- 2.2.6 Metode callback pentru întreaga durată de viaţă 35
- 2.2.7 Ierarhii de moştenire 35
- 2.2.8 Tranzacţii 36
- 2.2.9 Manipulare directă (în loc de invocări de servicii) 36
- 2.3 HIBERNATE SAU ACTIVERECORD? 36
- 2.3.1 Diferenţe arhitecturale de bază 37
- 2.3.2 Valoarea clarităţii 37
- 2.3.3 Asocieri 39
- 2.3.3.1 Persistenţa tranzitivă 40
- 2.3.4 Limbaje de cerere 41
- 2.3.4.1 Căutările instante în Rails 42
- 2.3.4.2 Cererea de obiecte cu HQL 42
- 2.3.5 Îmbunătăţirea performanţelor 43
- 2.3.5.1 Aducerea târzie 43
- 2.3.5.2 Legături externe şi aducere explicită 44
- 2.3.5.3 Caching 45
- 2.3.6 Ce alegem? 45
- 3 APLICAŢIA PRACTICĂ 46
- 3.1 SPECIFICAREA APLICAŢIEI 46
- 3.2 DOCUMENTAŢIA DE PROIECTARE ŞI IMPLEMENTARE 46
- 3.2.1 Tehnologii folosite 50
- 3.2.2 Aplicarea persistenţei relaţionale 50
- 3.3 DOCUMENTAŢIA DE UTILIZARE 51
- 4 ANEXE 53
- 4.1 ACRONIME 53
- 4.2 BIBLIOGRAFIE 54
Extras din proiect
1 Introducere în persistenţa relaţională
1.1 Ce este persistenţa?
Aproape toate aplicaţiile au nevoie de date persistente. Persistenţa este unul dintre conceptele fundamentale în dezvoltarea aplicaţiilor. Dacă un sistem de informaţii n-ar păstra datele introduse de utilizatori atunci când este oprit, sistemul n-ar prea avea utilitate practică.
Când vorbim despre persistenţă în general, vorbim despre păstrarea datelor într-o bază de date relaţională, folosind SQL. Vom începe cu o privire de ansamblu asupra acestei tehnologii, şi cum poate ea fi folosită în limbajele de programare orientate obiect. Având aceste informaţii, putem continua să vedem cum este aceasta implementată în aplicaţiile orientate obiect.
1.1.1 Baze de date relaţionale
Mulţi dintre noi am lucrat deja cu baze de date relaţionale. De fapt, cei mai mulţi folosim baze de date relaţionale în fiecare zi. Această tehnologie este foarte cunoscută. Ea însăşi este un motiv suficient pentru multe organizaţii ca s-o aleagă. Totuşi aceasta înseamnă mai mult: Bazele de date relaţionale nu sunt folosite la întâmplare, ci pentru că sunt incredibil de flexibile şi robuste faţă de controlul informaţiei.
Nu există un sistem de control al bazelor de date specific pentru un limbaj, şi nici un sistem de baze de date relaţionale nu este specific vreunei aplicaţii. Tehnologia relaţională oferă un mod de a trimite informaţie între diferite aplicaţii sau între diferite tehnologii care sunt parte din aceeasi aplicaţie (de exemplu, motorul de tranzacţii şi motorul de rapoarte). Tehnologia relaţională este folosită pe multe sisteme şi platforme diferite. De fapt, modelul de date relaţional este adesea reprezentarea la nivel de companie a entităţilor.
Sistemele de control ale bazelor de date au interfeţele de program bazate pe SQL, şi, de cele mai multe ori, vorbim despre sisteme de baze de date SQL, sau, mai simplu, baze de date SQL.
1.1.2 Despre SQL
Pentru a folosi sisteme de control ale bazelor de date, este necesară înţelegerea în prealabil a modelului relaţional. Această înţelegere este necesară pentru îmbunătăţirea calitativă a performanţelor aplicaţiilor. Sistemele de control automatizează părţi (care se repetă) ale programelor, dar pentru a controla complet aceste sisteme, sunt necesare cunoştinţele despre bazele de date SQL. Până la urmă, scopul final este de a controla robust şi eficient datele persistente.
Să începem cu nişte termeni SQL pe care-i vom folosi mai târziu. Vom folosi SQL ca limbaj de definiţie a datelor (data definition language – DDL) pentru a crea structurile de baze de date cu instrucţiunile CREATE şi ALTER. După crearea tabelelor (şi a indecşilor, query-urilor, etc), vom folosi SQL ca limbaj de manipulare a datelor (data manipulation language – DML). Cu DML, executăm comenzi SQL care modifică sau recuperează informaţie. Manipularea datelor include inserare, modificare, ştergere. Recuperarea datelor se va face executând cereri cu restricţii, proiecţii, şi operaţii de legătură (incluzând produsul cartezian). Pentru rapoarte eficiente, vom folosi SQL pentru grupare, sortare, agregarea datelor în mai multe feluri. Instrucţiunile SQL se pot imbrica una în cealaltă (această tehnică se cheamă sub-selectare). Chiar dacă folosim des instrucţiunile SQL şi suntem familiari cu operaţiile de bază din acest limbaj, uneori este greu să ne aducem aminte de ele, şi uneori acestea variază ca mod de utilizare. Cunoştinţele despre SQL sunt absolut necesare pentru dezvoltarea aplicaţiilor folosind persistenţa relaţională.
1.1.3 Persistenţa în aplicaţiile orientate obiect
În aplicaţiile orientate obiect, persistenţa ajută un obiect să depăşească durata de viaţă a procesului care l-a creat. Starea unui obiect poate fi stocată pe disc, şi un obiect cu aceeaşi stare poate fi re-creat mai târziu.
Această aplicaţie nu este limitată la obiecte singulare – modele întregi de obiecte interconectate pot fi făcute persistente, şi apoi re-create într-un nou proces. Cele mai multe obiecte nu sunt persistente. Un obiect transient are o durată de viaţă limitată, mărginită de viaţa procesului care l-a instanţiat. Aproape toate aplicaţiile conţin un amestec de obiecte persistente şi transiente. Noi avem nevoie de un subsistem care să controleze datele persistente.
Bazele de date relaţionale moderne oferă o reprezentare structurată a informaţiei persistente, lăsând posibilitate de sortare, căutare şi agregare de date. Sistemele de control ale bazelor de date sunt responsabile pentru verificarea concurenţei şi integritatea datelor. Sunt responsabile pentru partajarea datelor între mai mulţi utilizatori şi mai multe aplicaţii. Un sistem de control al bazelor de date este deasemenea prevăzut cu securitate la nivel de date. Persistenţa se referă la:
• Stocare, organizare, recuperare de date structurate
• Concurenţă şi integritate a informaţiei
• Partajarea informaţiei
Preview document
Conținut arhivă zip
- Bibliografie.doc
- Cuprins.doc
- Persistenta Relationala.doc