sleutelwaarde aanpassen

Status
Niet open voor verdere reacties.

reindu

Nieuwe gebruiker
Lid geworden
24 okt 2017
Berichten
3
VB Je hebt twee vertegenwoordigers: Jan Pietersen en Jan Ietersen. Beide sleutel in bestand VERKOPER, dat gekoppeld is aan ORDER. Nu wil je Jan Ietersen (met zijn koppelingen aan ORDER) veranderen in Jan Pietersen. Dat kan niet, want die sleutelwaarde bestaat al.

Hoe doe je dat handig?
 
Haal je niet een aantal dingen door elkaar? Je hebt een tabel [Vertegenwoordiger] met daarin de vertegenwoordigers met een unieke PersoonID. En je hebt een tabel orders, met daarin ook een veld [PersoonID]. Het zou volslagen onzinnig zijn om in de tabel [Orders] het veld [PersoonID] uniek te maken, want dat zou betekenen dat elke vertegenwoordiger maar één order mag maken. Dat zijn dan hele dure vertegenwoordigers, en je hebt er heel veel nodig... Slimmer is het dus om het veld [PersoonID] in orders niet uniek te maken. Dan kun je straffeloos elke order aan een andere vertegenwoordiger hangen.
 
Je gebruikt zo te lezen een naam als sleutelveld.
Dat druiste tegen de normalisatieregels in.
Gebruik een NaamID een maak daar de primary key van.

Tardis
 
ik vermoed dat je dit zoekt met het idee dat dit ook bij uw systeem aanwezig is dit is mysql
bekijk eens ON UPDATE CASCADE

CREATE TABLE concert (
key SERIAL PRIMARY KEY,
club_name TEXT REFERENCES club(name) ON UPDATE CASCADE,
band_name TEXT REFERENCES band(name) ON UPDATE CASCADE,
 
Ik heb het niet duidelijk geformuleerd. Ik werk in ACCESS, omdat bij Mysql de joins veel te lang duurde op mijn Synology. Misschien kan ik het beter formuleren met mijn eigen situatie ipv een verkopersbestand.
RUITER ( ruiternaam, woonplaats, enz)
PAARD ( paardnaam, gebjaar, enz)
COMBINATIE ( ruiternaam, paardnaam)

Ik gebruik als sleutel de naam, want is veel betrouwbaarder dan een ID nummer, daarmee zie je de fouten niet. Er is een relatie tussen RUITER, PAARD en COMBINATIE met een integriteitscontrole en trapsgewijze wijziging.
De invoer is een probleem, er is geen controle en vaak zijn er typfouten enz.

Nu het probleem van Pietersen en Ietersen. Ietersen is gekoppeld aan van alles, Pietersen ook. Nu wil ik Ietersen veranderen naar Pietersen in bestand RUITER. Dat gaat niet, want Access zegt, dat deze sleutel al bestaat. Bij relaties heb je wel de mogelijkheid van een cascading verandering, maar niet naar een bestaande sleutel.
Hoe doe ik het nu. Ik verwijder de relatie. Verander in COMBINATIE alle Ietersen's in Pietersen's. Herstel de relatie en gooi de Ietersen uit de RUITER.
 
Laatst bewerkt:
Als JOINs in MySQL te lang duren, zou ik eens naar EXPLAIN kijken wat je voor je query plaatst. Dan kan je achterhalen waarom het traag is. Mogelijk mis je wat indexes.
 
Je kan ook versie mysql8 installeren sneller

mij lijkt het een simpele update (die natuurlijk niet terugdraaibaar is)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan