Minulla on tietokannassa kolme taulua ja tarvitsen yhden sqllausekkeen jolla voin tallentaa tietoa näihin kolmeen tauluun.
Eli jos yhteen tauluun onnistuu tallentaminen näin:
"insert into auto(rekisteri) values ('$rekkari')";
niin
Kuinka se onnistuu että olisi olemassa auto, omistaja ja valmistaja.
Jokaiseen tallennettaisiin oma erillinen tieto.
Esim. auto tauluun tieto rekkari, omistaja tauluun tieto nimi ja valmistaja tauluun tieto merkki.
Ei taida olla mahdollista.
Oraclessa (9.X) onnistuu näinkin :
INSERT INTO FOO VALUES (1);
UNION
INSERT INTO FOO VALUES (2);
UNION
INSERT INTO FOO VALUES (3);
Tosin tulee herja unionista mutta rivit tallentuvat kylläkin. Mutta miksi pitäisi saada yhdellä sql:llä 3 riviä kantaan, eikös järkevämää olisi laittaa 3 erillistä insertiä ?
mitä ideaa tallentaa ne omiin tauluihin
Quite simple : Yhdellä autolla voi olla monta omistajaa ja yhdellä valmistajalla monta autoa.
Ihan normaalia normalisointia :-D
Onko siis niin, että ei kannata laittaa yhtä insert lausetta. Olisi siis varmatoimisempi, kun laittaa usean insert lauseen?
Siis mitä järkeä niitä on eri taulukkoihin pistää ? isket vaan että
INSERT INTO auto (rekisteri, omistaja, valmistaja) VALUES ('$rekisteri', '$omistaja', '$valmistaja');
Toivottavasti tää vastas tohon sun kysymykseen tai ylipäätänsä auttoi mitenkään ^^
No tässä tapauksessa en voi laitta yhteen tauluun, koska minulla on taulu Henkilo, jossa kaikki henkilötiedot, taulu Tehtävä, jossa on erilaisia tehtäviä, ja taulu kirjaus, jossa tulee henkilötaulusta henkilötietoja sekä Tehtävätaulusta tehtävien tietoja. Joten en voi tallentaa tämän vuoksi yhteen tauluun. Niinkuin mike patto aikaisemmin viittasikin.
pistät kaksi insert lausetta (queryä) niin sillälaillahan saat sen tiedon sinne tauluihin. Tuskin Mysql:n kannalta paljon nopeudessa eroa onko lauseet yhdessä vai erikseen jos lauseet on lyhyitä. Hyvä tietokannan suunnittelu auttaa koomau.. koodausta.
Jokuhan voi vaikka ottaa aikaa.
"SELECT kissa, koira FROM elaimet";
....
tai:
"SELECT kissa FROM elaimet";
"SELECT koira FROM elaimet";
....
Luo taulut vaikka näin , toimii ainakin Oraclessa:
create table auto (
auto_id number,
rekkari varchar2(10));
create table omistaja (
auto_id number,
omistaja_id number,
omistajan_nimi varchar2(20));
create table valmistaja (
auto_id number,
tyyppi varchar2(20));
insert into valmistaja values (1, 'karvanoppa Corolla');
insert into valmistaja values (2, 'Audi A8');
insert into omistaja values (1, 1 ,'Taavi Tavi');
insert into omistaja values (1, 2 ,'Repe Sorsa');
insert into omistaja values (2, 1 ,'Iso-Business');
insert into auto values (1, 'TXT-100');
insert into auto values (2, 'IB-1');
Eli jos noita 'karvanoppa Corolla' autoja olisikin 10000 kpl ja kaikki tiedot ovat samassa taulussa, tulee 'ongelmia' kun esim nimeä halutaan muuttaa.
Pitää tehdä kantaan 10000 update mutta jos on eri taulussa 1 update riittää.
Samoin omistajien ylläpito on helppoa, voihan yhdellä autolla olla kai useampikin omistaja.
Periaatteessa kannattaa opetella tekemään taulut oikein heti alussa, jos joutuu joskus suunnittelemaan tauluja joissa on kymmeniä tai jopa satoja miljoonia rivejä
(tämmöisiäkin on vaikka kuinka paljon) näillä asioilla on merkitystä.
BTW : Query = Kysely , Insert = Lisätä ja Select = Valita :-D
Aihe on jo aika vanha, joten et voi enää vastata siihen.