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

SQL problemcic - postavljanje tabele

[es] :: Baze podataka :: SQL problemcic - postavljanje tabele

[ Pregleda: 1725 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nenadst

Član broj: 10090
Poruke: 15
*.pool.mediaWays.net.



Profil

icon SQL problemcic - postavljanje tabele02.10.2010. u 00:43 - pre 165 meseci
Nije da se bas ne razumem u SQL, ali nije mi jasno kako da napravim sledece:

Imam naprimer tabelu sa nekim sertifikatima!
kako da napravim da jedan sertifikat kao preduslov za ucenje mora da ima dva vec uspesno zavresna sertifikata...
dakle ovako nekako sam ja to zamislio
Broj(primary) | Ime | preduslov (foreign key)
1 | Obican | null
2 | normalni server| 1
3 | normalni sql | 1
4 | master | (e sad ovde nemogu da napisem dva(2 i 3) sertifikata, koja su preduslov da bi se uradio taj master sertifikat)
kako da napravim to najbolje?
 
Odgovor na temu

Zoran.Eremija
Zoran Eremija
SYSTEM ANALYST
Freelancer
Beograd

Član broj: 251342
Poruke: 855
212.178.245.*

Sajt: zoraneremija.wix.com/erem..


+47 Profil

icon Re: SQL problemcic - postavljanje tabele02.10.2010. u 14:19 - pre 165 meseci
Ja bih Vas problem postavio na sledeci nacin

Prikačeni fajlovi
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.dsl.bell.ca.



+79 Profil

icon Re: SQL problemcic - postavljanje tabele02.10.2010. u 21:19 - pre 165 meseci
Ovo nikako nije 'problemcic'. Situacija je ozbiljna, to jest imamo ozbiljan problem. A po Marfijevom zakonu za svaki ozbiljan problem postoji garantovano jednostavno ocigledno resenje, koje je nazalost pogresno. Zoran je ovoga puta nazalost delimicno potpao pod udar marfijevog zakona

Problem je u tome sto dobijanje novog sertifikata X zavisi od prethodno dobijenih sertifikata (A,B,C....). FK moze samo da propise koji su sertifikati dozvoljeni, ali ne i da proveri da li su svi prisutni. Zoranovo resenje jeste u stvari pola resenja. Potrebno ali ne i dovoljno za resenje.

a nije i dovoljno jer treba obezbediti da se novi sertifikat moze dodeliti samo kad su vec dodeljeni svi prethodno zahtevani. Zanci, ne smem da unesem novi red, ako prethodno ne postoje vec redovi definisani u Zoranovoj tabeli SertifikatPreduslov.

Za neke specijalne slucajeve, mogli bi da napisemo FK, ali u opstem slucaju nema resenja. Taj specijalni slucaj je kad svaki sertifikat zavisi od tacno jednog, a taj jedan moze biti iz neke grupe. Na primer, da bi polagao Beton moras imati polozene ili Statiku, ili otpornost materijala ili Matematiku, znaci bilo koji bar jedan od ova tri. Resenje za takav slucaj je interesantno, ali mislim da ovde to nije slucaj.

Za opsti slucaj nema druge nego pisati CHECK constraint koji gleda u prethodne redove iste tabele (minimlan uslov) a moze da zatreba i gledanje u druge tabele (opsti slucaj). Normano, CHECK constraints, za sada, u vecini RDBMS to ne mogu da rade, iako SQL standard to propisuje. Mislim da to moze da uradi PostgresSQL ili Firebird, ne znam tacno, neka me Chachka dopuni ovde, baza koju on koristi mislim da moze da radi ovakve stvari.

Dakle, ako radis na sistemu koji podrzava CHECK constraints koje vide celu tabelu, a i sire, onda idi tim putem. Ako si na MS SQL i slicno, postoji 'workaround'.. Napise se UDF funkcija, koja radi ono sto CHECK ne moze, pa onda CHECK pozove UDF. Imas jedan ili dva napisa o tome i na srpskom jeziku, ovde http://www.baze-podataka.net/2...-funkcija-u-check-constraints/ i ovde http://www.baze-podataka.net/2...nstraint-sql-rezervacija-soba/.

Treba nam vise detalja da bi ti konkretno pomogli. Generalno, trebaju ti verovatno dve tabele:
OsvojeniSertifkati (PolaznikKursa as osoba, OsvojeniSertifikat as sertifikat)
Uslovi (Sertifikat as sertifikat, Preduslov AS sertifikat) (Zoranova tabela)

U tabeli Uslovi, za svaki sertifikat X definises skup sertifikata (A,B.C,D...) koji treba da se osvoje da bi se dobio sertifikat X. Moguce je da za svaki sertifikat X postoji tacno jedan skup preduslova. A moguce je i da se trazi da od recimo 5 prethodnih treba imati bilo koja 3, sto je lako upisati u tabelu Uslovi, ali poprilicno komplikuje pisanje kvarija koji proverava da li je bat jedan uslov ispunjen.

Uslov za insertovanje novog reda u tabelu OsvojeniSertifikati je da u tabeli Sertifikati za posmatrani par (PolaznikKursa , OsvojeniSertifikat ) postoji u tabeli Sertifikati, za istog tog Polaznikakursa, skup serifikata koji se pokalpa sa bar jednim od uslova za sertifikat X u tabeli Uslovi. Ovo je tesko i da se procita, a kamo li da se jos i kveri napise. A kveri ce biti od vrste 'relaciono deljenje' i nisam pametan u ovom momentu da kazem sta ce biti dole a sta gore u 'razlomku'

Zato sam rekao da ovo nije 'problemcic' nego 'ozbiljan problem'. Nivo znanja potreban da se ovo resi, prevazilazi 'standardno SQL znanje, pa nemoj da se osecas manje vrednim sto te ovakav problem muci. Ovakvim problemima tek pocinju da se bave i veliki SQL mozgovi, kalibra Chris Date, Joe Chelko i Iztik Ben Gan, i jos uvek nemaju generalno resenje. Mi naravno ne mozemo da cekamo da nam oni razviju teoriju i resenje, mozemo nesto isami valjda da se pomucimo i uradimo.

Ovo bi mogla da bude prilicno zapetljana mozgalica, samo da vidimo precizno sta se trazi.



 
Odgovor na temu

nenadst

Član broj: 10090
Poruke: 15
*.pool.mediaWays.net.



Profil

icon Re: SQL problemcic - postavljanje tabele03.10.2010. u 13:23 - pre 165 meseci
momci hvala puno stvarno
pogotovo za dobre linkove, sve je lepo objasnjeno, nisam ni znao da postoji takav domaci sajt ;)
i koristicu CHECK U svakom slucaju, imam SQL 2008,
 
Odgovor na temu

[es] :: Baze podataka :: SQL problemcic - postavljanje tabele

[ Pregleda: 1725 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

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