Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Dizajn baze - Biblioteka

[es] :: MySQL :: Dizajn baze - Biblioteka

[ Pregleda: 4482 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Bojan Zivanovic
Freelance programer
Pančevo,Srbija

Član broj: 32974
Poruke: 146
194.106.171.*

Jabber: Bojan_Zivanovic@elitesecurity.org
Sajt: bojanz.blogspot.com


Profil

icon Dizajn baze - Biblioteka27.03.2005. u 15:59 - pre 231 meseci
Radim program za upravljanje bibliotekom (clanovi, knjige, iznajmljivanje...). Pocetnik sam, a ovakav program zahteva prilicno kompleksnu bazu podataka. Ispod je moj dizajn (tabele).
Vi mi kazite sta ne valja, sta bi moglo bolje da se uradi..
.Trudio sam se da barem malo ispostujem normalizacijske norme (barem nije sve jedna tabela :)))
Code:

    CREATE TABLE knjige (
    knjigaID int NOT NULL auto_increment,
    autorID varchar(50),
    tematikaID varchar(40),
    naslov varchar(50),
    izdanje varchar(20),
    izdavacID varchar(40),
    stamparijaID varchar(40),
    brKopija smallint,
    ISSN tinyint,
    UDK varchar(30),
    godina smallint,
    impressum text,
    napomena text,
    sadrzaj text,
    PRIMARY KEY (knjigaID)
    );
    
    CREATE TABLE casopisi (
    casopisID int NOT NULL auto_increment,
    tematikaID varchar(40),
    izdavacID varchar(40),
    stamparijaID varchar(40),
    naslov varchar(50),
    broj smallint,
    ISSN smallint,
    UDK varchar(30),
    inventarskiBr smallint,
    godina smallint,
    brKopija smallint,
    PRIMARY KEY (casopisID)
    );
    
    CREATE TABLE nkgradja (
    nkgradjaID int NOT NULL auto_increment,
    npredmetID varchar(20),
    vrsta varchar(15),
    autorID varchar(50),
    naslov varchar(50), 
    inventarskiBr smallint,
    UDK varchar(30),
    napomena text,
    PRIMARY KEY (nkgradjaID)
    );
    
    CREATE TABLE izdavaci (
    izdavacID int NOT NULL auto_increment,
    izdavac varchar(40),
    PRIMARY KEY (izdavacID)
    );
    
    CREATE TABLE stamparije (
    stamparijaID int NOT NULL auto_increment,
    ime varchar(40),
    PRIMARY KEY (stamparijaID)
    );
    
    CREATE TABLE nastavni_predmeti (
    npredmetID int NOT NULL auto_increment,
    ime varchar(20),
    PRIMARY KEY (npredmetID)
    );
    
    CREATE TABLE autori (
    autorID int NOT NULL auto_increment,
    ime varchar(50),
    PRIMARY KEY (autorID)
    );
    
    CREATE TABLE tematike (
    tematikaID int NOT NULL auto_increment,
    ime varchar(40),
    PRIMARY KEY (tematikaID)
    );
    
    CREATE TABLE admin (
    adminID int NOT NULL auto_increment,
    username varchar(25),
    password char(40),
    email varchar(35),
    PRIMARY KEY (adminID)
    );
    
    CREATE TABLE clanovi (
    clanoviID int NOT NULL auto_increment,
    ime varchar(60),
    razred varchar(25)
    adresa varchar(45),
    telefon varchar(15),
    mobilni varchar(15),
    email varchar(35),
    napomena text,
    PRIMARY KEY (clanoviID)
    );
    
    CREATE TABLE zaduzenja (
    zaduzenjaID int NOT NULL auto_increment,
    clanoviID int,
    knjigeID int,
    datum int,
    PRIMARY KEY(zaduzenjaID)
    );



 
Odgovor na temu

CandyMan

Član broj: 3420
Poruke: 147



+49 Profil

icon Re: Dizajn baze - Biblioteka28.03.2005. u 08:40 - pre 231 meseci
Imam nekoliko predloga...
Časopise, knjige i nkgrađu (šta god to bilo) staviti u jednu tabelu npr. izdanje pošto je očigledno da se veliki broj polja podudara. Izdanja identifikovati nekim internim ID-om i razlikovati ih jednim poljem koje će biti spoljni ključ iz tabele vrsta_izdanja. Kako bi u biblioteci počeo da vodiš npr. diskove sa obrazovnim softverom?
Primerke izdanja držati u posebnoj tabeli npr. primerak_izdanja i označavati ih inventarskim_brojevima.
Izdavači i štamparije su ok.
Autore i izdanja treba spojiti vezom više-više tj. agregatnom tabelom npr. izdao_izdanje pošto je česta pojava da knjigu objavi grupa autora, naročito ako se radi o udžbenicima.
Slična situacija je i sa tematikama, takođe bi ih povezao sa izdanjima preko agregatne tabele - nije retkost da knjiga ili časopis obrađuje više tema. U tom slučaju i nastavni_predmeti mogu biti i jedna od tema tako da ne treba da postoje odvojeno.
Zaduženjima nešto fali... Ovako kako su napravljena, jedini način da nekog razdužiš jeste da obrišeš zaduženje, čime se gube podaci o tome kome je koji primerak izdanja pozajmljen i kada, a to ni slučajno ne želiš. Jedno od rešenja je da imaš datum izdavanja i datum vracanja u tabeli zaduženja. Tabelu zaduženja treba povezati sa tabelom primerak_izdanja.

Toliko za početak, da čujemo ostale...
Nisam ni znao da znam dok nisam prob'o!
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Dizajn baze - Biblioteka28.03.2005. u 13:30 - pre 231 meseci
Slazem se s CandyManom u vezi agregatnih tabela.
Bojane za pocetnika si sasvim solidno normalizovao tabele i ovako povrsnim pregledom ne mogu ustanoviti neki bitniji nedostatak.
Vidim da se katalogizacija vrsi po ISSN i po tematici. Ako se te knjige i casopisi slazu po odredjenim i sistematski obiljezenim regalima, mozda bi bilo pametno dodati jos jednu tabelu pozicija, u kojoj bi se nalazila polja za oznacavanje pozicije odredjene knjige ili casopisa u regalima. Npr.
Code:

CREATE TABLE pozicija (
pozicijaID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
regalID TINYINT(3) UNSIGNED NOT NULL,
policaID TINYINT(2) UNSIGNED NOT NULL,
blokID TINYINT(3) UNSIGNED NOT NULL,
PRIMARY KEY(pozicijaID)
);

pozicijaID je polje na osnovu kojeg ces jednoznacno raspoznavati svaku poziciju odredjenog izdanja.
regalID je broj regala.
policaID je broj police u tom regalu.
blokID je broj bloka na toj polici u slucaju da je polica veoma dugacka.

E sad, mozes kreirati jos jednu agregatnu tabelu, koja bi povezivala odredjenu knjigu ili casopis sa pripadajucom pozicijom u regalu, a mozes i u tabeli sa izdanjima staviti referencu na pozicijaID. Prepustam tebi testiranje tih varijanti radi dobijanja sto boljih performansi.

Inace, koristi DATETIME za polja sa datumima, a ne int.
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

Bojan Zivanovic
Freelance programer
Pančevo,Srbija

Član broj: 32974
Poruke: 146
194.106.171.*

Jabber: Bojan_Zivanovic@elitesecurity.org
Sajt: bojanz.blogspot.com


Profil

icon Re: Dizajn baze - Biblioteka28.03.2005. u 17:57 - pre 231 meseci
Ne bih da zvucim glupo (ali moram), sta su to agregatne tabele? I kako bi se uklopile u ove moje tabele (sta bi promenile, kako bi izgledale...)
Za polja sa datumima koristim int, zato sto vreme ubacujem u bazu kao unix timestamp.
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Dizajn baze - Biblioteka28.03.2005. u 18:54 - pre 231 meseci
Agregatne tabele su tzv. "lookup" tabele. Mozda ti je taj pojam poznatiji, a i ja ga cesce koristim.
Npr. ako su jednu knjigu napisali 3 autora, ti ces u tabeli knjige imati tri zapisa (recorda) sa identicnim podacima, osim sto ce autorID biti razlicit. Da bi se izbjeglo to ponavljanje podataka i bespotrebno zauzimanje prostora, moguce je kreirati dodatnu agregatnu (lookup) tabelu, koja ce sadrzavati vezu (referencu) izmedju tabela knjige i autori.
Konkretno:
Code:
CREATE TABLE knjiga_autor (
knjigaID mediumint(8) NOT NULL,
autorID mediumint(8) NOT NULL
);
Tako vise ne moras u tabeli knjige drzati polje autorID.

Nadam se da ti je sad malo jasnije ...

Ovaj nacin stvaranja agregatnih tabela pripada visem nivou normalizacije.
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

Bojan Zivanovic
Freelance programer
Pančevo,Srbija

Član broj: 32974
Poruke: 146
194.106.171.*

Jabber: Bojan_Zivanovic@elitesecurity.org
Sajt: bojanz.blogspot.com


Profil

icon Re: Dizajn baze - Biblioteka28.03.2005. u 19:07 - pre 231 meseci
Jasnije mi je, ali ne shvatam kako bi to meni pomoglo, ako ti nije tesko daj primer. Mislim, kako to resava problem sa tri autora knjige?
Clan pre tebe je spomenuo da bi bilo dobro da spojim tabele. Da li da to uradim? I sta raditi sa poljima koje se ne podudaraju? Da ih stavim svejedno pa da popunjavam samo tamo gde treba?
Inace, nkgradja je ne knjizna gradja (npr. video kasete)
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Dizajn baze - Biblioteka28.03.2005. u 19:32 - pre 231 meseci
Ne vjerujem da bi bilo optimalnije spajati gorespomenute tabele, jer se neknjizevna gradja ipak razlikuje od knjizevne. Casopisi nemaju vise autora, nego samo jednog izdavaca. Casopisi imaju jedan te isti naziv, samo im se mijenjaju brojevi izdanja.
Videokasete imaju rezisere, glumce i td., tako da se ne mogu bas prilagoditi u univerzalni (zajednicki) izgled tabele.

Mislio sam da sam ti dovoljno jasno prikazao razliku sa agregatnom tabelom i bez nje...
Bez agregatne tabele imas 3 skoro identicna zapisa, npr.:
Code:

| 1 | 1 | 1 | Uvod u baze podataka |  2 | 1 |  1 | 10000 | 1238923 | UDKblabla | 2005 | impressum ko, sta, gdje, kako, kad, kome .. i tako 200 znakova | napomena bla bla .. i tako 200 znakova | sadrzaj bla bla .. i tako 1000 znakova |

| 1 | 2 | 1 | Uvod u baze podataka |  2 | 1 |  1 | 10000 | 1238923 | UDKblabla | 2005 | impressum ko, sta, gdje, kako, kad, kome .. i tako 200 znakova | napomena bla bla .. i tako 200 znakova | sadrzaj bla bla .. i tako 1000 znakova |

| 1 | 3 | 1 | Uvod u baze podataka |  2 | 1 |  1 | 10000 | 1238923 | UDKblabla | 2005 | impressum ko, sta, gdje, kako, kad, kome .. i tako 200 znakova | napomena bla bla .. i tako 200 znakova | sadrzaj bla bla .. i tako 1000 znakova |
Primjecujes koliko se podataka ponavlja samo zbog dodatnog autorID ?

Sa agregatnom tabelom bi u tabeli knjige imao ovako nesto (primijeti da je kolona autorID izbacena):
Code:
| 1 | 1 | Uvod u baze podataka |  2 | 1 |  1 | 10000 | 1238923 | UDKblabla | 2005 | impressum ko, sta, gdje, kako, kad, kome .. i tako 200 znakova | napomena bla bla .. i tako 200 znakova | sadrzaj bla bla .. i tako 1000 znakova |

U tabeli autori bi imao:
Code:
| 1 | Autor 1 |
| 2 | Autor 2 |
| 3 | Autor 3 |

A u agregatnoj tabeli knjiga_autor bi imao:
Code:
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |


Vidis li razliku?

Imena autora bi dobijao sa relacijom:
Code:

SELECT knjige.naslov, autori.ime FROM knjige, autori, knjiga_autor WHERE knjiga_autor.knjigaID = knjiga.knjigaID AND knjiga_autor.autorID = autori.autorID;


Eto, ako sad nije jasno, odoh u konobare :)
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

Bojan Zivanovic
Freelance programer
Pančevo,Srbija

Član broj: 32974
Poruke: 146
194.106.171.*

Jabber: Bojan_Zivanovic@elitesecurity.org
Sajt: bojanz.blogspot.com


Profil

icon Re: Dizajn baze - Biblioteka29.03.2005. u 12:55 - pre 230 meseci
Hvala Dejane. Sada mi je sve jasno. Znas kada bi ja imao zivaca da se prenemazem ovako sa nekim? Nikada :)
ES je cudo. Hvala i tebi Bogdane, na sugestijama. Odoh u stetu, javim se kada opet zapnem :)
 
Odgovor na temu

techcode
Aleksandar Petrovic
Amsterdam

Član broj: 55455
Poruke: 188
85.222.130.*



+3 Profil

icon Re: Dizajn baze - Biblioteka28.04.2005. u 13:55 - pre 229 meseci
Ovo me je podstaklo na razmisljanje, da li MySQL obezbedjuje nesto za povezivanje relacija/tabela.

Nesto se ne secam da je moguce definisati spoljni kljuc (foregin key) u MySQL-u?

Verujem da se onda deo posla (ako toga nema) prebacuje na sam kod aplikacije koja koristi MySQL, barem sam ja tako radio.
 
Odgovor na temu

caiser

Član broj: 4677
Poruke: 2462
*.EUnet.yu.

ICQ: 162962030


Profil

icon Re: Dizajn baze - Biblioteka28.04.2005. u 14:22 - pre 229 meseci
Naravno da je moguce. I to od verzije 3.23.44.

http://dev.mysql.com/doc/mysql...b-foreign-key-constraints.html
 
Odgovor na temu

[es] :: MySQL :: Dizajn baze - Biblioteka

[ Pregleda: 4482 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.