millainen rakenne mySQL taululle??

juha

Tarkoituksena on rakentaa eräälle sivulle uutispalsta mihin voi laittaa myös kuvia.
tauluun tulisi:
-uutisen ID
-uutisen otsikko
-uutisen kirjoittaja
-uutisen päivämäärä (timestamp?)
-uutisteksti

Mitä muotoa(text,varchar...?) ylläolevien sarakkeiden olisi järkevintä olla?

Uutiseen on siis mahdollista myös liittää kuvia, tietokantaan ajattelin tallentaa vain kuvien nimet.
Tuleeko kaikkien kuvien 1..n nimet yhteen vai useampaan sarakkeeseen. Paras olisi ilmeisesti saada kaikkien kuvien nimet samaan sarakkeeseen, mutta miten tämä toteutetaan??

Toivottavasti saitte selvää ja toivottavasti joku osaisi vielä auttaa aloittelijaa...

5

599

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • uutinen ja kuva

      Itse tekisin tällaisen:

      CREATE TABLE uutinen (
      uutinenId INT NOT NULL AUTO_INCREMENT,
      uutinenOtsikko varchar(250) NOT NULL,
      uutinenKirjoittaja varchar(50) NOT NULL,
      uutinenPvm timestamp,
      uutinenTeksti TEXT,
      PRIMARY KEY (uutinenId)
      );

      timestampin tilalle voi ajatella jotain muutakin tekstiä.

      Kuville oma taulu:

      CREATE TABLE kuva (
      kuvaId INT NOT NULL AUTO_INCREMENT,kuva_uutinenId INT REFERENCES uutinen.uutinenId,
      kuvaTiedostonimi varchar(250) NOT NULL,
      PRIMARY KEY (kuvaId)
      );

      Huomaa, että tähän tauluun viittaus siihen uutiseen, johon kuva liittyy.

      • juha

        Kiitos vastauksestasi! kaikki muu meni jakeluun, mutta tuota viittausta en saanut toimimaan...
        Kuinka se pitäisi tehdä???


      • Keijo
        juha kirjoitti:

        Kiitos vastauksestasi! kaikki muu meni jakeluun, mutta tuota viittausta en saanut toimimaan...
        Kuinka se pitäisi tehdä???

        Se on niin sanottu "foreign key", eli viittausavain. Ilman sitäkin tuo tietokantarakenne toimii, mutta parempi nuo on aina laittaa tuollaisessa.

        Tuossa tapauksessa tuolla varmistaa että jokainen kuva on linkitetty johonkin uutiseen. Irrallista kuvaa ei voi kantaan laittaa koska tuon viittausavaimen kohde on löydyttävä tietokannasta.

        Eli sinun on ensin luotava uutinen, ja vasta sitten lisätä siihen liittyvät kuvat. Poistaessa sinun pitää poistaa ensin uutiseen liittyvät kuvat, sitten vasta itse uutinen.

        En ole mysql-guru mutta tämä syntaksi taitaa ollä lähempänä oikeaa:

        CREATE TABLE kuva (
        kuvaId INT NOT NULL AUTO_INCREMENT,
        kuva_uutinenId INT,
        kuvaTiedostonimi varchar(250) NOT NULL,
        PRIMARY KEY (kuvaId)
        FOREIGN KEY (kuva_uutinenId) REFERENCES (uutinen.uutinenId)
        );

        syntaksia ja tietoa:
        http://dev.mysql.com/doc/mysql/en/InnoDB_foreign_key_constraints.html


      • Koodari

        Itse tosin poistaisin noitten rivien nimestä uutinen, koska turhaa toistoa. Sekä kannattaa määritellä indexi nopeuttaa, varsinkin jos tekee jonkun haun jne...

        *timestampin tilalle voi ajatella jotain muutakin tekstiä.**

        Päivämäärä aina tietokannan omassa muodossa, timestamp on tässä tapauksessa parhain, kun sille tulee automaattisesti arvo, kun uutinen lisätään, tosin jos uutista muokataa, niin päivämäärä muuttuu senhetkises, joten kenties datetime olis kuitenkin parempa, riippuu miten halutaan tapahtuvan uutisten muokkaamises.

        Tohon kannattaa tehdä viel kolmaskin taulu jossa on uutistenlisääjät ja salasanat jne...

        Myslihän ei tuo kuin InnoDB tyyppisissä taulukoissa noita viiteavaimia, joten taulun tyyppi pitää määritellä, sekä itse määrittelisin ton viiteavaimen niin, jos uutinen poistetaan niin kuvan viittauksetkin poistetaan.


      • Vastaaja
        Keijo kirjoitti:

        Se on niin sanottu "foreign key", eli viittausavain. Ilman sitäkin tuo tietokantarakenne toimii, mutta parempi nuo on aina laittaa tuollaisessa.

        Tuossa tapauksessa tuolla varmistaa että jokainen kuva on linkitetty johonkin uutiseen. Irrallista kuvaa ei voi kantaan laittaa koska tuon viittausavaimen kohde on löydyttävä tietokannasta.

        Eli sinun on ensin luotava uutinen, ja vasta sitten lisätä siihen liittyvät kuvat. Poistaessa sinun pitää poistaa ensin uutiseen liittyvät kuvat, sitten vasta itse uutinen.

        En ole mysql-guru mutta tämä syntaksi taitaa ollä lähempänä oikeaa:

        CREATE TABLE kuva (
        kuvaId INT NOT NULL AUTO_INCREMENT,
        kuva_uutinenId INT,
        kuvaTiedostonimi varchar(250) NOT NULL,
        PRIMARY KEY (kuvaId)
        FOREIGN KEY (kuva_uutinenId) REFERENCES (uutinen.uutinenId)
        );

        syntaksia ja tietoa:
        http://dev.mysql.com/doc/mysql/en/InnoDB_foreign_key_constraints.html

        Pidemmällä tähtäimellä kuvista kannattaisi luoda oma tietokantansa tai vähintäänkin oma linkitettavä taulukko, jota voi käyttää muutkin kuin uutissovellus. Silloin pakolliset viittaukset uutistauluun pitäisi poistaa.

        No, tämä nyt on tätä newerending viilailua, mutta kuitenkin... vakavasti sovellusta rakennettaessa tällaiset mahdollisuudet huomioidaan mahdollisimman aikaisessa vaiheessa.

        Eka kertaa kantaa rakentavan olisi hyvä saada ensin reilusti aikaa harjoitteluun ja huolelliseen suunnitteluun. sittenhän se on jo melkein valmis. Hätäisesti tehty ja käyttöönotettu ei valmistu koskaan. Paitsi sitten, kun sitä ei enää käytetä.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Putin hoiti Suomen natoon ja myös Ruotsin

      Iso kiitos Vladimir Putinille. Hänen ansiosta pääsemme nyt Natoon. Putin halusi Naton lähelle ja nyt sai. Voimme tästä kiittää vain Putinia.
      Maailman menoa
      643
      7929
    2. Niinistö teki hetkessä Suomesta Venäjän ydinaseiden maalitaulun

      Kaiken lisäksi mies vielä lällätteli Putinille eilisessä tiedotustilaisuudessa ja käski katsomaan itseään peiliin. Kyllä vähän asiallisempaa käytöstä
      Maailman menoa
      456
      2211
    3. Voi Stefu ja sun kiivas luonteesi

      Sielä lentelee ullakkohuoneiston ikkunasta daamin vaatteet ja matkalaukut pitkin pihaa. Toisaalta,en ihmettele yhtään että tämä suhde päättyi näin,kyl
      Kotimaiset julkkisjuorut
      229
      2120
    4. Poliisi otti Stefun kiinni!

      Seiska tietää kertoa.
      Kotimaiset julkkisjuorut
      143
      1691
    5. Veikkaus: Miten The Rasmus pärjää Euroviisuissa?

      Euroviisuhuuma on ylimmillään, kun Suomi ja The Rasmus taistelee biisillään Jezebel. Bändi on tikissä, kunhan Lauri Ylösen ääni kantaa. Mitä veikka
      Viihde ja kulttuuri
      51
      1228
    6. Ohhoh! Martina Aitolehti ja seurapiirihurmuri-Jesper ekassa yhteiskuvassa - Sutinaa Mallorcalla!

      Martina Aitolehti ja seurapiirijulkkis-Jesper nauttivat toisistaan varsin vauhdikkaissa merkeissä Mallorcalla. Aitolehti ei ole esitellyt rakastaan vi
      Kotimaiset julkkisjuorut
      25
      1216
    7. Stefanilta tuli taas karu totuus Sofiasta

      Marokkolainen h*o*ra! Voi tsiisus kun mulla on hauskaa! Lumput lentää ikkunasta kun Stefu raivoaa h*uralleen🤣🤣🤣 Nyt ne popparit tulille, tästä tule
      Kotimaiset julkkisjuorut
      99
      1098
    8. Ootko onnellinen kun ei tarvitse

      nähdä tätä tyhmää naamaa enää koskaan? Multa se särkee sydämen, mutta minkäs teen. Vaikka olisi kuinka sinnikäs eikä hellittäisi, se ei aina auta.
      Ikävä
      65
      833
    9. Steppuli veressä

      Seiskan lööpissä Steppulilla naama ja nyrkit veressä. Ei tainnut ihan kamojen pihalle paiskominen riittää. Onkohan pistänyt kämpän tuusannuuskaks.
      Kotimaiset julkkisjuorut
      55
      748
    10. Oletko nähnyt eroottiset kohuleffat? Fifty Shades Of Grey -trilogia tv:stä

      Fifty Shades -trilogia starttaa, kun nuori opiskelijanainen Anastasia tapaa rikkaan liikemiehen. Seksisuhdehan siitä starttaa, höystettynä sadistisill
      Suhteet
      6
      727
    Aihe