20768 Developing SQL Data Models
Ovaj trodnevni kurs namenjen je profesionalcima za baze podataka koji razvijaju sisteme poslovnog informisanja (BI Business Intelligence). Na kursu se uči implementacija višedimenzionalnih baza podataka pomoću SQL Server Analysis Servisa (SSAS), pravljenje tabelarnih semantičkih modela podataka za analizu pomoću SSAS, kreiranje dimenzija, mera i data kocaka (engl: data cubes) spremnih za poslovnu analitiku.
Cena (€)
Akcija (€)
Trajanje č/d
Termin
Dani
Vreme
240
220
24 / 6
12/12/2024 - 19/12/2024
pon,uto,sre,cet.pet
17:30-21:00
Informacije o kursu
Ovaj trodnevni kurs namenjen je profesionalcima za baze podataka koji razvijaju sisteme poslovnog informisanja (BI Business Intelligence). Na kursu se uči implementacija višedimenzionalnih baza podataka pomoću SQL Server Analysis Servisa (SSAS), pravljenje tabelarnih semantičkih modela podataka za analizu pomoću SSAS, kreiranje dimenzija, mera i data kocaka (engl: data cubes) spremnih za poslovnu analitiku. Osnovna zaduženja implementatora poslovnih rešenja na Microsoft SQL Servera su:
Kreiranje višedimenzionih baza podataka pomoću SQL Server Analysis Servisa
Kreiranje tabelarnih semantičkih modela podataka za analizu pomoću SQL Server Analysis Servisa
Ovaj kurs će takođe biti koristan svima koji rade analizu podataka i u svakodnevnom radu barataju sa velikim količinama podataka.
Neophodno je generalno poznavanje SQL programskog jezika koji se proučava na kursu 20761 – Querying Data with Transact-SQL.
- Uvod u poslovnu inteligenciju i modeliranje podataka
- Kreiranje višedimenzionalnih baza podataka pomoću SSAS
- Rad sa dimenzijama i kockama podataka
- Rad sa merama i grupama mera
- Uvod u MDX (Multidimensional Expressions)
- Podešavanje funkcionalnosti kocke podataka
- Kreiranje tabular modela podataka pomoću SSAS
- Uvod u DAX (Data Analysis Expression)
- Izvođenje prediktivne analize korišćenjem Data Mining rešenja
Ovaj kurs je logičan nastavak predhodnog 20767 – Implementing a SQL Data Warehouse i odnosi se na profil analitičara baze podataka. Na kursu se uči kreiranje data modela, (takođe je popularan naziv data cubes) i rad sa ovakvim višedimenzionalnim modelima u praksi. Kreirani modeli se najčešće oslanjaju na skladište podataka, mada to ne mora biti pravilo jer se modeli mogu praviti i direktno nad operativnim podacima. U svakom slučaju potrebu za ovakvim profilom imaju organizacije koje svoje poslovne odluke donose na osnovu argumentovanih analiza podataka i imaju svoja skladišta podataka koja su ažurna i struktuirana u skladu sa potrebama organizacije i stanjem na tržištu. Jasno je da je u pitanju veoma dinamično i izazovno radno okruženje, ali uz to idu i odgovarajuće kompenzacije.
mr Miloš Milosavljević
- CET predavac od 1997.
- Sertifikovani Microsoft trener od 1999 godine
- Microsoft Certified IT Professional
- Microsoft Certified Solutions Associate (Microsoft SQL Server)
- Microsoft Certified Technology Associate
- Microsoft Certified Technology Specialist
- Microsoft Certified Database Administrator
- Učešće u organizaciji i predavanja na konferenciji „SINERGIJA“ ( http://www.mssinergija.net ) od osnivanja 2001. godine na dalje.
dr Snežana Popović
- CET predavac od 1999
- Sertifikovani Microsoft trener od 2002.
- Microsoft Certified Application Developer
- MCSD Microsoft Certified Solution Developer – Microsoft .NET
- MCTS Microsoft Certified Technology Specialist
- MCPD Microsoft Certified Professional Developer
- Docent na Računarskom fakultetu
M.Sci.Bratislav Dimitrov
- CET predavac od 2011
- Development Lead, Scrum master,
- MS Visual Studio 2003/2005/2008/2010/2012/2015/2017,
- MS SQL Server 2000/2005/2008 (R2), 2012/2016,
- MS SQL Server Integration Services (SSIS),
- MS SQL Server Reporting Services (SSRS)
Prijava
Hover Box Element
PRIJAVI SEČitalište
Osnove SQL-a
Upoznajte DDL, DML i JOINs
Struktuirani upitni jezik je jedan od osnovnih sastavnih blokova savremene arhitekture baza podataka. Definiše metode koje se koriste da bi se kreirale relacione baze podataka i da bi se sa njima radilo na svim glavnim platformama. Na prvi pogled, jezik izgleda složeno i skoro zastrašujuće, ali uopšte ga nije teško savladati.
O SQL-u
Ispravan izgovor naziva jezika je stalno sporno pitanje u zajednici stručnjaka koji se bave bazama podataka. Američki nacionalni institut za standarde je ustanovio pravilan izgovor imena kao „eskjuel“, međutim, mnogi stručnjaci koji se bave bazama podataka navikli su da izgovaraju „sikvel“, tako da vama prepuštamo izbor.
Postoji nekoliko vrsta SQL-a. Oraklova baza podataka koristi svoju verziju PL/SQL, a SQL server kompanije „Majkrosoft“ koristi Transact-SQL. Sve varijacije se zasnivaju na industrijskom standardu ANSI SQL. Ovaj uvod koristi SQL naredbe usaglašene sa ANSI standardom koji može da se koristi u bilo kom savremenom sistemu baza podataka.
DDL i DML
Naredbe u SQL-u mogu da se podele na dva glavna podjezika. Jezik za definisanje podataka (DDL) sadrži naredbe koje se koriste da bi se kreirale i uništile baze podataka i njihovi objekti. Pošto se uz pomoć tog jezika definiše struktura baze podataka, njeni administratori i korisnici mogu da koriste jezik za manipulisanje podacima (DML) da bi umetali, pronalazili i menjali podatke koji se u njoj nalaze.
Naredbe u jeziku za definisanje podataka
Jezik za definisanje podataka se koristi da bi se kreirale i uništile baze podataka i njihovi objekti. Te naredbe prvenstveno koriste administratori baza podataka tokom faza uspostavljanja ili uklanjanja baza podataka. Predstavićemo vam strukturu i upotrebu četiri osnovne naredbe u jeziku za definisanje podataka.
CREATE. Instaliranje sistema za upravljanje bazama podataka u računar omogućava vam da kreirate i upravljate mnogim nezavisnim bazama podataka. Na primer, želite da kreirate bazu podataka kontakata klijenata za odeljenje prodaje i bazu podataka zaposlenih za kadrovsku službu. Naredba CREATE se koristi da bi se uspostavila bilo koja od navedenih baza podataka na vašoj platformi. Na primer, naredba:
CREATE DATABASE employees
kreira praznu bazu podataka koja se zove „employees“ (zaposleni) na vašem sistemu za upravljanje bazama podataka. Pošto ste kreirali bazu podataka, sledeći korak bi bio kreiranje tabela koje će sadržati podatke. Varijanta naredbe CREATE može se koristi u tom postupku. Naredba:
CREATE TABLE personal_info (first_name char(20) not null, last_name char(20) not null, employee_id int not null)
kreira tabelu pod nazivom „personal_info“ (lični_podaci) u postojećoj bazi podataka. U ovom primeru, tabela sadrži tri atributa: ime, prezime i lični broj zaposlenog (first_name, last_name, and employee_id) zajedno sa još nekim detaljima.
USE. Naredba USE vam omogućava da odredite bazu podataka u kojoj želite da radite u okviru vašeg sistema za upravljanje bazama podataka. Na primer, ako trenutno radite u bazi podataka prodaje i želite da izdate neke naredbe koje će uticati na bazu podataka zaposlenih, pre njih morate iskoristiti sledeću naredbu u SQL-u:
USE employees
Izuzetno je važno da uvek budete svesni u kojoj bazi podataka radite pre nego što izdate naredbe u SQL-u kojima manipulišete podacima.
ALTER. Kad ste kreirali tabelu u okviru baze podataka, desiće se da ćete želeti da izmenite njenu definiciju. Naredba ALTER vam omogućava da izvršite promene u strukturi tabele, a da pri tom ne morate da je obrišete ili ponovo kreirate. Pogledajte sledeću naredbu:
ALTER TABLE personal_info ADD salary money null
U ovom primeru dodali smo novi atribut tabeli personal_info, a to je zarada zaposlenog (employee’s salary). Argument „money“ (novac) određuje da je zarada zaposlenog izražena u formatu dolara i centi. Konačno, ključna reč „null“ (nula) govori bazi podataka da je sasvim u redu ako to polje ne sadrži nikakvu vrednost za bilo kog zaposlenog.
DROP. Poslednja naredba u jeziku za definisanje podataka, DROP, omogućava vam da uklonite celokupne objekte baze podataka iz sistema za upravljanje bazama podataka. Na primer, ako želite da trajno uklonite tabelu personal_info koju ste kreirali, koristite sledeću naredbu:
DROP TABLE personal_info
Slično tome, naredbu koju ćemo navesti koristili bi da uklonite celokupnu bazu podataka zaposlenih (employee):
DROP DATABASE employees
Ovu naredbu bi valjalo pažljivo koristiti jer DROP uklanja celu strukturu podataka iz vaše baze podataka. Ako želite da uklonite pojedinačne zapise, koristite naredbu DELETE u jeziku za manipulisanje podacima.
Naredbe u jeziku za manipulisanje podacima
Jezik za manipulisanje podacima (DML) koristi se da bi se pronalazile, umetale i menjale informacije u bazi podataka. Te naredbe koriste svi korisnici baza podataka tokom rutinskih postupaka u bazi podataka.
INSERT. Naredba INSERT u SQL-u se koristi da bi se dodali zapisi već postojećoj tabeli. Vratimo se primeru personal_info iz prethodnog odeljka i zamislite da naša kadrovska služba treba da doda novog zaposlenog bazi podataka. Za taj postupak možete koristi naredbu sličnu ovoj:
INSERT INTO personal_info values(‘bart’,’simpson’,12345,$45000)
Obratite pažnju na to da su određene četiri vrednosti za ovaj unos. One odgovaraju atributima tabele redosledom kojim su definisani: ime, prezime, lični broj zaposlenog i plata (first_name, last_name, employee_id and salary).
SELECT. Naredba SELECT je najčešće korišćena naredba u SQL-u. Ona omogućava korisnicima baze podataka da pronađu određenu informaciju koju žele iz operativne baze podataka. Pogledajte nekoliko primera u kojima ćemo ponovo koristiti tabelu personal_info iz baze podataka zaposlenih.
Naredba koja je dole prikazana pronalazi sve informacije koje su sadržane u tabeli personal_info. Obratite pažnju na to da se zvezdica u SQL-u koristi kao džoker karta. Naredba doslovno znači „Odaberi sve iz tabele personal_info.“
SELECT *
FROM personal_info
S druge strane, korisnici bi možda želeli da ograniče atribute koji se pretražuju iz baze podataka. Na primer, kadrovska služba traži popis prezimena svih zaposlenih u kompaniji. Sledeća naredna u SQL-u prikazaće samo tu informaciju:
SELECT last_name
FROM personal_info
Klauzula WHERE može se koristiti da bi se ograničili zapisi koji se traže samo na one koji zadovoljavaju određene uslove. Direktor bi možda želeo da pregleda dosijee svih zaposlenih koji imaju visoke plate. Sledeća naredba prikazuje sve podatke koji se nalaze u tabeli personal_info za zapise koji imaju platu veću od 50.000 dolara:
SELECT *
FROM personal_info
WHERE salary > $50000
UPDATE. Naredba UPDATE može se koristiti da bi se izmenile informacije koje se nalaze u tabeli, kako pojedinačno, tako i grupno. Pretpostavimo da je kompanija svim zaposlenima povećala godišnju platu za 3 procenta zbog povećanja troškova života. Sledeća naredba u SQL-u se može koristiti da bi se to brzo primenilo na sve zaposlene koji se nalaze u bazi podataka:
UPDATE personal_info
SET salary = salary * 1.03
Kad novi zaposleni Bart Simpson pokaže da je izuzetno vredan i uzoran radnik, uprava želi da ga nagradi za sva njegova dostignuća tako što mu daje povišicu od 5.000 dolara. Klauzula WHERE bi mogla da se koristi da bi izdvojila Barta koji treba da dobije povišicu:
UPDATE personal_info
SET salary = salary + $5000
WHERE employee_id = 12345
DELETE. Hajde konačno da objasnimo i naredbu DELETE. Videćete da je sintaksa ove naredbe slična sintaksama ostalih naredbi u jeziku za manipulisanje podacima (DML). Nažalost, najnoviji korporativni izveštaj o ostvarenoj zaradi nije ispunio očekivanja i naš siroti Bart je dobio otkaz. Naredba DELETE zajedno sa klauzulom WHERE može se koristiti da se njegov zapis izbriše iz tabele personal_info:
DELETE FROM personal_info
WHERE employee_id = 12345
JOINs
Kad smo savladali osnove SQL-a, vreme je da se upoznamo sa najmoćnijim konceptima koje taj jezik može da ponudi – sa naredbom JOIN. Ona vam omogućava da kombinujete podatke iz većeg broja tabela da biste efikasno obradili velike količine podataka. U tim naredbama leži prava moć baza podataka.
Da bismo istražili upotrebu osnovne operacije JOIN u kombinovanju podataka iz dve tabele, nastavićemo sa primerom koristeći tabelu PERSONAL_INFO i dodaćemo još jednu tabelu u celom tom procesu. Pretpostavimo da imamo tabelu koja se zove DISCIPLINARY_ACTION koja je kreirana pomoću sledeće naredbe:
CREATE TABLE disciplinary_action (action_id int not null, employee_id int not null, comments char(500))
Ta tabela sadrži rezultate disciplinskih mera (disciplinary actions) koje su sprovedene nad zaposlenima u kompaniji. Primetićete da ne sadrži nikakve druge podatke o zaposlenima osim njihovog ličnog broja. Lako je zamisliti mnogobrojne situacije u kojima biste mogli da kombinujete informacije iz tabela DISCIPLINARY_ACTION i PERSONAL_INFO.
Pretpostavimo da ste dobili zadatak da napravite izveštaj u kome ćete popisati sve disciplinske mere sprovedene nad svim zaposlenima koji imaju platu veću od 40.000 dolara. Upotreba operacije JOIN, u tom slučaju, je jasna. Možemo prikazati te informacije pomoću sledeće naredbe:
SELECT personal_info.first_name, personal_info.last_name, disciplinary_action.comments
FROM personal_info, disciplinary_action
WHERE personal_info.employee_id = disciplinary_action.employee_id
AND personal_info.salary > 40000
Napisani kod određuje dve tabele koje želimo da spojimo u klauzuli FROM i zatim uključuje naredbu u klauzuli WHERE da bi ograničio rezultate samo na zapise koji imaju odgovarajuće lične brojeve zaposlenih i odgovaraju našem kriterijumu koji kaže da plata mora biti veća od 40.000 dolara.
Prikazivanje podataka iz više tabela pomoću izraza INNER JOIN u SQL-u
Izraz INNER JOIN prikuplja informacije koje se pojavljuju u dve ili više baza podataka
Izrazi INNER JOIN su daleko najčešće korišćena vrsta izraza JOIN u SQL-u. Oni prikupljaju informacije koje se nalaze u dve ili više tabela baza podataka. Uslov spajanja (engl. join) određuje koji će se zapisi sparivati i određen je u naredbi WHERE. Na primer, ako vam je potreban spisak vozača uparenih sa vozilima kojima upravljaju, a da se, pri tom, vozači i vozila nalaze u istom gradu, sledeći upit u SQL-u će vam obaviti taj zadatak:
SELECT lastname, firstname, tag
FROM drivers, vehicles
WHERE drivers.location = vehicles.location
Rezultati koje ćete dobiti izgledaju ovako:
lastname firstname tag
———– ———— —-
Baker Roland H122JM
Smythe Michael D824HA
Smythe Michael P091YF
Jacobs Abraham J291QR
Jacobs Abraham L990MT
Primetićete da smo dobili baš onakav rezultat kakav smo tražili. Moguće je stvoriti još precizniji upit određujući dodatne kriterijume u naredbi WHERE. Pretpostavimo da je prvobitni upit spojio vozače sa vozilima koja ne smeju da voze (vozače kamiona sa automobilima i obrnuto). Možete koristiti sledeći upit da biste rešili taj problem:
SELECT lastname, firstname, tag, vehicles.class
FROM drivers, vehicles
WHERE drivers.location = vehicles.location
AND drivers.class = vehicles.class
Ovaj primer precizno određuje izvornu tabelu za atribut klase u naredbi SELECT jer je klasa dvoznačna – pojavljuje se u obema tabelama. Kod obično određuje koju kolonu tabele treba obuhvatiti rezultatom upita. U ovom slučaju, ne pravi se razlika jer su kolone identične i povezane su korišćenjem spajanja po jednakosti (EQUIJOIN). Međutim, ako kolone sadrže različite podatke, ova razlika će biti od presudnog značaja. Prikazaćemo vam rezultate ovog upita:
lastname firstname tag class
———- ———— —- ——
Baker Roland H122JM Car
Smythe Michael D824HA Truck
Jacobs Abraham J291QR Car
U redovima koji nedostaju spojen je Michael Smythe sa automobilom i Abraham Jacobs sa kamionom, vozilima kojima ne smeju da upravljaju.
Izraze INNER JOIN možete koristiti da bi kombinovali podatke iz tri ili više tabela.
Prikupljanje podataka pomoću upita u SQL-u: Upoznavanje sa naredbom SELECT
Struktuirani upitni jezik nudi korisnicima baza podataka moćan i prilagodljiv mehanizam prikupljanja podataka – naredbu SELECT. U ovom odeljku, upoznaćemo se sa opštom formom naredbe SELECT i zajedno ćemo napraviti nekoliko oglednih upita u bazi podataka. Ako je ovo prvi vaš pohod u svet struktuiranog upitnog jezika, možda bi bilo dobro da obnovite osnove SQL-a pre nego što nastavimo. Ako želite da kreirate bazu podataka od samog početka, najbolje bi bilo da naučite kako da kreirate baze podataka i tabele u SQL-u.
Pošto ste utvrdili osnove, hajde da počnemo sa istraživanjem naredbe SELECT. Kao i u prethodnim lekcijama o SQL-u, i ovde ćemo koristiti naredbe koje su u skladu standardom ANSI SQL. Možda biste mogli ponovo da pregledate dokumentaciju vašeg sistema za upravljanje bazama podataka da biste utvrdili da li podržava napredne opcije koje mogu da povećaju efikasnost i delotvornost vašeg koda u SQL-u.
Opšta forma naredbe SELECT
Opšta forma naredbe SELECT izgleda ovako:
SELECT select_list
FROM source
WHERE condition(s)
GROUP BY expression
HAVING condition
ORDER BY expression
Prvi red naredbe upućuje SQL procesor da je ta naredba SELECT i da želimo da prikažemo informacije iz baze podataka. Deo select_list omogućava nam da odredimo vrstu informacije koju želimo da prikažemo. Naredba FROM u drugom redu određuje specifičnu tabelu ili tabele u bazi podataka, a naredba WHERE pruža nam mogućnost da ograničimo rezultate na one zapise koji zadovoljavaju utvrđeni uslov ili uslove – condition(s).
Poslednje tri naredbe predstavljaju napredne odlike koje se nalaze van domena ovog odeljka – istražićemo ih u sledećim člancima o SQL-u.
Najlakše je savladati SQL proučavajući primere. U tom smislu, trebalo bi da počnemo sa pregledanjem nekih upita u bazama podataka. U ovom odeljku ćemo koristiti tabelu zaposlenih koja se nalazi u kadrovskoj službi zamišljene XZY komapanije da bismo ilustrovali sve naše upite.
Prikazaćemo celu tabelu:
EmployeeID | LastName | FirstName | Salary | ReportsTo |
1 | Smith | John | 32000 | 2 |
2 | Scampi | Sue | 45000 | NULL |
3 | Kendall | Tom | 29500 | 2 |
4 | Jones | Abraham | 35000 | 2 |
5 | Allen | Bill | 17250 | 4 |
6 | Reynolds | Allison | 19500 | 4 |
7 | Johnson | Katie | 21000 | 3 |
Prikazivanje podataka iz cele tabele
Direktor kadrovske službe u XYZ kompaniji prima mesečni izveštaj o platama zaposlenih i sve potrebne informacije za svakog zaposlenog u kompaniji. Generisanje takvog izveštaja je primer najjednostavnije forme naredbe SELECT. Ona jednostavno prikazuje sve informacije koje su sadržane u tabeli u bazi podataka – u svakom redu i svakoj koloni. Napisaćemo upit koji dovodi do tog rezultata:
SELECT *
FROM employees
Prilično jednostavno, zar ne? Zvezdica (*) koja se pojavljuje u select_list je džoker koji se koristi da obavesti bazu podataka da želimo da prikažemo podatke iz svih kolona u tabeli zaposlenih identifikovanih u naredbi FROM. Pošto smo želeli da prikažemo sve podatke iz baze informacija, nije bilo potrebno da koristimo naredbu WHERE da bismo ograničili redove izabrane iz tabele. Ovako izgledaju rezultati našeg upita:
EmployeeID | LastName | FirstName | Salary | ReportsTo |
———- | ——– | ——— | —— | ——— |
1 | Smith | John | 32000 | 2 |
2 | Scampi | Sue | 45000 | NULL |
3 | Kendall | Tom | 29500 | 2 |
4 | Jones | Abraham | 35000 | 2 |
5 | Allen | Bill | 17250 | 4 |
6 | Reynolds | Allison | 19500 | 4 |
7 | Johnson | Katie | 21000 | 3 |
Uvod u relacije u bazama podataka
Izraz „relacioni“ koji koristimo kad govorimo o bazama podataka odnosi se na veze koje postoje između tabela.
Oni koji tek počnu da se bave bazama podataka veoma često ne mogu odmah da uoče razliku između baza podataka i tabelarnih proračuna. Uspevaju da vide tabele ispunjene podacima i shvataju da im baze podataka omogućavaju da organizuju i izvlače podatke na drugačije načine, ali ne uspevaju da prepoznaju značaj relacije između podataka zbog čega se tehnologija relacionih baza podataka tako zove.
Relacija vam omogućavaju da opišete veze između različitih tabela baza podataka na izuzetno moćan način. Te relacije mogu da se iskoriste za obavljanje naprednih međutabelarnih upita, koji su poznati kao JOINS, odnosno skup rezultata koji je dobijen povezivanjem informacija iz dve tabela.
Tipovi relacija u okviru baze podataka
Postoje tri različita tipa relacija u okviru baze podataka. Svaka relacija je dobila naziv prema broju redova u tabeli koji bi mogli da uđu u relaciju i svaki od ova tri tipa relacija pojavljuje se između dve tabele.
Relacije „jedan prema jedan“ se javljaju kad se svaki unos u prvoj tabeli uklapa sa jednim i samo jednim zapisom u drugoj tabeli. Relacije „jedan prema jedan“ se retko kad koriste jer je često mnogo jednostavnije staviti sve informacije u jednu tabelu. Neki kreatori baza podataka koriste prednosti ove relacije pri stvaranju tabela koje sadrže podskup podataka iz druge tabele.
Relacije „jedan prema više“ su najčešći tip relacija koji se koristi u bazama podataka. Javlja se onda kad se jedan zapis iz Tabele A uklapa sa jednim ili više zapisa iz Tabele B, ali se, pri tom, svaki zapis iz Tabele B uklapa samo sa jednim zapisom iz Tabele A. Na primer, relacija između tabele Teachers (Nastavnici) i tabele Students (Učenici) u bazi podataka osnovne škole predstavljao bi tip „jedan prema više“ jer svaki učenik ima samo jednog nastavnika, ali svaki nastavnik ima veliki broj učenika. Takav tip relacije „jedan prema više“ onemogućava pojavu dupliranja podataka.
Relacije „više prema više“ javljaju se kad se svaki zapis u Tabeli A poklapa sa jednim ili više zapisa u Tabeli B, a svaki zapis u Tabeli B poklapa se sa jednim ili više zapisa u Tabeli A. Na primer, relacije između tabele Teachers (Nastavnici) i tabele Courses (Predmeti) u osnovnoj školi verovatno će biti tipa „više prema više“ jer svaki nastavnik može da podučava više od jednog predmeta, a više od jednog nastavnika može da podučava jedan predmet.
Rekurzivne relacije: Poseban slučaj
Rekurzivne relacije se pojavljuju kad imamo samo jednu tabelu. Da bi se objasnio taj tip relacije obično se koristi primer tabele Employees (Zaposleni) koja sadrži informacije o šefu svakog radnika. Svaki šef je takođe radnik i ima svog šefa. U tom slučaju govorimo o rekurzivnoj relaciji „jedan prema više“ jer svaki radnik ima jednog šefa, a svaki šef može da ima više od jednog radnika.
Uspostavljanje relacija pomoću stranog ključa
Relacije između tabela uspostavljate pomoću definisanja stranog ključa. Taj ključ pokazuje relacionoj bazi podataka kakav odnos treba uspostaviti između tabela. U mnogim slučajevima, Tabela A sadrži primarne ključeve koji se referenciraju na Tabelu B.
Hajde ponovo da razmotrimo primer tabela Teachers (Nastavnici) i Students (Učenici). Tabela Teachers sadrži samo identifikacioni broj, ime i kolonu u kojoj se nalazi naziv predmeta (Course):
Tabela Students obuhvata identifikacioni broj, ime i kolonu u kojoj se nalazi strani ključ (Teacher_FK).
Kolona Teacher_FK u tabeli Students referencira vrednost primarnog ključa nastavnika u tabeli Teachers.
Veoma često kreatori baza podataka koriste “PK“ (primary key – primarni ključ) ili “FK” (foreign key – strani ključ) u nazivu tabele da bi lako prepoznali kolonu primarnog ili stranog ključa.
Obratite pažnju da ove dve tabele ilustruju relaciju „jedan prema više“ između nastavnika i učenika.
Relacije i referencijalni integritet
Kad ste tabeli dodali strani ključ, možete da kreirate ograničenje baze podataka koje uspostavlja referencijalni integritet između dve tabele, a to, s druge strane, održava relaciju između dve tabele nepromenljivom. Kad jedna tabela ima strani ključ druge tabele, koncept referencijalnog integriteta kaže da svaka vrednost stranog ključa u Tabeli B mora da se odnosi na postojeći zapis u Tabeli A.
Uspostavljanje relacija
U zavisnosti od toga kako ste kreirali bazu podataka, relacije između tabela možete uspostaviti na različite načine. Program Access kompanije „Majkrosoft“ vam obezbeđuje čarobnjaka koji vam jednostavno omogućava da povežete tabele i istovremeno vam nameće referencijalni integritet.
Ako pište neposredno u SQL-u, prvo ćete kreirati tabelu Teachers (Nastavnici) i kolonu ID ćete postaviti kao primarni ključ.
CREATE TABLE Teachers (
InstructorID INT AUTO_INCREMENT PRIMARY KEY,
Teacher_Name VARCHAR(100),
Course VARCHAR(100)
);
Kad kreirate tabelu Students (Učenici), postavljate kolonu Teacher_FK kao strani ključ koja se referencira na kolonu InstruktorID u tabeli Teachers.
CREATE TABLE Students (
StudentID INT AUTO_INCREMENT PRIMARY KEY,
Student_Name VARCHAR(100), Teacher_FK INT,
FOREIGN KEY (Teacher_FK) REFERENCES Teachers(InstructorID) )
);
Korišćenje relacija za spajanje tabela
Kad ste kreirali jednu ili više relacija u bazi podataka, možete iskoristiti njihove mogućnosti koristeći upite JOIN u SQL-u da biste kombinovali informacije iz većeg broja tabela. Najuobičajeniji tip povezivanja (JOIN) je SQL-ov INNER JOIN ili jednostavno povezivanje. Taj tip povezivanja prikazuje sve zapise koji zadovoljavaju povezan uslov iz većeg broja tabela. Na primer, uslov JOIN će prikazati Student_Name, Teacher_Name, i Course gde strani ključ u tabeli Student odgovara primarnom ključu u tabeli Teachers:
SELECT Students.Student_Name, Teachers.Teacher_Name, Teachers.Course
FROM Students
INNER JOIN Teachers
ON Students.Teacher_FK=Teachers.InstructorID;
Takav izraz kreira tabelu koja izgleda ovako:
Returned Table from the SQL Join Statement | ||
Student_Name | Teacher_Name | Course |
Lowell Smith | John Doe | English |
Brian Short | John Doe | English |
Corky Mendez | Jane Schmoe | Math |
Monica Jones | John Doe | English |