Adatbázis tervezet ellenőrzés kérelem
Sziasztok. valaki, aki nagyon ráér meg tudná nézni nekem, hogy ez így jó-e, vagy túl van bonyolítva? vagy ha esetleg valami nagyon nem jó benne rámszólna? előre is köszi.
Ez elméletben egy olyan adatbázis, amiben majd különböző szakmák cégeit lehet majd lekérdezni település szerint. Előre is nagyon köszönöm :))
■ Ez elméletben egy olyan adatbázis, amiben majd különböző szakmák cégeit lehet majd lekérdezni település szerint. Előre is nagyon köszönöm :))
CREATE TABLE Cég (
idCég INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
Név VARCHAR NULL,
Cím VARCHAR NULL,
Telefonszám VARCHAR NULL,
E-mail VARCHAR NULL,
webcím VARCHAR NULL,
bejegyzés dátuma DATE NULL,
lejárat dátuma DATE NULL,
PRIMARY KEY(idCég)
);
CREATE TABLE Megye (
idMegye INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
Cég_idCég INTEGER UNSIGNED NOT NULL,
Ország VARCHAR(45) NULL,
Megye VARCHAR(45) NULL,
PRIMARY KEY(idMegye, Cég_idCég),
INDEX Megye_FKIndex1(Cég_idCég)
);
CREATE TABLE Munkakör (
idMunkakör INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
Cég_idCég INTEGER UNSIGNED NOT NULL,
Szakma VARCHAR NULL,
PRIMARY KEY(idMunkakör, Cég_idCég),
INDEX Munkakör_FKIndex1(Cég_idCég)
);
CREATE TABLE Város (
idVáros INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
Megye_idMegye INTEGER UNSIGNED NOT NULL,
Cég_idCég INTEGER UNSIGNED NOT NULL,
Város VARCHAR(45) NULL,
PRIMARY KEY(idVáros, Megye_idMegye, Cég_idCég),
INDEX Város_FKIndex1(Megye_idMegye),
INDEX Város_FKIndex2(Cég_idCég)
);
Ékezetek
Jól látom...
És miért nem használsz távoli kulcsokat?
használ, csak nem tudja? ;)
Szerintem használ (itthon inkább külső kulcsnak hívják), legalábbis az indexek nevében az az "_FK" elég gyanús, csak gondolom a generátor progi a script végére tette őket alter table formában.
Felhő
javaslatok
- Ahol nem lehet null a mező, ott feltétlenül legyen not null jelzés.
- Ne a megye táblában legyen az ország jelzés. Ha mégis, akkor ne szövegesen.
Köszi :)
az indexeket muszáj amúgy belerakni, vagy anélkül is értelmes marad?
mert én úgy számoltam, hogy csak fölösleges adat... vagy nem? :D
Egyébként azért raktam az országot és a megyét egy táblába, mert ha van külön ország+ország kulcs, akkor az ország kulcsot kell tárolni a megye táblába, és van még egy plusz tábla, szerintem feleslegesen..
nem jól látom?
Köszi
mert én úgy számoltam, hogy csak fölösleges adat... vagy nem?
:))
Off
Megtennéd, hogy kevesebbet használod őket! Mondjuk ott, ahol ennek van is jelentősége és értelme.
reOFF
Egyébként meg csak annak örülök, hogy kifejezetten hasznos tippeket kapok itt, (és reméllem nem csak nekem hasznos, hanem egyéb "kezdőknek" is) és jó tudni, hogy van hova fordulni ha a programozás egyik területéhez valaki nem ért.. ennyi. Ez számomra egy kellemes meglepetés volt és örültem neki, és ezt ki is fejeztem a magam módján. Ha ez másokat zavar, hát ... bocsánat érte.
kuszaság (normál forma)
Azzal, hogy minden a céghez kapcsolódó táblában benne van a cég azonosítója is a kulcsban, azzal azt éred el, hogy minden egyes céghez minden esetben fel kell venned egy külön megye, munkakör és város sort. Ez elég sok problémát vet fel.
A gond a különböző entitások közötti kapcsolatok tárolásából adódik. Pl. ha egy cég csak egy városban lehet, akkor tárold le külön a város adatokat, majd a cég táblában legyen egy darab város azonosító. Ha egy cégnek több munkaköre lehet (és egy munkakör is több céghez tartozhat), akkor külön cég adatok, külön munkakör adatok, majd kell egy külön kapcsoló tábla, amiben tudod tárolni a kapcsolatokat.
Valami hasonló lehetne:
Vastag: kulcs mező, dőlt: külső kulcs mező.
Felhő
Jogos
és ha mondjuk külön kapcsoló táblát csinálnék cég(ceg_id, megye_id, város_id)
és külön egyet szakmának? és akkor nincs olyan gond, hogy minden egyes adatot feleslegesen kétszer tárol, ha két szakma van, vagy 2 megye... tehét egyszer lenne minden megye, város és szakma és cég letárolva, és külön 2 tábla van a kapcsolatoknak.
így jól okoskodok? :))
Ez talán azért lenne praktikusabb, mert így a keresést 2, csak kulcsokat tartalmazó táblában meg lehet oldani.. és ha jól sejtem így lényegesen gyorsabb :))
tehát most valahogy így nézne ki: