Bazy Danych II
Projekt
Temat: „Katalog albumów muzycznych”
Prowadzący: Przygotował:
mgr Zofia Kostrzewska Marcin Woźniak
Informatyka gr II rok III
Cel projektu:
Celem niniejszego projektu jest stworzenie bazy danych w której możliwe będzie skatalogowanie albumów muzycznych zarówno w domowej płytotece jak również dla potrzeb ZAIKS-u.
Opis projektu:
Projekt może służyć jako domowy katalog przechowujący informacje o naszych płytach CD, kasetach czy płytach winylowych (oraz równie dobrze o naszych utworach mp3), oraz może zostać wykorzystany do skatalogowania wszystkich wydawnictw na rynku muzycznym. Ponieważ wszelkie wydawane albumy są objęta prawami autorskimi ważne jest by tytuły utworów, czy nawet nazwy nowych zespołów nie pokrywały się z już istniejącymi. Projekt ten umożliwia łatwe dotarci do skatalogowanych wydawnictw i sprawdzenie czy nowe wydawnictwo nie narusza praw autorskich już istniejącego. Dzięki niemu łatwo i szybko możliwe jest odnalezienie np. szukanego utworu wśród setek a nawet często tysięcy utworów w naszej płytotece. Mamy dostęp do roku wydania albumu z szukanym utworem, do nazwy zespołu, roku jego założenia czy stylu muzycznego który zespół wykonuje. Wyszukiwanie można prowadzić wg wszystkich zawartych w projekcie kryteriów czyli: wg stylu muzycznego, wg zespołu, wg daty wydania, wg albumu czy nawet wg czasu trwania utworu. Zadając stosunkowo proste zapytania mamy dostęp do wszystkich tych informacji. Nasza baza - projekt składa się z pięciu tabel :
2.1. Style_muzyczne - tabela charakteryzująca rodzaj muzyki wykonywany przez zespół, pozwala na skatalogowanie utworów i zespołów wg wspólnych cech charakterystycznych dla nich jak np. rytm, tonacja, czy rify gitarowe. Te właśnie cechy jak i wiele innych decydują do jakiego stylu można zaliczyć zespół.
2.2. Zespoły - przechowuje liste zespolów, daty ich powstania oraz style do których się je zalicza
2.3. Typ_wydania - określa w jaki sposób został album wydany (kaseta MC, plyta CD lub winyl)
2.4. Płyty - zawiera ID zespołu do którego nalezy dany album oraz dane dotyczące daty wydania, stylu muzyucznego oraz tytułu albumu.
2.5. Utwory - Przechowuje wszystkie utwory w naszej bazie wraz z danymi odnośnie ID plyty z której utwór pochodzi, czasu trwania utworu, tytulu utworu, jego pozycji na plycie, oraz ID zespolu wykonującego dany utwór.
W niniejszym projekcie w celu ulatwienia urzytkowania go zostały utworzone funkcje dzieki którym łatwiejsze jest dodawanie rekordów do tabel.
Tabele:
Style_muzyczne |
Id_stylu :number (2) Primary Key, Opis :varchar2 (20) not null; |
Zespoly |
Id_zesp :number (4) Primary Key, Nazwa :varchar2 (30) not null, Data_powstania : Date Id_stylu :number(2) Foreign Key (Style_muzyczne) ; |
Typ_wydania |
Id_typu :number (2) Primary Key, Opis :varchar2 (30) not null, Side: :char |
Plyty |
Id_plyty :number (5) Primary Key, tytul :varchar2 (20) not null, Id_zesp :number (4) Foreign Key (Zespoly) not null, Data_wyd : Date, Id_typu :number (2) Foreign Key (Typ_wydania) |
Utwory |
Id_utworu :number (6) Primary Key Id_plyty :number (5) Foreign Key (Plyty), Id_zsep :number (4) Foreign Key (Zespoly) not null, Dlugosc :number(4,2) check Dlugosc >0 not null, Lp :number (2), Side :char Tytul :varchar2 (20) not null; |
4. Diagram
5. Tworzenie tabel :
Tworzenie tabeli Style_muzyczne:
CREATE TABLE Style_muzyczne (
Id_stylu number (2) CONSTRAINT pk_id_s PRIMARY KEY,
Opis varchar2 (20) not null);
Tworzenie tabeli Zespoly:
CREATE TABLE Zespoly (
Id_zesp number (4) CONSTRAINT pk_id_z PRIMARY KEY,
Nazwa varchar2 (30) not null,
Data_powstania Date,
Id_stylu number(2) constraint fk_id_s references Style_muzyczne(id_stylu)
);
Tworzenie tabeli Typ_wydania
Create table Typ_wydania
(id_typu number(2) constraint pk_id_t Primary key, opis varchar2 (30) not null,
side char constraint si check (side between 1 and 2));
4. Tworzenie tabeli Plyty
Create table Plyty(
id_plyty number (5) constraint pk_id_p primary key,
tytul varchar2(20) not null,
id_zespolu number(4) constraint fk_id_z references Zespoly(Id_zesp) not null,
Rok_wyd number (4),
id_typu number(2) constraint fk_id_ty references Typ_wydania(id_typu));
Tworzenie tabeli Utwory
Create table Utwory(
id_utworu number(6) constraint pk_id_u Primary Key,
id_plyty number(5) constraint fk_id_pl references Plyty(id_plyty),
id_zesp number(4) constraint fk_id_ze references Zespoly(id_zesp),
dlugosc number(8,2) constraint dl check (dlugosc >0),
lp number(2),
side char constraint sid check (side between 1 and 2),
Tytul varchar2(20) not null);
6. Wprowadzanie danych do tabel:
Do tabeli Style_muzyczne:
INSERT INTO Style_muzyczne VALUES (SStyle_muzyczne.nextval,'Rock_metal');
Lub za pomoca funkcji add_styl
EXEC add_styl('rock');
Do tabeli Zespoly:
INSERT INTO Zespoly VALUES (SZespoly.nextval,'METALLICA','1979/03/17',1);
lub za pomocą procedury:
exec add_zespol ('METALLICA','1979/03/17',1);
Do tabeli Typ_wydania:
INSERT INTO Typ_wydania VALUES (STyp_wydania.nextval,'Płyta CD',1);
exec add_typ ('Płyta CD',1);
Do tabeli Plyty:
INSERT INTO Plyty VALUES (SPlyty.nextval,'Master of Pupets',1,1982,2 );
Exec add_plyty('Master of Pupets',1,1982,2 );
Do tabeli Utwory:
INSERT INTO Utwory VALUES (SUtwory.nextval, 3,1,150,3,1,'Tytul3');
7.. Tworzenie sekwencji:
Tworzenie sekwencji do tabeli Style_muzyczne
CREATE SEQUENCE SStyle_muzyczne INCREMENT BY 1 START WITH 1;
Tworzenie sekwencji do tabeli Zespoly
CREATE SEQUENCE S Zespoly INCREMENT BY 1 START WITH 1;
Tworzenie sekwencji do tabeli Typ_wydania
CREATE SEQUENCE S Typ_wydania INCREMENT BY 1 START WITH 1;
Tworzenie sekwencji do tabeli Plyty
CREATE SEQUENCE S Plyty INCREMENT BY 1 START WITH 1;
Tworzenie sekwencji do tabeli Utwory
CREATE SEQUENCE S Utwory INCREMENT BY 1 START WITH 1;
8. Wypelnione tabele:
8.1. Style_muzyczne
8.2. Zespoly
8.3. Typ_wydnia
8.4. Plyty
8.5. Utwory
9. Tworzenie perspektyw
CREATE OR REPLACE VIEW P_plyty
As
select id_plyty, sum (dlugosc) czas from utwory group by id_plyty ;
10. Tworzenie funkcji
1. Funkcja dodająca rekord do tabeli style muzyczne
Create or replace procedure add_styl (nazwa varchar2)
is
robo varchar2(20);
begin
robo := nazwa;
INSERT INTO Style_muzyczne VALUES
(SStyle_muzyczne.nextval,robo);
end;
Funkcja dodająca nowy zespół do tabeli Zespol
Create or replace procedure add_zespol (nazwa varchar2,data Date, id char)
is
my_nazwa varchar2(30);
my_data Date;
my_styl number(2);
begin
my_nazwa := nazwa;
my_data := data;
my_styl :=id;
INSERT INTO Zespoly VALUES (SZespoly.nextval,my_nazwa,my_data,my_styl);
end;
Funkcja dodająca nowy zespół do tabeli typ_wydania.
Create or replace procedure add_typ (opis varchar2, side char)
is
my_opis varchar2(30);
my_side char;
begin
my_opis := opis;
my_side := side;
INSERT INTO Typ_wydania VALUES (STyp_wydania.nextval,my_opis,my_side);
end;
Funkcja dodająca nowy zespół do tabeli Plyty;
Create or replace procedure add_plyty (nazwa varchar2, id_zesp number,rok number, typ number)
is
my_nazwa varchar2(20);
my_id number(4);
my_rok number(4);
my_typ number (2);
begin
my_nazwa := nazwa;
my_id := id_zesp;
my_rok := rok;
my_typ := typ;
INSERT INTO Plyty VALUES (SPlyty.nextval,my_nazwa,my_id,my_rok,my_typ);
end;
Funkcja dodająca nowy zespół do tabeli Utwory;
Create or replace procedure add_utwory
( Id_p number,id_z number, dl number, lp number, side char, tyt varchar2 )
is
my_id_utworu number(6);
my_id_plyty number(5);
my_id_zesp number(4);
My_dlugosc number(4);
my_lp number(2);
my_side char;
my_Tytul varchar2(20) ;
begin
my_id_plyty := Id_p;
my_id_zesp := id_z;
My_dlugosc := dl;
my_lp := lp;
my_side := side;
my_Tytul := tyt;
INSERT INTO Utwory VALUES (SUtwory.nextval,my_id_plyty,my_id_zesp,My_dlugosc,my_lp,my_side,my_tytul);
end;
Przykladowe zapytania :
Wyszukiwanie plyty po tytule i wyswietlenie jej zawartosci :
Select * from utwory join plyty on plyty.id_plyty = utwory.id_plyty where plyty.Tytul='&plyta';
11.2 Wyszukanie utworu wg pierwszych liter tytulu :
select z.nazwa, p.tytul, u.tytul, u.dlugosc czas , u.lp from zespoly z, utwory u, plyty p where u.Id_zesp=z.id_zesp and p.id_plyty= u.id_plyty and u.tytul like '&tytul%';
11.3 Podaj jakie płyty powstały w danym przedziale czasu
select tytul from plyty where rok_wyd > &min and rok_wyd <&max;
11.4 Jakie plyty danego zespolu znajduja sie w bazie :
select plyty.tytul, plyty.rok_wyd from plyty where id_zespolu = (select id_zesp from zespoly where nazwa = '&nazwa');
11.5. Jaka jest najstarsza/najmlodsza płyta w bazie
select plyty.tytul plyta, zespoly.nazwa zespol, plyty.rok_wyd from plyty join zespoly on plyty.id_zespolu = zespoly.id_zesp where rok_wyd = (select min(rok_wyd) from plyty);
select plyty.tytul plyta, zespoly.nazwa zespol, plyty.rok_wyd from plyty join zespoly on plyty.id_zespolu = zespoly.id_zesp where rok_wyd = (select max(rok_wyd) from plyty);
Pokaz czasy trwania plyt :
select plyty.tytul, p_plyty.czas from plyty natural join P_plyty ;
Plyty
Id_plyty,
Tytul,
Id_zesp,
Data_wyd,
Id_typu
Typ_wydania
Id_typu,
Opis,
side
Style_muzyczne
Id_stylu,
opis
Utwory
Id_utworu
Id_plyty
Id_zsep
Dlugosc
Lp Side Tytul
Zespoly
Id_zesp
Nazwa Data_powstania : Id_stylu