Työhaastattelussa: sinulla on kaksi samanlaista tietokantaa. Toisesta poistetaan rivi. Miten saat selville, mikä rivi poistettiin?
Vastasin, että laitan tietokannat vierekkäisiin ikkunoihin ja alan rivi riviltä vertailla. Onko tämä oikea vastaus? Panostahan siinä aikanaan tulee sen kohdalle, jota ei toisesta löydy!
Kommentit (70)
Päästä se kiinalainen tekoäly.molempiin tietokantoihin. Syökäisee sulle vastauksen kantojen eroavaisuuksista alle nanosekunnissa ja samalla imuroi kaiken firman datan ja salaisuudet Kiinaan.
Vierailija kirjoitti:
Päästä se kiinalainen tekoäly.molempiin tietokantoihin. Syökäisee sulle vastauksen kantojen eroavaisuuksista alle nanosekunnissa ja samalla imuroi kaiken firman datan ja salaisuudet Kiinaan.
Voisin päästääkin. Ei ole meidän firmassa mitään sellaista tietoa mitä kinkit ei jo tietäs. Ehkä yhteyslista ja myyntihinnat, mutta arvaahan ne senkin, ei ole niin suuria katteita meidän tuotteissa. Kyllä minä alan nähdä jenkit suurempana uhkana kuin kiinalaiset. Jenkit ei ole ystäviä, ja se, ovatko edes luotettavia sopimuskumppaneita, on jo kyseenalaista ainakin nykyisen pressan vallassa ollessa.
Copypeistaan exceliin ja se missä on vähemmän rivejä, on se tiedosto mistä on rivi poistettu.
Pekka 5 v
Drop Database <tietokannan nimi> tietenkin.
näin saadaan tietoon pudotettu, eli poistettu tieto.
Julkisella sektorilla homma tehdään niin että taulukot kirjoitetaan ruutupaperille käsin ja aletaan vasta sitten vertailemaan silmämääräisesti. Projektilla täytyy olla tietysti neljä esihenkilöä ja projektipalavereja on joka toinen päivä.
Ottaisin tietokoneen töpselin irti. Jos se olisi liian tiukassa, leikkaisin saksilla poikki. Sitten katsoisin mitä tapahtuu, että palautuuko poistettu lause vai tuleeko niitä peräti lisää.
Vierailija kirjoitti:
Vastauksesi osoittaa loogista ajattelua, mutta työhaastattelutilanteessa odotetaan usein tehokkaampaa, teknisesti optimoitua ratkaisua varsinkin jos haet tekniseen tai IT-alan tehtävään.
Mikä olisi parempi vastaus?
Riippuen tietokannan koosta ja käytössä olevista työkaluista, tehokkaampi tapa olisi:
1. SQL-kyselyllä erot
Jos kyseessä on relaatiotietokanta (esim. PostgreSQL, MySQL), voit tehdä EXCEPT-operaation (tai vastaavan) kahden taulun välillä:
sql
CopyEdit
SELECT * FROM tietokanta1.taulu EXCEPT SELECT * FROM tietokanta2.taulu;
Tämä palauttaa rivit, jotka ovat vain ensimmäisessä tietokannassa, eli poistettu rivi.
Joissain tietokannoissa (esim. MySQL) EXCEPT ei ole suoraan tuettu, mutta voit käyttää LEFT JOINia ja IS NULL -ehtoa:
sql
CopyEdit
SELECT a.* FROM tietokanta1.tau
Meinaatko, että kesken työhaastattelun alkaisit konsultoisa ChatGPT:tä?
Vierailija kirjoitti:
Miksi hakisin tuollaista suorittavan työn paikkaa?
Siksi ettet olisi enää työtön.
Luultavasti ekaksi katsoisin logista mikä käsky on suoritettu viimeksi siihen mistä on poistettu jotain.
Vierailija kirjoitti:
Julkisella sektorilla homma tehdään niin että taulukot kirjoitetaan ruutupaperille käsin ja aletaan vasta sitten vertailemaan silmämääräisesti. Projektilla täytyy olla tietysti neljä esihenkilöä ja projektipalavereja on joka toinen päivä.
Unohdit sen vaiheen jossa se ruutupaperi skannataan tiedostoksi ja tekstitulkitaan, printataan uudelleen paperille ja lykätään tulevien tehtävien pinoon jossa se käsitellään sitten kun sen vuoro tulee joskus 2kk päästä ehkä. Jos ei satu parin vuoden sapattivapaa, opintovapaa tai muuten vaan pitämättömät saldovapaat (5kk) siihen väliin.
Jos kysymys on jollekin epäselvä kannattaa ensinnä kysyä asiaa tarkentava kysymys.
Vierailija kirjoitti:
Riippuu tietokannasta, mutta luettavassa olevassa muodossa on helppo etsiä eroavaisuus tuetokannan vertailutoiminnalla..
tosin sitä ennen kysyisin onko versiohistorian tallennus päällä ja katsoisin sen kautta, mitä kohtaa on muutettu, jos tämä on ollut viimeisen muutos kompakysymykseen ctrl+z
Joo, mulle tuli mieleen myös tuo edellinen versio. Mutta jos on iso tietokanta. Niin ei ole helppo näin selvittää.
No, antoivatko oikean vastauksen tähän tietokantakysymykseen? Jos antoivat, kerro se oikea tapa meillekin.
Tyhmä tapa on vertailla kantojen sisältöä koska kannat voi olla todella suuret. Älykkäämpi on hakea se käsky jolla poisto on suoritettu tavalla tai toisella. Jossain logissa nuo muutoskäskyt kait on luulisin?
Voihan sitä vaikka dumpata molemmat (lajitellut) kannat tekstiriveiksi ja sitten ottaa diff:in joka kertoo mikä rivi on erilainen :D
Yritin houkutella Kiinan_aivoja miettimään muuta periaatteellisempaa ratkaisumallia, mutta ei auttanut, kyllä sekin SQL:ää tarjosi kuten joku tuolla aiemmin oli jo kokeillut. Kun oikein muotoili kysymyksen "takapirumaisesti", alkoi deepseek antamaan muitakin vaihtoehtoja:
Tässä on muutamia vaihtoehtoja SQL-lauseen lisäksi, joilla voit selvittää poistetun rivin:
Transaktiolokien tutkiminen:Jos tietokannassa on transaktioloki (transaction log) käytössä, voit tutkia sitä nähdäksesi, mikä operaatio (DELETE) suoritettiin ja mikä rivi poistettiin.
Triggerit:Jos tietokannassa on triggerit käytössä (esim. DELETE-triggeri), voit tarkistaa, onko triggeri tallentanut poistetun rivin tiedot johonkin lokitauluun.
Versiointi tai peilikopiot:Jos tietokannasta on otettu varmuuskopio (tai snapshot) ennen poistoa, voit verrata nykyistä tietokantaa varmuuskopioon nähdäksesi erot.
CDC (Change Data Capture):Jos tietokannassa on CDC käytössä, se tallentaa kaikki muutokset (mukaan lukien poistot) erilliseen tauluun, josta voit hakea poistetun rivin.
Käyttäjä- tai järjestelmälokit:Tarkista sovellus- tai järjestelmälokit, jos ne kirjaavat tietokannan muutokset.
Aikaleimojen vertailu:Jos tauluissa on viimeksi muokattu-aikaleima (timestamp), voit etsiä rivejä, jotka olivat toisessa taulussa mutta eivät toisessa.
Periaatteessa kahden tietokannan pitäminen ajan tasalla on ajanhaaskausta. Koska tehtävänä oli kuitenkin kahden tietokannan tietojen vertailu, lienee SQL nopein tapa. Miten pitkälle muuten tuo windowsin verkkokäyttis pääsee. Jos työryhmässä kaksi eri käyttäjää muuttaa samannimistä asiakirjaa omilla koneillaan ja sitten ne pitäisi palvelimelle yhdistää kun palaa työpaikalle, mitä se tekee, en ole koskaan käytännössä kokeillut.
Kysyisin, että kuka hölmö teidän firmassa meni poistamaan sen rivin. Ehdotan, että palkkaatte minut sen torven tilalle. Yksinkertaista.
Kumpikaan näistä tekoälyjen antamista vastauksista ei varmasti toimi edes. Ootko kokeillut?