Ik ben bezig met het opzetten van een kasboek in een MySQL database, dat later benaderd zal worden via PHP. Nu wil ik graag als bron voor dit kasboek de mutaties van een bankrekening gebruiken. Een bestand met deze mutaties wordt via de bank (internetbankieren) opgehaald in de vorm van een CSV bestand. Dit CSV bestand moet middels een nog te programmeren webinterface geimporteerd worden waarna het verwerkt wordt in het kasboek, en wel specifiek in de tabel "mutaties".
Nu is het probleem dat het verkregen csv-bestand geen uniek id per record bevat. Om er nu voor te zorgen dat je geen duplicates krijgt omdat je bestanden met overlappende periodes importeert had ik het volgende bedacht:
Het wordt verplicht om altijd de mutaties vanaf het begin van het gewenste kalenderjaar de importeren. Bij het importeren van deze mutaties worden er twee kolommen gezet: het "kalenderjaar" en een "id" (en natuurlijk alle mutatiedata), waarbij het id PER jaar vanaf "1" op moet lopen. Samen moeten deze twee kolommen de unieke sleutel vormen. Aangezien er historisch nooit iets kan veranderen in een mutatiebestand, dwz dat een nieuw bestand altijd evenveel of meer regels bevat dan het oude bestand, kun je bij een import gewoon alle records van het te importeren kalenderjaar verwijderen en de regels opnieuw inlezen. Iedere regel die al bestond krijgt dan in feite altijd weer hetzelfde id terug. id's mogen dus dubbel voorkomen in de tabel maar NIET met hetzelfde kalenderjaar.
Ik heb nu eigenlijk twee vragen:
- Hoe krijg ik het voor elkaar om zonder een primary key te gebruiken, de kolommen "kalenderjaar" en "id" samen UNIQUE te maken. Ik heb in PHPMyAdmin beide kolommen geselecteerd en vervolgens "UNIQUE" geselecteerd. Dit lijkt goed te gaan totdat ik twee records invoeg met hetzelfde id (1) maar met een verschillend kalenderjaar (resp. 2010 en 2011). Ik krijg dan de foutmelding: "#1062 - Duplicate entry '1' for key 1".
- Is dit wel de meest handige manier of heeft er iemand een andere suggestie?
Nu is het probleem dat het verkregen csv-bestand geen uniek id per record bevat. Om er nu voor te zorgen dat je geen duplicates krijgt omdat je bestanden met overlappende periodes importeert had ik het volgende bedacht:
Het wordt verplicht om altijd de mutaties vanaf het begin van het gewenste kalenderjaar de importeren. Bij het importeren van deze mutaties worden er twee kolommen gezet: het "kalenderjaar" en een "id" (en natuurlijk alle mutatiedata), waarbij het id PER jaar vanaf "1" op moet lopen. Samen moeten deze twee kolommen de unieke sleutel vormen. Aangezien er historisch nooit iets kan veranderen in een mutatiebestand, dwz dat een nieuw bestand altijd evenveel of meer regels bevat dan het oude bestand, kun je bij een import gewoon alle records van het te importeren kalenderjaar verwijderen en de regels opnieuw inlezen. Iedere regel die al bestond krijgt dan in feite altijd weer hetzelfde id terug. id's mogen dus dubbel voorkomen in de tabel maar NIET met hetzelfde kalenderjaar.
Ik heb nu eigenlijk twee vragen:
- Hoe krijg ik het voor elkaar om zonder een primary key te gebruiken, de kolommen "kalenderjaar" en "id" samen UNIQUE te maken. Ik heb in PHPMyAdmin beide kolommen geselecteerd en vervolgens "UNIQUE" geselecteerd. Dit lijkt goed te gaan totdat ik twee records invoeg met hetzelfde id (1) maar met een verschillend kalenderjaar (resp. 2010 en 2011). Ik krijg dan de foutmelding: "#1062 - Duplicate entry '1' for key 1".
- Is dit wel de meest handige manier of heeft er iemand een andere suggestie?
If you think sex is a pain in the ass, try different position