ugrás a tartalomhoz

Adatbázis mező hosszát miért érdemes korlátozni?

Anonymous · 2005. Aug. 29. (H), 18.30
Multkorában gondolkodtam el arról, miért is kell megadnom egy VARCHAR adat hosszát, ha az mindentől függetlenül adathossz+2 byte hosszúságú. Csak felesleges korlátozást látok abban, ha mondjuk egy email cím tárolásra szolgáló mezőt VARCHAR(50)-re veszek.

Ugyanez ma az INT-tel kapcsolatban jött elő. Elvileg 7 és 9 között lenne értelmes megadni a hosszat, hiszen ez alatt és felett más típust célszerű választani a byte hossz miatt. De miért szűkíteném mondjuk 8 jegyűre a lehetőségemet, ha az ábrázolt 4 byte-on részben 10 jegyű számokat is ábrázolhatok, adattöbblet nélkül.

Úgy látom tehát, hogy egyes adattípusok esetén a hossz megadása felesleges tautológia - vagy mégsem?
 
1

megjelenites

Poetro · 2005. Aug. 30. (K), 11.54
varchar esetén a mező méretét ténylegesen akkorára választja az adatbáziskezelő, ami neki meg van adva, azaz annyi bájtot foglal az adatbázis tároló fájlban, amiben elfér a kívánt adat. char esetén ez pontos bájthosszt jelent varchar esetében pedig megvalósítás függő. int és float értékek esetén ez ténylegesen csak a megjelenítésbe szól bele szvsz, azaz ha pl 0 kitöltést választasz, akkor a megadott értékig tölti ki 0-kal a visszaadott érték elejét. float esetében is csaupán a visszaadott érték ábrázolásába szül ez bele, aza ha float (5,2)-t adsz meg, akkor legfeljebb 2 tizedesjegyig fogja visszaadni az értékeket (persz belül továbbra is 4, 8 bájton tárolja az adatot).
SZVSZ.
--------
Poetro
2

megjelenites 2.

Balogh Tibor · 2005. Aug. 30. (K), 14.04
Nem csak tarolni hanem visszaadni is kell az adatokat. Valtozo meretu mezonel a tarolasnal tenyleg mindegy, de az adatokat az adatbaziskezelo tovabbitja a kliens fele, amihez memoriateruleteket kell lefoglalnia.
Az adatbaziskezelo laponkenent - meghatarozott szamu rekordonkent - olvassa a tablakat, a mezonek megadott meret alapjan foglal memoriateruletet.
Memoriabol meg sosincs eleg, foleg ha pazarlod is. Ezen kivul a megfelelo korlatozasok tobbfele optimalizalast is lehetove tehetnek az adatbaziskezelo szamara.
Nemreg egy csomagszallito ceg egyik nyilvantarto reszebe volt szerencsem betekinteni. Az emberunk majdhogynem mindent egy tablaban tarolt es kovette a te altalad felvazolt gondolatmenetet. Pl. a user es password mezo varchar(100), a telepulesnev 60 - a leghosszabb mo-i telepulesnev kb 37 karakter - az iranyitoszam szinten varchar(4).
Ezek utan csodalkozol-e azon, hogy a program hasznaloi arrol panaszkodnak, hogy lassu a "rendszeruk"? Bar nem lennek meglepve, ha az indexek megfelelo hasznalatarol is elfelejtkezett volna a "programozo".
3

<Nincs cím>

Anonymous · 2005. Aug. 30. (K), 15.04
tehat, ha jol ertem, akkor, ha felteszem, hogy 1000 VARCHAR(255) mezom van, mindegyikben "ok", azaz 4 byte-nyi adat, akkor lekerdezes eseten nem 4k, hanem 255k memoriat foglal le a rendszer, az adatok atadasahoz.
Azaz itt nem az adatbazis terhelodik feleslegesen, hanem az adatatvitel.

koszonom
toro
4

<Nincs cím>

Balogh Tibor · 2005. Aug. 30. (K), 16.00
"Azaz itt nem az adatbazis terhelodik feleslegesen, hanem az adatatvitel."
Végső soron mindig a számítógép terhelődik, teljesen mindegy hogy mi terheli.

Ezeket az adatokat nem véletlenül kérik be az adatbáziskezelő, csak használja valamire. Szerintem nyugodtan feltételezd azt, hogy optimalizálásra használja.