[databases] relationele integriteit in flat file?

Pagina: 1
Acties:
  • 108 views sinds 30-01-2008
  • Reageer

  • LEiPiE
  • Registratie: Juni 2001
  • Laatst online: 17-09 21:57

LEiPiE

... (ing. van weinig woorden)

Topicstarter
Hersenbreker:

Ik ben bezig met het bouwen van een tool die vanuit de ene DBMS alle data (structuur en data dus) opslaat in een flat file en deze flat file moet later weer worden opgebouwd tot een volledige database in een andere DBMS.

Da's te doen, maar de oorspronkelijke database maakt veel gebruik van auto increment voor de primairy keys. Als je nu dus opslaat dan gaan die keys netjes mee. Lees je ze nu weer in dan worden die keys niet gebruikt en wordt er netjes opnieuw id's toe gewezen. Dit gaat dus ontzettend fout zo gauw er in de originele database een record is verwijderd (er zit dan een gat).
Op zich kan ik voor dat ik opsla in de flat file dummy records toe voegen, maar dat is eigenlijk een beunoplossing en helpt niet bij de volgende uitbreiding van de tool: updaten van een bestaande database.
NB: de source database is altijd dezelfde (zowel DBMS als grootste deel data en structuur), destination is of een lege database of een al gebouwde database die lijkt op de source die uitgebreid kan zijn.
NB: het betreft een systeem met vaste systeemcomponenten en variabele user componenten met veel tussenliggende relaties (met die verd*mde auto increment keys dus). Meer kan ik er niet over zeggen helaas (bedrijfsgeheim 8-) )

Iemand ideeën?

Papa x3, PHP-progger, Citrofiel, import-Tukker, muziekliefhebber


Verwijderd

Ik weet niet welke database je gebruikt.
Maar je kunt toch gewoon die ouwe gegevens in de nieuwe database stampen, vervolgens een sequence/auto increment toevoegen die begint met het maximale id + 1.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op vrijdag 14 september 2001 12:43 schreef leipie het volgende:
Meer kan ik er niet over zeggen helaas (bedrijfsgeheim 8-) )
Is in principe hetzelfde als Data Migratie. Om precies zijn de "transforming" gedeelte ervan.

Kan je helaas niet mijn document geven erover.. bedrijfsgeheim :+

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Ik snap je probleem niet zo erg. Als je in je tool de referentiele integeriteit vastlegd, dan kan je tijdens het inserten toch gewoon het volgende doen:

Records in tabel1 heeft een 1 op n relatie met records in tabel2.
1) insert in tabel1 zonder ID, en vang na iedere insert het nieuwe ID af
2) pas de ID's van gerelateerde records in tabel2 aan
3) ga door naar het volgende record van tabel1
4) als alle records van tabel1 aanwezig zijn, import tabel2

Overigens kan je dit heel mooi in XML oplossen. Daar kun je je platte XML file inlezen in een DOM object, en vervolgens in dat object een (tijdelijk) kolom toevoegen om de nieuwe ID waarden in op te slaan.

Aan de andere kant denk ik dat je met dit soort dingen inderdaad beter kan werken met zelf gezette ID's, dus pas eerst je huidige DB structuur aan en maak het jezelf een stuk makkelijker.

Enjoy :)

  • LEiPiE
  • Registratie: Juni 2001
  • Laatst online: 17-09 21:57

LEiPiE

... (ing. van weinig woorden)

Topicstarter
Op vrijdag 14 september 2001 12:55 schreef SGBas het volgende:
Ik weet niet welke database je gebruikt.
Maar je kunt toch gewoon die ouwe gegevens in de nieuwe database stampen, vervolgens een sequence/auto increment toevoegen die begint met het maximale id + 1.
Da's niet 't probleem helaas... vanuit andere tabellen wordt er verwezen naar de oude id's en die worden niet veranderd.

Papa x3, PHP-progger, Citrofiel, import-Tukker, muziekliefhebber


  • demonite
  • Registratie: April 2000
  • Laatst online: 29-05 08:55

demonite

the way is up

wat je zegt klopt inderdaad... als je een insert query los laat op een tabel met autoincrement word je opgegeven ID waarde vervangen door de autoincrement waarde.

Ik weet niet of het kan, maar misschien moet je het IDveld pas autoincrement maken NADAT je de data hebt geimporteerd.

Wat anders ook nog kan, is na elke insert query een UPDATE draaien... en dus de id van het laatst toegevoegde veld veranderen in wat het zou moeten zijn.

  • LEiPiE
  • Registratie: Juni 2001
  • Laatst online: 17-09 21:57

LEiPiE

... (ing. van weinig woorden)

Topicstarter
Ik snap je probleem niet zo erg. Als je in je tool de referentiele integeriteit vastlegd
Da's op dit moment meer het probleem: wat zou een geschikte manier zijn om dat vast te leggen? Ik heb wel een paar vage ideeën in m'n hoofd en ben op zich ook niet op zoek naar een kant-en-klare oplossing, maar een paar hints zouden fijn zijn :)
Daarna is inderdaad de volgorde die je noemde een logische.
Overigens kan je dit heel mooi in XML oplossen. Daar kun je je platte XML file inlezen in een DOM object, en vervolgens in dat object een (tijdelijk) kolom toevoegen om de nieuwe ID waarden in op te slaan.
check, had inderdaad xml al als tussenformaat aangenomen, ben op dit moment een beetje met JDOM aan 't spelen ('t moet in een servlet/jsp omgeving gaan werken) en dat werkt wel fijn eigenlijk.
Aan de andere kant denk ik dat je met dit soort dingen inderdaad beter kan werken met zelf gezette ID's, dus pas eerst je huidige DB structuur aan en maak het jezelf een stuk makkelijker.
liefste zou ik al die auto increments eruit halen, maar ja dan gaat het hele systeem er aan :)
Tipje van de sluier: gebruikers pleuren er documenten in en daarvan worden eigenschappen e.d. in andere tabellen bijgehouden.

Papa x3, PHP-progger, Citrofiel, import-Tukker, muziekliefhebber

Pagina: 1