Sunteți pe pagina 1din 11

PROIECT ELEMENTE

AVANSATE BAZE DE DATE


CREEREA UNEI BAZE DE DATE PENTRU AGENTIE
IMOBILIARA IN MONGODB

Razvan Pischis
pischisrazvan@yahoo.com
1. SCENARIU DESCRIPTIV
Domeniul imbiliar este unul bazat pe vanzari si inchisirie de proprietati imobiliare:
apartamente, case, spatii comerciale, spatii industriale si terenuri. Pentru ca o
agentie imobiliara sa poata sa isi desfasoare activitatea este nevoie de o baza de
date in care sa se stocheze informatii despre proprietatile din portofoliu, cat si
despre cererile de cumparare sau inchiriere ale agentie.
Pentru agentia imobiliara UCN este vital sa detina un site web interactiv in care sa
isi prezinte proprietatile, acesta avand ca scop principal atragerea de clienti si de
leaduri, pentru a realiza acesta platforma s-a decis creerea unei baze de date care
sa poata fi folosita in publicarea anunturilor prin extragerea de informatii din baza
de date, cat si o interfata de populare a bazei de date.
Baza de date este esentiala pentru activitatea agentilor in ofertarea clientilor, asa
ca baza de date desemnata stocarii informatilor despre proprietati, cat si cea
pentru tinerea in evidenta a clientilor si criterilor acestora de cerere, se vor crea o
baza de date NoSql care va cuprinde urmatoare colectii principale: Proprietati si
Clienti.
Portofoliul de proprietati ale agentiei UCN va cuprinde diferite proprietati:
apartamente, case, spatii comerciale, spatii industriale si terenuri; pe lanfa tipul
proprietatii agentia trebuie sa tina evidenta a caracteristicilor principale ale fiecarui
tip diferit de proprietate: amanunte despre pozitionare, caracteristici individuale
ale proprietati, cum ar fi suprafata utila, suprafata construita, nivel de finisaje
s.a.m.d, si detalii despre pret, comision si numarul de constract de prestari servicii
semnat pentru acea proprietate.
Portofoliul de clienti cuprinde date de contact al agestor si criterii de cumparare
sau inchiriere sub forma numerica de interval cum ar fi: detalii despre buget, numar
camere, modalitate de achizitie, preferinte de etaj, zona preferata.
Pe schema bazei de date colectia PROPRIETATI va avea ca si documente imbricate:
caracteristi, pret si promovare; iar colectia CLIENTI va avea ca si documente
imbricate preferinte generale si buget.
2. SCHEMA BAZEI DE DATE
În următoarele rânduri, în conformitate cu regulile de scriere și realizare a schemelor
bazelor de date NoSQL, vom crea două colecții de bază: proprietati și clienti.
Acestea conțin următoarele seturi de documente imbricate: caracteristici, pret,
promovare si respectiv preferinte generale si buget.
PROPRIETATI

Id_proprietate

Adresa

Nume_proprietar

Telefon_proprietar

CARACTERISTICI

Suprafata_Utila

Suprafata_Construita

Finisaje

PRET

Pret_proprietate

Comision

Nr_contract
CLIENTI
Nume
Telefon
Tip
PREFERINTE
Nr_camere
Suprfata_utila
Suprafata_construita
Finisaje
BUGET
Buget_Client
Modalitate_plata
Nr_contract

16. EXPLICATII
Făcând o paralelă între bazele de date relaționale și bazele de date NoSQL deducem
următoarele: colecțiile sunt echivalentul tabelelor, iar documentele sunt echivalentul
înregistrărilor. Principala diferență dintre cele două concepte este că tabelele au o
structură fixă, definită atunci când cream tabelele, iar documentele dintr-o colecție
pot avea câmpuri diferite, singura “schemă” necesara fiind aceea că fiecare
document are un camp “_id” care este echivalentul unei chei unice.
Există două instrumente care permit aplicațiilor să reprezinte relațiile: referințele și
documente încorporate/imbricate. Pentru a dezvolta relațiile proiectului am ales
documente încorporate. Documentele imbricate captează relațiile dintre date prin
stocarea datelor conexe într-o singură structură de document. Documentele
MongoDB permit integrarea structurilor de documente într-un câmp sau într-un tabel
într-un document.
Aceste modele de date denormalizate permit aplicațiilor să recupereze și să
manipuleze datele aferente într-o singură operație de bază de date. Una din
avantajele folosirii metodei de relație încorporată (Embedded Documents) este
performanța. Atunci când relația este încorporată în document, interogările vor rula
mai repede decât în cazul în care s-ar afla pe mai multe documente.
În cadrul bazei mele de date am ales construirea a 3 colecții separate, doarece am
ajuns la concluzia că în acest mod se păstreaza consistența datelor, iar în cazul unei
modificari majore a colecțiilor, baza de date va ramane constantă.
4. IMPLEMENTAREA BAZEI DE DATE
C:\MongoDB\bin\mongod.exe --dbpath D:\MongoData
Pentru implementarea bazei de date se accesează cele două documente cu extensia .exe
care se află în folderul C:\Program Files\MongoDB\Server\3.6\bin
 server: mongod.exe --dbpath C:\MongoData

 client: mongo.exe
După pornirea celor două, urmează crearea colecțiilor:
Crearea colecției Proprietati: db.createCollection(‘Proprietati’)
Crearea colectiei Clienti: db.createCollection(’Clienti’)

5. POPULAREA BAZEI DE DATE


Popularea colectiei Proprietati:
1.

2, 3, 4, 5
Pentru a afisa inregistratile din colectie vom folosi comanda db.Proprietati.find()

Popularea colectiei Clienti


AFISARE:

Pentru vizualizare in mod mai usor lizibil vom folosi comanda


db.Proprietati.find().pretty()

6. STERGEREA DIN BAZA DE DATE


Dorim sa stergem informatiile despre clientul Pop Raluca, asa ca prima oara cautam
in baza de date clienti informatiile despre clientul Pop Raluca, iar mai apoi stergem
toate informatiile gasite, la final daca cautam in baza de date dupa numele Pop
Raluca vom observa ca nu gaseste nimic.
7. UPDATE
Dorim sa modificam informatiile despre proprietatea care are ca numar de telefon
atasat 0763546561.
Inainte de Update:

Dupa Update:

8. MODIFICARI DE STRUCTURA
Pentru ca baza de date in forma actuala nu permite ca sa se faca direrentierea
dintre un tip de proprietate si altul, se doreste ca pe viitor sa se tina cont pentru
fiecare proprietate de tipul proprietatii.
8. CREERE INDEX
A. SIMPLU
db.Clienti.ensureIndex({"id":1})

B. COMPLEX (COMPUS)
db.Clienti.ensureIndex({"id":1,denumire:-1})

9. INTEROGARI

1. Afisare proprietari dupa nume crescator.


2. Afisare numar clineti care au modalitatea de plata Cash
db.Clienti.count({„Buget.Modalitate_Plata”:”Cash”})

3. Afisare numar documente din colectia Proprieti


db.Proprietati.count()