06. maj 2004 - 09:09Der er
7 kommentarer og 2 løsninger
Gammel DB Struktur, foreign keys skal tilføjes
Hej eksperter
Jeg sidder med et lidt spøjst problem. For et par år tilbage lavede jeg en web applikation for et firma. Dengang det blev udviklet var jeg temmelig grøn hvad angår databaser og brugte derfor ikke foreign keys o.lign. Men systemet kører altså stadig væk og nogle af tabellerne har nu ca. 70000 records.
Jeg ønsker nu at lave constraints mellem nogle af tabllerne men får selvfølgelig ikke lov pga. integritets problemer. Jeg har så prøvet at lave en ny tabel på grundlag af den gamle, tømme den originale, oprette foreign keys til den anden tabel, og derefter importere data igen. Men jeg får stadig samme fejl om integritet (Mit håb havde været at den blot skippede dem som ikke overholdt integriteten, men det gør den altså ikke). Jeg har prøvet med pg_dump og psql import, og via phppgadmin, men det giver samme fejl.
Nogle gode forslag til hvordan jeg får opretter foreign keys og beholder det data der overholder integriteten?
Ok, hvordan laver man sådan en? Jeg har prøvet at selecte de rækker som ikke er ens i de to tabeller men det giver jo et mærkeligt join med alt for meget output?
Jeg er ikke ekspert i postgreSQL - men i microsoft sql kunne det være noget i stil af: SELECT * FROM Table1 WHERE Table1.ForeignKey NOT IN (SELECT Table2.PrimaryKey FROM Table2)
Husk du skal først lige tjekke at du kan sætte primarykey på før du kan sætte foreign key på.
Det virkede lige som det skulle, derefter var det bare at fyre denne af:
DELETE FROM Table1 where Table1.PrimaryKey IN (SELECT Table1.PrimaryKey FROM Table1 WHERE Table1.ForeignKey NOT IN (SELECT Table2.PrimaryKey FROM Table2))
Jeg tør godt slette alle data der ikke overholder integriteten da det formentlig er test/fejl data. Der var iøvrigt kun 427 rækker ud af de 70000 :O)
:-) ... Jeg havde også problemer med det da de lavede det om ;-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.