tervezés: redundánsan, vagy anélkül
Egy projekt kivitelezése közben két alternatíva vetődött fel, amik közül nem tudok dönteni:
A lényeg annyi, hogy adatbázisba tárolnék e-maileket, neveket és csoportokat, körülbelül mint egy on-line telefonkönyvben. Minden regisztrált felhasználó feltölthet ide adatokat. (hogy miért csinálná ezt, azt most hagyjuk!:))
Így ha egyszerüen akarnám megcsinálni, akkor létrehoznék egy táblát:
address
------------
name ( ismerős neve )
mail ( ismerős mailcíme )
group ( ismerős melyik csoportba van - integer )
parent ( annak a usernek az azonosítója, aki feltöltötte, csak ő fér hozzá -int)
De arra gondoltam, hogy így ha egy embert sokan feltöltenek, akkor a mailcíme sokszor megjelenik az adatbázisba, így a következőt találtam ki:
table: mails
------------
mailID ( auto_inc, primary_key )
mail
table: names
------------
name
mailID ( primary_key )
group
parent
Így ha már van a táblába ilyen cím, akkor csak a names táblába kerülnek be az adatok, ha nincs akkor mindenhova.
Ezzel ugyan nagy rekordszám esetén helyet nyerhetek, de az INSERT-ek nek megnővelem a futáshosszát, mivel akkor végig kell pásztáznom a mails tábla mail mezőjét, hátha már be van jegyezve az adott rekord (esetleg indexelhetem is, de ez sem valami optimális megoldás...). Szóval pro és kontrák ismertek, de szerintetek melyik megoldás lenne a jobb?
■ A lényeg annyi, hogy adatbázisba tárolnék e-maileket, neveket és csoportokat, körülbelül mint egy on-line telefonkönyvben. Minden regisztrált felhasználó feltölthet ide adatokat. (hogy miért csinálná ezt, azt most hagyjuk!:))
Így ha egyszerüen akarnám megcsinálni, akkor létrehoznék egy táblát:
address
------------
name ( ismerős neve )
mail ( ismerős mailcíme )
group ( ismerős melyik csoportba van - integer )
parent ( annak a usernek az azonosítója, aki feltöltötte, csak ő fér hozzá -int)
De arra gondoltam, hogy így ha egy embert sokan feltöltenek, akkor a mailcíme sokszor megjelenik az adatbázisba, így a következőt találtam ki:
table: mails
------------
mailID ( auto_inc, primary_key )
table: names
------------
name
mailID ( primary_key )
group
parent
Így ha már van a táblába ilyen cím, akkor csak a names táblába kerülnek be az adatok, ha nincs akkor mindenhova.
Ezzel ugyan nagy rekordszám esetén helyet nyerhetek, de az INSERT-ek nek megnővelem a futáshosszát, mivel akkor végig kell pásztáznom a mails tábla mail mezőjét, hátha már be van jegyezve az adott rekord (esetleg indexelhetem is, de ez sem valami optimális megoldás...). Szóval pro és kontrák ismertek, de szerintetek melyik megoldás lenne a jobb?
attól függ
Csak egy ötlet: szedd szét az email címeket, és a tartományt tárold el egy külön táblában (csoportképzés). Ha bármilyen email címet keresnek, akkor csak az adott tartomány tagjai között kell szétnézni, és ha új címet visznek fel akkor is. Plusz ha nincs a táblában a tartomány, akkor tudod, h nincs bent a cím. Ez talán gyorsítana a dolgon, bár az ötleten lehetne gyúrni, de most ugrott be nem tudom mennyire hasznos:)
logikai model
ui: az általad vázolt második esetben viszont fölös külön táblába raknod az emailt, ha a mail_id a a primary key a names táblában