06. maj 2008 - 09:11Der er
9 kommentarer og 1 løsning
Fremmednøgle i MySQl 5.0 (vha. navicat)
hej
Jeg har et performanceproblem i min database, hvorfor jeg skal have oprettet index og fremmednøgler (så vidt jeg kan forstå).
Jeg er vant til at arbejde i Access, hvor man kan "tegne" relationer, og har nu lidt problemer med at oprette fremmednøgler i det knapt så grafiske Navicat.
Jeg har oprettet (unique) index på de to primære nøgler. tabellerne er InnoDB. Da jeg vil oprette fremmednøglen i tabel2 (indeholdende data) får jeg fejlen :cannot add or update a child row. da jeg sletter data går det fint. Men kan nu ikke oprette linier i tabel2.
Hvad er det lige, der går galt her? Jeg har læst en bunke dokumentation på engelsk og kløjs lidt i deres anvendelse af "referenced table" og referencing table". Jeg mener ikek selv at jeg er debil database-nød, men har sgu lidt svært ved at se, hvad der er galt her. En entitet kan have mange linier, som via en fremmednøgle i tabel2 skal knyttes til entiteten i tabel1.
Ja, det kunne man jo synes. jeg kan dog få koden til at oprette ca. 113.000 linier MED fremmednøglen. Mens den UDEN kommer op på over 900.000 linier.
Det er denne kode, der opretter linierne:
- vil det sige at den prøver at oprette linier for entiteter, der findes drivere på, men som ikke findes (der er jo heller ikke referentiel integritet, så det kan jo godt lade sig gøre...)???
"INSERT INTO abcEntityLine (EntityID, DriverID, RawdataID, ParentEntityLineID, DriverCalcAmount) " & _ " SELECT driver.ToEntityID, driver.DriverID, line.RawdataID, line.EntityLineID, " & calcSql & _ " FROM abcEntityLine AS line " & _ " JOIN abcDriver AS driver" & _ " ON driver.FromEntityID = " & EntityID & " AND line.EntityID = " & EntityID
Jo, der er referentiel integritet - EntityID's som bliver sat ind i abcEntityLine skal eksistere i den anden tabel (abcEntity?) - Du kan jo prøve at skrive SQL'en ud på skærmen, for den som fejler?
Ja, men der er ikke ref. int ifht. drivers. Har lige fundet to drivers, der henviser til slettede entiteter. gad vide om det vil hjælpe at slette dem - og så oprette fremmednøgler der også. -jaja, man skal jo starte et sted.
Tror du at koden ovenfor er påvirket af det? jeg har ikke selv skrevet den, og er ikke 100-meter mester i SQL.
Ikke forstået. (jeg gentager lige at jeg ikke er 100 meter haj til sQl :)
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.