Keskustelut - Tietokannat - Tietokannan rakenne MySQL


jlohi 00:33 22.6.12 
Suunnittelen kantaa jossa olisi laulukirjan sanat.
Vaikuttaako seuraava mitenkään järkevältä.
Toisessa taulussa olisi tiedot ja toisessa sanat, siten että jokainen säkeistö olisi omalla rivillä.


CREATE TABLE laulu (
id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
nro INT NOT NULL,
nimi TEXT,
saveltaja TEXT,
sanoittaja TEXT
);

CREATE TABLE sanat (
id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
nro INT NOT NULL,
sakeisto INT NOT NULL,
sanat TEXT
);
Grez 02:49 22.6.12 
jlohi kirjoitti:
Vaikuttaako seuraava mitenkään järkevältä.
Ei vaikuta. Mielestäni ei ole mitään järkeä käyttää ainakaan laulun nimelle, säveltäjälle ja sanoittajalle TEXT-tietotyyppiä. (Eli siis teksti-blobia, jonka koko on maksimissaan vähintään 2 gigatavua). Miettisin jotain järkevää maksimipituutta ja laittaisin vastaavat varcharit tms.

Samoin en sanoissakaan käyttäisi TEXTiä kun kerran laitat vain yhden rivin kerrallaan.

Miksi laitat sanat kunkin jokaisen rivin eri tietueeseen?

Miksi sinulla on sekä Id että nro -kenettä lauluissa? Vai onko sinne tarkoitus voida tulla useampi laulu samalla nro:lla?
jlohi 09:25 22.6.12 
Kiitoksia, tällaiseksi muutin. Olisiko toimivampi.

CREATE TABLE laulu (
nro INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
nimi VARCHAR(64),
saveltaja VARCHAR(64),
sanoittaja VARCHAR(64)
);

CREATE TABLE sanat (
id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
nro INT NOT NULL,
sakeisto INT NOT NULL,
sanat VARCHAR(1024)
);

Tuon yhden kohdan olit ymmärtänyt väärin tai minä sinua ymmärtänyt.
sanat tauluun sakeisto tieteeeseen tulee koko sakeistö ei vain rivi.

Esim.

+----+----------+------------+-----------------------------------------------------------+
| id | nro | sakeisto | sanat |
+----+----------+------------+-----------------------------------------------------------+
| 1 | 1 | 1 | Jänis istui maassa torkkuen,... |
| 2 | 1 | 2 | Jänikselle tuli tohtori... |
| 3 | 1 | 3 | Jänis pisti päänsä pensaaseen, pensaaseen... |
|... | ... | ... | ... |
| 15 | 5 | 1 | ... |
+----+----------+------------+------------------------------------------------------------+

Näin pystyn hakemaan kannasta tietyn laulun tietyn säkeistön.
Kommentteja, tovottavasti muuttui parempaan suuntaan.

editoitu: 11:06 22.6.12
eis 11:00 22.6.12 
Tosin jos maksimipituutta biisin nimelle miettii, niin samalla kannattanee myös miettiä mitä tekee niille nimille, jotka ylittävät sen. Jos kantaan halutaan tallentaa vaik Type O Negativen "The Glorious Liberation of the People's Technocratic Republic of Vinnland by the Combined Forces of the United Territories of Europa", tallennetaanko ylittävä osa erikseen jonnekin? Heitetäänkö virhe? Lyhennetäänkö vain ja tiputetaan loppuosa raa'asti pois?

(itse kai tallentaisin ylipitkät erikseen johonkin toiseen tauluun viel, ja pistäisin tuohon lyhennetyn sekä jonkun flagin että nyt on ylipitkä)
editoitu: 13:38 22.6.12
Grez 13:38 22.6.12 
Itse taas pistäisin tuon nimikentän vaikka 200 merkkiä pitkäksi ja jos siltikään joku nimi ei mahdu niin katkaisisin tylysti. Mielestäni erilliseen kenttään laitto ja siihen liittyvä säätö olisi turhaa kohkausta nollan tai ehkä kahden biisin takia.

Mut joo, näyttää paremmalta. Ymmärsin tosiaan ilmeisesti väärin, eli tuossa onkin tarkoitus laittaa useampia rivejä, eli kokonaisia säkeistöjä. Siihen ehkä voisi sitä TEXT -tyyppiä jopa käyttää ja mahdolliset (laulun sanoihin) kohdistuvat haut voisi toteuttaa FULLTEXT indeksiä käyttäen.