ugrás a tartalomhoz

tervezés: redundánsan, vagy anélkül

Szekeres Gergő · 2006. Szep. 21. (Cs), 18.02
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?
 
1

attól függ

breakline · 2006. Szep. 21. (Cs), 18.31
Attól függ mekkora az esélye, h két ember ugyanazt a címet tárolja el. Ez inkább az oldal profiljátó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:)
2

logikai model

zsepi · 2006. Szep. 21. (Cs), 20.13
nélkül nehéz lenne megmondani, mit is akarsz pontosan. Mi a kapcsolat a rendszer használója (adatbevivő), az email, a név és a csoport között, s mit is értesz csoport alatt?

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