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

Kompozitni primarni kljuc ili ne ?

[es] :: MySQL :: Kompozitni primarni kljuc ili ne ?

[ Pregleda: 6278 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Tudfa
Jovicevic Vladimir

Član broj: 152699
Poruke: 384
89.216.200.*



+3 Profil

icon Kompozitni primarni kljuc ili ne ?01.08.2007. u 18:41 - pre 203 meseci
Pozdrav !
Cisto informacije radi pre nego sto predjem na konkretan problem ,
imam tabelu glumac koja treba da sadrzi informacije o glumcima i izgleda ovako :
glumac (id,ime,prezime,datum_rodjenja,slika,info). Takodje ova tabela
je u vezi m:n sa tabelom film i vezane su pomocu druge relacije - uloge.

Posto mi je potrebno da pokrijem mogucnost da postoje dva glumca sa
istim imenom i prezimenom (wtf?) da li je bolje:

1. da primarni kljuc bude slozen (ime,prezime,datum_rodjenja) ili
2. da primarni kljuc bude atribut id , a da se potrebne provere odrade
pomocu PHP-a pri unosu ?
 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Član broj: 53780
Poruke: 576
*.ADSL.neobee.net.

Sajt: www.baze-podataka.net


+4 Profil

icon Re: Kompozitni primarni kljuc ili ne ?01.08.2007. u 20:16 - pre 203 meseci
Definitivno nezavisna kolona koju si ti nazvao 'id'.

Ja svoj katalaog filmova (i glumaca) vodim po šiframa sa IMDb. Nema šanse da dva puta unesem istog glumca (glumicu) samo zato što sam pri pretrazi upisao Sweyze umesto Swayze (IMDb sifra 664). Veća je šansa da ja dva puta unesem istog glumca nego IMDb, zar ne?
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
 
Odgovor na temu

Tudfa
Jovicevic Vladimir

Član broj: 152699
Poruke: 384
89.216.200.*



+3 Profil

icon Re: Kompozitni primarni kljuc ili ne ?01.08.2007. u 22:06 - pre 203 meseci
Ovo sa IMDB-om je dobar predlog i stoji da je manja verovatnoca pogresnog unosa ...
Nisi mi rekao sta je razlog da ne koristim slozeni primarni kljuc ? On bi obezbedio da
ne mogu da se unesu dva glumca sa istim imenom,prezimenom i datumom rodjenja pa ne bi bilo provere.
Inace , i dalje bi koristio id samo kao UNIQUE indeks sa ili bez AUTOINCREMNT-a , za povezivanje sa drugim tabelama.
Ne bih da komplikujem i da pricam sta da nema IMDB-a , nego me interesuje zasto surogatni kljuc .
Pozdrav
 
Odgovor na temu

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Re: Kompozitni primarni kljuc ili ne ?02.08.2007. u 08:29 - pre 203 meseci
Razlozi:
- teoretski je moguce da postoje 2 covjeka istog imena i rodjeni na isti dan.
- koliko sam primjetio, na IMDBu ima dosta ljudi istog imena i prezimena. Takodje, za mnogo njih ne postoji datum rodjenja. To znaci da ti neces moci unijeti glumca kojem ne znas datum rodjenja? Jesi spreman da prihvatis to ogranicenje?

:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Član broj: 53780
Poruke: 576
*.simex-su.co.yu.

Sajt: www.baze-podataka.net


+4 Profil

icon Re: Kompozitni primarni kljuc ili ne ?02.08.2007. u 09:30 - pre 203 meseci
EDIT: Pretekao me Misko :)

Razlozi da kombinacija imena, prezimena i datuma rođenja nebude ključ:
1. Ključni atributi moraju da imaju vrednost (NOT NULL). Da li si siguran da znaš datume rođenja svih glumaca? Ja ne znam.
2. Ključni atributi moraju jedinstveno da identifikuju red u tabeli. Da li si siguran da ne postoje dva glumca sa istim imenom, prezimenom i datumom rođenja? Ja nisam. Marfijev zakon vreba :)
3. Ključni atributi bi trebali da imaju izvesnu meru stabilnosti. Imena to nemaju.

Ne mogu da se setim kada sam (i da li sam uopšte) upotrebio kompozitni ključ za jak entitet.


-----------------------------

Iz predhodnog posta zaključujem da ti nije jasan koncept primarnog ključa u SQL-u. Pokušaću da ga objasnim.

Predpostavimo da imamo tabelu:
Code:

CREATE TABLE glumci (
  sifra_glumca INTEGER NOT NULL CHECK (sifra_glumca > 0),
  ime_glumca VARCHAR(15) NOT NULL,
  prezime_glumca VARCHAR(30) NOT NULL,
  datum_rodjenja_glumca DATE NOT NULL
);

Predpostavimo da imamo dva ključa:
1. (sifra_glumca),
2. (ime_glumca, prezime_glumca, datum_rodjenja_glumca).

Jedan od ova dva ključa možemo (ali nemoramo) da proglasimo primarnim ključem.

Proglašenjem jednog od ključeva za primarni ključ se samo kaže SQL sistemu: 'To ti je DEFAULT ključ za tu tabelu.' Ovo olakšava kasnije referenciranje jer sistem podrazmeva po kom ključu hoćemo da izvršimo referenciranje, pa referenciranje po primarnom ključu ne moramo eksplicitno navoditi.

Dodacemo jos jednu tabelu:
Code:

CREATE TABLE glumacke_ekipe (
  sifra_filma INTEGER NOT NULL,
  sifra_glumca INTEGER NOT NULL,
  CONSTRAINT pk_gle PRIMARY KEY (sifra_filma, sifra_glumca)
);

I zelim da postavimo refernecijalni integritet koji ce spreciti da se u tabeli glumacke_ekipe pojavi glumac kojeg nemamo u tabeli glumaca.

Sada imamo dva slučaja.

Prvi slučaj

Recimo da proglasimo ključ (ime_glumca, prezime_glumca, datum_rodjenja_glumca) za primarni ključ.
Code:

ALTER TABLE glumci
  ADD CONSTRAINT pk_glu
  PRIMARY KEY (ime_glumca, prezime_glumca, datum_rodjenja_glumca);

CREATE UNIQUE INDEX ak_glu_s ON glumci(sifra_glumca);

Tada se spomenuti referencijalni integritet mora napisati:
Code:

-- obavezno navodjenje referencirane kolone
ALTER TABLE glumacke_ekipe
  ADD CONSTRAINT fk_gle_glu
  FOREIGN KEY (sifra_glumca)
  REFERENCES glumci (sifra_glumca);


Drugi slučaj

Recimo da proglasimo ključ (sifra_glumca) za primarni ključ.
Code:

ALTER TABLE glumci
  ADD CONSTRAINT pk_glu
  PRIMARY KEY (sifra_glumca);

CREATE UNIQUE INDEX ak_glu_ipd ON glumci(ime_glumca, prezime_glumca, datum_rodjenja_glumca);

Tada se spomenuti referencijalni integritet može napisati:
Code:

-- bez navodjenja referencirane kolone
ALTER TABLE glumacke_ekipe
  ADD CONSTRAINT fk_gle_glu
  FOREIGN KEY (sifra_glumca)
  REFERENCES glumci; 

A može se napisati i kao:
Code:

-- sa navodjenjem referencirane kolone
ALTER TABLE glumacke_ekipe
  ADD CONSTRAINT fk_gle_glu
  FOREIGN KEY (sifra_glumca)
  REFERENCES glumci (sifra_glumca); 


"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
 
Odgovor na temu

Tudfa
Jovicevic Vladimir

Član broj: 152699
Poruke: 384
89.216.200.*



+3 Profil

icon Re: Kompozitni primarni kljuc ili ne ?02.08.2007. u 10:46 - pre 203 meseci
Pozdrav chachka,
tabele iz moje baze jesu kreirane na nacin i sa svim ogranicenjima koje si predlozio (id jedinstveno indetifikuje zapis,normalizacija,referecijalni integritet).
Pre nego sto sam krenuo sa unosom podataka samo sam se zapitao da li je to
moglo da se izvede i na drugi nacin sa atributima koji pripadaju datom entitetu sami po sebi .
To ne znaci da ne shvatam koncept primarnog kljuca (omg) nego da nisam video nacin da jedistveno idetifikujem
zapis bez atributa id . Posto trenutno imam malo prakse , interesovalo me je da li je ovo nekako moguce ,
a sad vidim nije u potpunosti (jer jednog glumca najbolje identifkuje id posto nemamo njegov maticni broj ).
Vidim da ti poznajes materiju dobro i svaka cast za to, pomogao mi je tvoj odgovor da ne menjam bazu tj. da ostavim tabele sa atributom id kao PK. Hvala ;-)
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
91.150.127.*



+11 Profil

icon Re: Kompozitni primarni kljuc ili ne ?02.08.2007. u 12:39 - pre 203 meseci
I inace mnogi teoreticari preorucuju da se koristi surogat id za primarni kljuc. Smatram a je to prakticnije resenje.
 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Član broj: 53780
Poruke: 576
*.simex-su.co.yu.

Sajt: www.baze-podataka.net


+4 Profil

icon Re: Kompozitni primarni kljuc ili ne ?03.08.2007. u 11:07 - pre 203 meseci
@Broker: nemoj ovo shvatiti kao flame. Navedi imena i izvore (knjige, artikle, sajtove) od nekoliko tih teoreticara. Voleo bih da procitam (ako vec nisam) ta misljenja.

@Tudfa: Pod 'neshvatanje koncepta primarnog kljuca' sam mislio na 'neshvatanje razlike izmedju kljuca i primarnog kljuca u SQL-u'.
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
 
Odgovor na temu

[es] :: MySQL :: Kompozitni primarni kljuc ili ne ?

[ Pregleda: 6278 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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