# KBaz 6 # Zadanie 1 Sukces # Zadanie 2 Wersja SQL ```sql= CREATE TABLE Ksiazka ( Ksiazka_ID INT IDENTITY , ISBN VARCHAR(20) , Tytul VARCHAR(300) , Autor VARCHAR(200) , Rok_Wydania INT , Cena DECIMAL(10,2) , Wypozyczona_Ostatni_Miesiac BIT , CONSTRAINT Ksiazka_PK PRIMARY KEY (Ksiazka_ID) , CONSTRAINT Ksiazka_UK_ISBN UNIQUE (ISBN) ); CREATE TABLE Egzemplarz ( Egzemplarz_ID INT IDENTITY , Sygnatura CHAR(8) , Ksiazka_ID INT , CONSTRAINT Egzemplarz_PK PRIMARY KEY (Egzemplarz_ID) , CONSTRAINT Egzemplarz_UK_Sygnatura UNIQUE (Sygnatura) , CONSTRAINT Egzemplarz_FK FOREIGN KEY (Ksiazka_ID) REFERENCES Ksiazka (Ksiazka_ID) ON DELETE CASCADE ); CREATE TABLE Czytelnik ( Czytelnik_ID INT IDENTITY , PESEL CHAR(11) , Nazwisko VARCHAR(30) , Miasto VARCHAR(30) , Data_Urodzenia DATE , Ostatnie_Wypozyczenie DATE , CONSTRAINT Czytelnik_PK PRIMARY KEY (Czytelnik_ID) , CONSTRAINT Czytelnik_UK_PESEL UNIQUE (PESEL) ); CREATE TABLE Wypozyczenie ( Wypozyczenie_ID INT IDENTITY , Czytelnik_ID INT , Egzemplarz_ID INT , Data DATE , Liczba_Dni INT , CONSTRAINT Wypozyczenie_PK PRIMARY KEY (Wypozyczenie_ID) , CONSTRAINT Wypozyczenie_FK_Czytelnik FOREIGN KEY (Czytelnik_ID) REFERENCES Czytelnik (Czytelnik_ID) ON DELETE CASCADE , CONSTRAINT Wypozyczenie_FK_Egzemplarz FOREIGN KEY (Egzemplarz_ID) REFERENCES Egzemplarz (Egzemplarz_ID) ON DELETE CASCADE ); ``` Wersja Mongodb ```javascript= //Pozycja { _id, ISBN, Tytul, Autor, Rok_Wydania, Cena, Wypozyczona_Ostatni_Miesiac, Egzemplarz : {Sygnatura: []} } //Czytelnik { _id, PESEL, Nazwisko, Miasto, Data_Urodzenia, Ostatnie_Wypozyczenie, Wypozyczenie : { Egzemplarz_ID, Data, Liczba_Dni, } } ``` ### Dodawanie nowych danych: Pozycje ```json= { "_id":0, "ISBN": "83-246-0653-X", "Tytul" : "Ala ma kota", "Autor" : "Alka", "Rok_Wydania" : 1998, "Cena" : 421, "Wypozyczona_Ostatni_Miesiac" : false, "Egzemplarz" : {"Sygnatura": ["S0001","S0002"]} } ``` ```json= { "_id":1, "ISBN": "83-246-0279-8", "Tytul" : "Kot ma Alę", "Autor" : "Kocur", "Rok_Wydania" : 1999, "Cena" : 421, "Wypozyczona_Ostatni_Miesiac" : false, "Egzemplarz" : {"Sygnatura": ["S0003"]} } ``` Czytelnicy ```json= { "_id":0, "PESEL": "55101011111", "Nazwisko" : "Kowalski", "Miasto" : "Kaczki", "Data_Urodzenia" : "1955-10-10", "Ostatnie_Wypozyczenie" : false, "Wypozyczenie" : [{ "Egzemplarz_ID" : 0, "Data" : "2000-02-01", "Liczba_Dni": 12 },{ "Egzemplarz_ID" : 1, "Data" : "2002-02-01", "Liczba_Dni" : 3 }] } ``` ```json= { "_id" :1, "PESEL" : "60101033333", "Nazwisko" : "Maliniak", "Miasto" : "Wrocław", "Data_Urodzenia" : "1960-10-10", "Ostatnie_Wypozyczenie" : false, "Wypozyczenie" : [{ "Egzemplarz_ID" : 1, "Data" : "2002-02-01", "Liczba_Dni" : 8 }, { "Egzemplarz_ID" : 0, "Data" : "2003-02-01", "Liczba_Dni" : 16 }] } ``` # Zadanie 3 ## Pozycja ```javascript= { _id, ISBN, Tytul, Autor, Rok_Wydania, Cena, Wypozyczona_Ostatni_Miesiac, Egzemplarz : {Sygnatura: []} } ``` ```json= { $jsonSchema: { required : ['ISBN','Tytul','Autor','Rok_Wydania','Cena','Wypozyczona_Ostatni_Miesiac','Egzemplarz'], properties: { ISBN : { bsonType : 'string', maxLength : 20 }, Tytul :{ bsonType : 'string', maxLength : 300, minLength : 1 }, Autor : { bsonType: 'string', maxLength : 200, minLength : 1 }, Rok_Wydania :{ bsonType: "int" }, Cena:{ bsonType : 'int', minimum :0 }, Wypozyczona_Ostatni_Miesiac:{ bsonType: 'bool' }, Egzemplarz :{ bsonType : 'object', required : ['Sygnatura'], properties :{ Sybnatura :{ bsonType : 'array', items :{ bsonType : 'string' } } } } } } } ``` ## Czytelnik ```javascript= { _id, PESEL, Nazwisko, Miasto, Data_Urodzenia, Ostatnie_Wypozyczenie, Wypozyczenie : { Egzemplarz_ID, Data, Liczba_Dni, } } ``` ```json= { $jsonSchema: { required: ['PESEL','Nazwisko','Miasto','Data_Urodzenia','Ostatnie_Wypozyczenie','Wypozyczenie'], properties: { PESEL: { bsonType : "string", pattern : "^\\d{11}$" }, Nazwisko : { bsonType : "string", pattern : "^[A-Z]{1}[a-ząłó]+$", maxLength : 30 }, Miasto :{ bsonType : "string", pattern : "^[A-Z]{1}[a-ząłó]+$", maxLength : 30 }, Data_Urodzenia :{ bsonType : "string", pattern : "^\\d{4}-\\d{2}-\\d{2}$" }, Ostatnie_Wypozyczenie :{ bsonType: "bool" }, Wypozyczenie :{ bsonType : "array", items :{ bsonType : "object", required: ['Liczba_Dni','Egzemplarz_ID','Data'], properties :{ Liczba_dni :{ bsonType : 'int', minimum : 0 }, Egzemplarz_ID:{ bsonType : 'int', minimum : 0 }, Data :{ bsonType : "string", pattern : "^\\d{4}-\\d{2}-\\d{2}$" } } } } } } } ``` # Zadanie 4 ## Pobranie listy wszystkich dokumentów, posortowanych ```javascript= db.Pozycje.find().sort({Tytul:1}) ``` ## Pobranie listy 2 „środkowych” dokumentów z posortowanej kolekcji (inaczej mówiąc: pobranie wybranej strony), ```javascript= db.Test.find().sort().skip(Math.floor(db.Test.find().size()/2)).limit(2) ``` ## Pobranie list dokumentów z nałożonym filtrem na atrybuty zagnieżdżonych dokumentów. ```javascript= db.Pozycje.find({ "Egzemplarz.Sygnatura" : "S0002" }) ``` # Zadanie 5 ```bash= sudo mongod --port 10000 --dbpath ./Baza1 --replSet "demo" sudo mongod --port 20000 --dbpath ./Baza2 --replSet "demo" sudo mongod --port 30000 --dbpath ./Baza3 --replSet "demo" ``` ``` db.books.save({_id:1, title:"Mistrz i Małgorzata"}) db.books.save({_id:2, title:"Wyznania gejszy"}) ``` ```javascript= var rsConfig = { _id: "demo", members: [{ _id: 0, host: 'localhost:10000', priority: 10 }, { _id: 1, host: 'localhost:20000' }, { _id: 2, host: 'localhost:30000', arbiterOnly: true }] }; rs.initiate(rsConfig) ``` ``` db.getMongo().setReadPref('primaryPreferred') ``` # Zadanie 6 ```bash= sudo mongod --port 10000 --dbpath ./conf --replSet "demo" --configsvr rs.initiate() ``` ```bash= sudo mongos --port 20000 --configdb "demo/127.0.0.1:10000" ``` ```bash= sudo mongod --port 30000 --dbpath ./shard --replSet "shard" --shardsvr rs.initiate() ``` ``` #router sh.addShard("shard/localhost:30000") db.createCollection("SomeDB") use SomeDB sh.enableSharding("SomeDB") sh.status() db.createCollection("SomeCollection") db.SomeCollection.createIndex({"index":1}) db.SomeCollection.ensureIndex({"index":"hashed"}) sh.shardCollection("SomeDB.SomeCollection", {"index": "hashed"}) db.SomeCollection.getShardDistribution() ``` # Zadanie 7 ```javascript= db.Pozycje.aggregate([{$match : {Cena : {$gt : 200}}}, {$group : { _id : "$Autor", Total : {$sum : "$Cena"}}}]) ```