MYSQL taulut

Tää on tosi nolo kysymys täällä, mutta kun ensimmäistä relaatiotietokantaa yritän väsätä MySQL:llä. Eli jos teen vaik puhelinluettelon osoitteineen jne...niin tuleeko mun laittaa puhelinnumerot, osoitteet, etunimet, sukunimet, postinumerot jne omiksi tableiksi ja sitten yhdistää näitteen ID:t yhdessä taulussa vai miten se ois "oikein tehty"? Ja miten määritellään viiteavaimet taulusta toiseen. MySQL Browseria oon yrittäny käyttää. Please heittäkää jotain... Ja onko kokemusta VB:n yhdistämisestä mysql:lään? Eli tekisin kyselyjä sillä.
3626
Äänestä

Muut lukivat myös

Vastaukset 3

Vanhimmat

* jos teen vaik puhelinluettelon osoitteineen jne...niin tuleeko mun laittaa puhelinnumerot, osoitteet, etunimet, sukunimet, postinumerot jne omiksi tableiksi*

Ei. Vaan lajittelet nuo järkevästi eri taulukoihin, jotta mahdollisilta toistoilta vältytään kohtuudella.

Esim

NIMET:
nimet_id
etunimi
sukunimi



POSTI:
posti_id
postinumero
postitoimipaikka


OSOITE:
osoite_id
(posti)_id
katu
katu_numero
...



PUH:
puh_id
puh_numero


YHDISTYS:
nimet_id
osoite_id
puh_id


Tuo on vaan väsyneen ihmisen näkymys nopealla miettimisellä, joten parempiakin keinoja on.


* se ois "oikein tehty"?*
Taitaa nää tietokanta jutut kuulua niihin joissa ei ole absoluuttisen oikeita ratkaisuja, vaan sinnepäin olevia. Ja ratkaisut ovat aina tekijänsä näköisiä. Sekä vaikuttaa myös kuinka tehokasta järjestelmää ollaan tekemässä, usein liian normalisoinnin sijasta denormalisoinilla saavutetaan tahokkuutta lisää, mutta siitä seuraa sit omat haittansa.


*Ja miten määritellään viiteavaimet taulusta toiseen*

MySQL tukee viiteavaimia vain InnoDB tyyppisissä tauluissa, jotka ovat vastaavasti hitaampia kuin MyISAM tyyppiset, joten kannattaa harkita tapauskohtasesti tartteeko viiteavaimia. Lukaseppas Ari Hovin SQL-opas, siinä on neuvotta tuo asia, ja muutenkin mielenkiintoinen kirja. Omat tiedot huonohkoja viiteavaimista, joten parempa kun en sano mitään.

Äänestä
  • tosi paljon....tää jeesas! Siis täähän toimii :)

    Äänestä

Riippuu kuule ihan siitä mihin tämä sovellus tulee.

Esim tilaustietokannassa ei ole järkeä laittaa puhelinnumeroa ja osoitetta eri tauluihin koska puhellinumero ja osoite ovat tilaajakohtaisia.

Sensijaan esim. teleliikennefirmassa asia voisi olla toisin; puhelinnumero ja osoite on laitettava erikseen koska puhelinnumeroita tulisi pystyä muuttamaan eri osoitteisiin ja relaatioihin helposti ja tarkasti. Telefirmalle puhelinnumeron tulee olla uniikki asia, kun taas webbishopin pitäjälle tilausten identifiointi on tärkeämpää.

Kolmas esimerkki voisi olla valtion henkilötietojärjestelmä jossa ihminen on uniikki ja osoite voi vaihtua. Tällöin ei kannata laittaa osoitetietoa samaan tauluun nimen ja henkilötietojen kanssa koska taulun päivityksestä tulisi hankalaa ja referenssit olisi vaikea tallentaa.

Eli; riippuu mistä roikkuu. Pyri siihen että sovelluksesi kannalta kaikki "yhteenkuuluva" ei-uniikki tieto jolla ei ole relaatiota pysyy samassa taulussa.

Yleensä järkevää on erottaa vain ja ainoastaan postinumero ja postitoimipaikka omaksi taulukseen koska postinumerot ja postitoimipaikat ovat kaikille yhteistä standardia tietoa. Kadunnimiä yms ei ole järkevää erottaa kuin ehkä jossain laajoissa karttasovelluksissa joissa pitäisi tallentaa myös koordinaattitietoa yms jonka yhdistää kadunnimeen.

Jos teet joka jutulle oman taulunsa niin todennäköisesti vain hidastat sovellusta tolkuttomasti, mutkistat koodia tarpeettomasti ja jos puhutaan alle 100000 rivistä niin et saavuta kertakaikkiaan yhtään mitään etua yksinkertaisempaan ratkaisuun nähden missään tapauksessa.

Äänestä

Kommentoi aloitusta


ja niiden yhdistäminen kirjoitti:

Tää on tosi nolo kysymys täällä, mutta kun ensimmäistä relaatiotietokantaa yritän väsätä MySQL:llä. Eli jos teen vaik puhelinluettelon osoitteineen jne...niin tuleeko mun laittaa puhelinnumerot, osoitteet, etunimet, sukunimet, postinumerot jne omiksi tableiksi ja sitten yhdistää näitteen ID:t yhdessä taulussa vai miten se ois "oikein tehty"? Ja miten määritellään viiteavaimet taulusta toiseen. MySQL Browseria oon yrittäny käyttää. Please heittäkää jotain... Ja onko kokemusta VB:n yhdistämisestä mysql:lään? Eli tekisin kyselyjä sillä.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu