Eli on tällainen kaikille avoin editoitavaksi CD-tietokanta.
Tietokantaan kuka tahansa voi lisätä uuden CD-levyn, ja editoida sen tiedot, biisien nimet. Häiriköintitapausten varalle pitäisi toteuttaa "muutoshistoria"-toiminto (vähän niin kuin wikissä).
Tauluja on kolme:
Artisti (id, nimi)
Levy (id, artisti_id, nimi)
Biisi (id, levy_id, raita, nimi)
Mutta miten tuo muutoshistoria kannattaisi toteuttaa? Että etusivulla heti näkisi viimeksi lisätyt ja muokatut levyt?
Miten kannattaisi toteuttaa tietojen palautus, jos joku häirikkö muokkaa oikeat tiedot vääriksi? Myös tuokin operaatio pitäisi tallentaa historiaan, ettei kävisi niin, että joku korjaa väärät tiedot, ja sitten joku häirikkö palauta vanhat väärät tiedot korjattujen tilalle.
Ja vielä lopuksi vielä tällainen tapaus, tietokannassa on vaikka artisti Madonna, ja joku lisää Madonnan uuden levyn, mutta tekee kirjoitusvirheen ja kirjoittaa Madonna yhdellä n-kirjaimella. Järjestelmä ei löydä "Madona" -artistia ja lisää sen kuin se olisi uusi artisti, eli antaa sitten sille uuden id tunnuksen, ja levyn tiedot menevät sitten uuden id tunnuksen alle. Miten voisi toteuttaa näiden tietojen korjaus-toiminnon, niin että kaikki muutokset menisivät myös muutoshistoriaan, ja niin, että muutokset olisivat palautettavissa häiriköintitapauksissa? Tämä on aika hankala tapaus mielestäni.
Tietokanta on MySQL ja kieli PHP
MySQL kysymys
4
448
Vastaukset
- tohlo
> Mutta miten tuo muutoshistoria kannattaisi
> toteuttaa? Että etusivulla heti näkisi viimeksi
> lisätyt ja muokatut levyt?
Minä tekisin tämän niin, että jokaiseen tauluun lisäisin esim. muutettu- ja status-nimiset kentät. Ekaan laitetaan rivin viimeisin muutosaikaleima (timestamp) ja tokaan jonkinlainen kyseisen rivin status (arvoina esim. 1=voimassa, 2=poistettu.
Kun joku muokkaa jotain riviä missä tahansa tauluista, tallennetaankin voimassaolevaan riviin statukseksi 2=poistettu JA lisätään samalla uusi rivi, johon laitetaan aiemmallakin rivillä ollut sama id, mahdollinen korjattu nimi, ym. tiedot, sekä tuo kyseinen aikaleima ja statukseksi 1=voimassa (tämä kaikki yhden transaktion sisällä, jolloin virhetapauksissa mitään muutoksia ei minkään taulun riveihin tehdä). Näin uusi muokattu rivi on korvannut vanhan ja muutoshistoria on tallessa, kunhan rivit otetaan näkyviin aikajärjestyksessä. Nyt sitten mikä tahansa aiempi taulun rivi voidaan palauttaa käyttöön hyvin helposti vain muokkaamalla status-kentän arvoja. Aina täytyy pitää kuitenkin huolta siitä, että vain yhdellä rivillä status-kentän arvona on 1=voimassa, muuten voi käydä huonosti. ;)
Toinen vaihtoehto on tehdä kullekin taululle oma backup-taulunsa, johon siirretään vanha voimassaollut rivi sellaisenaan, ja varsinaisen käyttötaulun rivin arvoa sitten päivitetään lisäämättä uusia rivejä ko. tauluun.
Sovelluksen kannattanee kirjoittaa jonkinlaista lokia tekemisistä, eli tietojen tallennuksista, palautuksista, jne. Loki voi olla tietokannassa tai sitten vaikkapa ihan vaan tiedostona palvelimen levyllä.
> Ja vielä lopuksi vielä tällainen tapaus,
> tietokannassa on vaikka artisti Madonna, ja
> joku lisää Madonnan uuden levyn, mutta tekee
> kirjoitusvirheen ja kirjoittaa Madonna yhdellä
> n-kirjaimella.
Suosittelen että käyttöliittymässä on jonkinlainen hakutoiminto olemassaolevista artisteista, jolloin aina käyttäjän ei tarvitse kirjoittaa artistin nimeä oikein uuteen levyyn, vaan se valitaan esim. listasta. Vain jos artistia ei varmasti jo löydy taulusta, annetaan se lisätä uutena. (Tässä ehkä tarvitaan jonkinlaista merkkijonojen samanlaisuuden vertailua tjmv. esim. tuossa Madona vs. Madonna -tapauksessa, vrt. www.imdb.com:n haku.)
> Miten voisi toteuttaa näiden tietojen
> korjaus-toiminnon, niin että kaikki muutokset
> menisivät myös muutoshistoriaan, ja niin, että
> muutokset olisivat palautettavissa
> häiriköintitapauksissa?
Korjausoperaatiohan tietokannan osalta on sellainen, että vaihdat vaan siihen väärään artisti-id-arvoon kohdistuvat viittaukset oikeaan. Myös tämä toimenpide tulee siis mennä ylläkuvaamaani lokiin ja myös muutoshistoriaan, jotta se voidaan tarvittaessa perua.
Ongelmanahan tässä on myös se, että joku voi korjata väärinkirjoitetun Madona-artistin oikeaksi, jolloin olisikin sitten kaksi Madonna-artistia eri id-arvoilla. Mutta toki näidenkin yhdistäminen onnistuu tässä kuvatuin keinoin ja muutoshistoriakin säilyy.- hankalahko...
>Korjausoperaatiohan tietokannan osalta on sellainen, että vaihdat >vaan siihen väärään artisti-id-arvoon kohdistuvat viittaukset >oikeaan. Myös tämä toimenpide tulee siis mennä ylläkuvaamaani >lokiin ja myös muutoshistoriaan, jotta se voidaan tarvittaessa >perua.
Miten tuon voisi tallentaa historiaan? Jos korjaan viittaukset, niin vanhat viittaukset häviävät, eikä tässä tapauksessa statuksen muuttamisesta ole hyötyä, vaan vanhan viittaukset pitäisi jotenkin johonkin tallentaa? - tohlo
hankalahko... kirjoitti:
>Korjausoperaatiohan tietokannan osalta on sellainen, että vaihdat >vaan siihen väärään artisti-id-arvoon kohdistuvat viittaukset >oikeaan. Myös tämä toimenpide tulee siis mennä ylläkuvaamaani >lokiin ja myös muutoshistoriaan, jotta se voidaan tarvittaessa >perua.
Miten tuon voisi tallentaa historiaan? Jos korjaan viittaukset, niin vanhat viittaukset häviävät, eikä tässä tapauksessa statuksen muuttamisesta ole hyötyä, vaan vanhan viittaukset pitäisi jotenkin johonkin tallentaa?Oletetaan että esim. artisti-taulussa ovat seuraavat rivit:
id nimi muutettu status
1 Madonna 3.8.06 23:40 1 (= voimassa)
2 Madona 4.8.06 00:15 1
ja levy-tauluun lisätään uusi rivi:
id artisti_id nimi muutettu status
5 2 Best of 4.8.06 00:20 1
eli "väärälle" Madonnalle. Nyt korjausoperaationa halutaan levy laittaa viittaamaan oikeaan artistiin, jolloin luodaan uusi rivi levy-tauluun ja muokataan vanhan rivin statusta:
id artisti_id nimi muutettu status
5 2 Best of 4.8.06 00:20 2
6 1 Best of 4.8.06 00:25 1
Lisäksi halutaan varmaankin tuo väärä "Madona" pois, joten muokataan lisäksi artisti-taulua (huom. uudenkin Madona-rivin status voi nyt olla 2 = poistettu, koska tätä riviä ei haluta enää näyttää missään muutenkaan; pitää vain varmistua siitä ettei ko. artisti-id-arvoon viitata erityisesti levy-taulun voimassaolevista riveistä; tässä tapauksessa uusi rivi artisti-tauluun ei edes ole tarpeen, vaan voidaan suoraan muokata status-kenttää):
id nimi muutettu status
1 Madonna 3.8.06 23:40 1
2 Madona 4.8.06 00:15 2
3 Madona 4.8.06 00:27 2
Tämän jälkeen kannasta haetaan näkyviin aina vain yksi Madonna ja yksi Best of -levy tälle artistille.
En väitä että tämä olisi helpoin ja paras tapa, mutta kunhan antaa edes jotain ideoita toteuttamiseen. :) Oleellista on se, että aina muokattaessa muokataan vanhaa status=1-riviä (mutta ei tämän nimi- eikä aikaleimakenttiä!) sekä luodaan uusi rivi muokatulle tiedolle, jossa status=1.
Huomioi myös muutettu-kentän käyttö ja päivitys yhtenäisesti läpi kaikkien toimintojen; yllä en ole toimintojen yhteydessä siihen koskenut, vaan aina on luotu uusi rivi vaikkei se olisi välttämättä tarpeenkaan (ks. artisti-taulusta id-arvot 5 ja 6). Toki yo. artisti-taulun muokkaus jättää avoimeksi sen kysymyksen, _miten_ ja _miksi_ kyseinen uusi id (6) on tauluun ilmestynyt ts. virheellinen Madona ja tästä korjattu oikea Madonna eivät linkity toisiinsa mitenkään. Historiaan siis vain tallentuvat "toimintojen seuraukset", eivät tietoalkioiden väliset linkitykset. - tohlo
> Toinen vaihtoehto on tehdä kullekin taululle oma backup-taulunsa, johon siirretään vanha
> voimassaollut rivi sellaisenaan, ja varsinaisen käyttötaulun rivin arvoa sitten päivitetään
> lisäämättä uusia rivejä ko. tauluun.
Mietin tätä ja oikeastaan tämä alkaa kuulostaa paremmalta kuin noiden statuksien kanssa temppuilu, jota aiemmin ehdotin. Tämä backup-taulujen käyttö tuntuu yksinkertaisemmalta. Kun muutoksia halutaan tallentaa johonkin tauluun, kopioidaan ko. taulun kohderivi ensin backup-tauluun talteen, jonka jälkeen vasta varsinainen muokattu rivi tallennetaan entisen päälle alkuperäiseen tauluun. (Oma lukunsa on selvittää mitkä ovat kohderivejä taulussa, jos niitä ei olekaan tasan yksi.)
Tietokannan taulujen lukumäärä toki tuplaantuu, mutta se ei liene ongelma. :)
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornosta
https://www.kymensanomat.fi/paikalliset/8081054 Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornon hallussapi862341Olen tosi outo....
Päättelen palstajuttujen perusteella mitä mieltä minun kaipauksen kohde minusta on. Joskus kuvittelen tänne selkeitä tap192272Vanhalle ukon rähjälle
Satutit mua niin paljon kun erottiin. Oletko todella niin itsekäs että kuvittelet että huolisin sut kaiken tapahtuneen191818- 1051477
Maisa on SALAKUVATTU huumepoliisinsa kanssa!
https://www.seiska.fi/vain-seiskassa/ensimmainen-yhteiskuva-maisa-torpan-ja-poliisikullan-lahiorakkaus-roihuaa/1525663761472Hommaatko kinkkua jouluksi?
Itse tein pakastimeen n. 3Kg:n murekkeen sienillä ja juustokuorrutuksella. Voihan se olla, että jonkun pienen, valmiin k1621253Aatteleppa ite!
Jos ei oltaisikaan nyt NATOssa, olisimme puolueettomana sivustakatsojia ja elelisimme tyytyväisenä rauhassa maassamme.2571042- 68969
- 78919
Omalääkäri hallituksen utopia?
Suurissa kaupungeissa ja etelässä moinen onnistunee. Suuressa osassa Suomea on taas paljon keikkalääkäreitä. Mitenkäs ha174903