s obzirom na kolicinu informacija koje imam u tabeli, odgovor ne utice na soluciju koju sada trenutno imam, ali bih ipak volio znati…
pretpostavimo da imam tabelu sa adresama ljudi. adrese pripadaju ljudima koji su zaposleni u razlicitim kompanijama. svakak kompanija koristi adresar za sebe i kompanije NE SMIJU vidjeti rekorde drugih kompanija.
za pristup nekoj adresi je dovoljno da imam samo jedan podatak: adresa_id (primary key). medjutim, da bih izbjeg’o da kompanije vide druge adrese koristim primary key napravljen od adresa_id i kompanija_id
create table (
adresa_id int(8) not null auto_increment,
kompaija_id int(8) not null,
adresa_1 varchar(255) not null,
adresa_2 varchar(255) not null,
grad varchar(100) not null,
...
primary key(adresa_id, kompanija_id)
);
posto su addresa_id i kompanija_id zajedno “indexirani” da li ima veze da li koristim
ili
odnosno, kad kreiram tabelu da li postoji razlika izmedju
create table (
adresa_id int(8) not null auto_increment,
kompaija_id int(8) not null,
...
primary key(adresa_id, kompanija_id)
);
i
create table (
kompaija_id int(8) not null,
adresa_id int(8) not null auto_increment,
...
primary key(kompanija_id, adresa_id)
);
Jedina razlika je u tome što kad primary key definišeš kao:
create table (
kompaija_id int(8) not null,
adresa_id int(8) not null auto_increment,
...
primary key(kompanija_id, adresa_id)
);
Onda upit
koristi indeks, dok upit
ne koristi index. Ako u upitu imaš sva polja iz indeksa
select * from adesar where adresa_id=123 and kompanija_id=456
select * from adesar where kompanija_id=456 and adresa_id=123
onda redoslijed njihovog navođenja ne bi smio biti bitan.
Evo ti uprosto odgovor: ne moze drugo rjesenje (da je kompanija_id primary key) jer, kako kazes, vise kompanija cuva adrese tu, tako da je sigurno da ce se jedan kompanija_id ponoviti. To znaci da kompanija_id nije unique polje ergo ne moze biti primary key.
Nema toliko puno za čitati većinom je kod A ja sam afana skontao da ta kolona “kompanija” označava kojem od afanovih klijenata pripada adresar a ne kompaniju koja se nalazi na adresi, a ako sam pogriješio onda se izvinjavam.