Onko hyvä idea käyttää md5 arvo tietokannassa uniikki indeksinä?
Tarkoituksena on tallentaa tietokantaan noin 2-30 sanan pitkät tekstit, joten varchar on liian lyhyt, joten pitäisi käyttää TEXT kenttää. Mutta miten voisi nopeasti tarkistaa onko merkkijono jo olemassa tietokannassa? Ajattelin laskea tekstikentän md5 arvo joka on 32 merkkiä pitkä ja käyttää sitä uniikki indeksinä.
Mielipiteitä?
Tarkoituksena on tallentaa tietokantaan noin 2-30 sanan pitkät tekstit, joten varchar on liian lyhyt, joten pitäisi käyttää TEXT kenttää. Mutta miten voisi nopeasti tarkistaa onko merkkijono jo olemassa tietokannassa? Ajattelin laskea tekstikentän md5 arvo joka on 32 merkkiä pitkä ja käyttää sitä uniikki indeksinä.
Mielipiteitä?
Vastaukset 1
Vanhimmat
Ihan hyvä idea, paitsi että -- kuten varmaan tiedät -- kahden eri merkkijonon md5-hash voi olla sama. Melko harvinaista tämä kuitenkin on, mutta täysin mahdollista. Voisit siis ehkä laskea hashin kahdella eri tavalla ja käyttää niitä uniikkeina indekseinä (avainkenttinä).
Tietysti myös kirjainkoot, välimerkit, ym. tulee ottaa huomioon, koska esim. yksikin ylimääräinen väli pisteen jälkeen tuottaa merkkijonosta eri hashin. Ehkä siis välimerkit ja muut erikoismerkit voisit ottaa pois sekä muuntaa merkkijonon pienille kirjaimille ennen hashin ottamista ja tarkistamista.
Lisäksi voit samuuden tarkistuksessa vertailla esim. ensimmäistä sanaa tai N ensimmäistä merkkiä merkkijonosta, tuon md5:n lisäksi. Sinänsä md5 on kuitenkin minusta ihan hyvä id-kentän arvoksi, tai erityisen integer-tyyppisen id-kentän lisänä uniikkina indeksinä.