Avatar billede danco Nybegynder
08. januar 2012 - 18:16 Der er 10 kommentarer og
1 løsning

Oprettelse af Foreign Key

Noget så simpelt som at oprette en fremmenøgle i min database volder mig ligepludselig problemer.  Sagen er den er jeg er ved at implementere et system for en virksomhed, og dertil har jeg fået et SQL script til den af deres tabeller der har relevans for mig.
Tabellen er således ud:


CREATE TABLE `User` (
  `FB_uid` varchar(128) NOT NULL,
  `FB_first_name` varchar(255) DEFAULT NULL,
  `FB_last_name` varchar(255) DEFAULT NULL,
  `FB_username` varchar(255) DEFAULT NULL,
  `FB_gender` varchar(45) DEFAULT NULL,
  `FB_timezone` int(11) DEFAULT NULL,
  `FB_locale` varchar(5) DEFAULT NULL,
  `FB_country` varchar(5) DEFAULT NULL,
  `FB_age_min` int(11) DEFAULT NULL,
  `FB_age_max` int(11) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `ClubID` int(11) DEFAULT NULL,
  `Registered` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`FB_uid`),
  UNIQUE KEY `FB_uid_UNIQUE` (`FB_uid`),
  UNIQUE KEY `ClubID_UNIQUE` (`ClubID`),
  KEY `UserClubID` (`ClubID`), CONSTRAINT `UserClubID` FOREIGN KEY (`ClubID`) REFERENCES `club` (`ClubID`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

Nu skal jeg imidlertid bruge primærnøglen FB_uid i andre tabeller og derfor vil jeg oprette fremmednøgler.
Herunder er et eksempel på en tabel og et erklæring.


CREATE TABLE IF NOT EXISTS chat_ignores (
blockedBy  varchar(128) NOT NULL,
blocked  varchar(128) NOT NULL,
primary key(blockedBy,blocked)
)ENGINE=InnoDB;
ALTER TABLE chat_ignores
ADD FOREIGN KEY (blockedBy)
REFERENCES `User`(FB_uid);


Når jeg forsøger at oprette min FK får jeg følgende MySQL error:
Error Code: 1005 Can't Create table 'chatdatabase'.#sql-4a0_289(errno:150))

Alle tanker er velkomne.
Avatar billede erikjacobsen Ekspert
08. januar 2012 - 18:33 #1
Din FB_uid findes ikke i `User` men tilsyneladende i `club`
Avatar billede erikjacobsen Ekspert
08. januar 2012 - 18:35 #2
Hovsa. Jeg læser forkert ;)    Nå, men det er så til gengæld nok fordi blockedBy ikke har et index.
Avatar billede danco Nybegynder
08. januar 2012 - 18:45 #3
Hej Erik,
tak for dit svar.
Jeg har prøvet at tilføje index på alle kolonner i chat_ignores.
Desværre hjalp det ikke.
Avatar billede arne_v Ekspert
08. januar 2012 - 19:29 #4
CREATE TABLE `User`
CREATE TABLE IF NOT EXISTS chat_ignores
Can't Create table 'chatdatabase'

????
Avatar billede danco Nybegynder
08. januar 2012 - 19:30 #5
chatdatabase er navnet på den database jeg arbejder på.
Avatar billede arne_v Ekspert
08. januar 2012 - 19:43 #6
Hvorfor skriver den saa at den ikke kan oprette en table med det navn?
Avatar billede danco Nybegynder
08. januar 2012 - 19:46 #7
Ja se det er jo derfor jeg skriver herinde.

Fordi jeg ikke ved det. 

Mit bedste bud er den forsøger at oprette en tabel ved navn: #sql-4a0_289
i databasen. Jeg ved ikke hvordan det fungerer sådan rent teknisk når den opretter en fremmednøgle.
Avatar billede arne_v Ekspert
08. januar 2012 - 21:16 #8
# i et tabel navn plejer at betyde en temporaer tabel.

Meget mystisk!
Avatar billede erikjacobsen Ekspert
08. januar 2012 - 21:32 #9
Det er muligvis ikke et index, der er problemet. Det kan være et tegnsæt. Hvilket tegnsæt har de to felter i de to databaser? Der er flere muligheder i http://verysimple.com/2006/10/22/mysql-error-number-1005-cant-create-table-mydbsql-328_45frm-errno-150/ - og det er vist een af de fejlbeskeder, der spilder en masse udviklertid ...
Avatar billede danco Nybegynder
14. januar 2012 - 13:52 #10
Hej Arne og Erik,
Jeg beklager meget at jeg først vender tilbage til jer nu, men denne database var en del af min hovedopgave til mit 5. semesters projekt, så derfor var der en del arbejde at gøre.
Det viste sig at løse sig da slettede alle tabeller og derefter oprettede dem med et charset til UTF-8 , der er åbenbart forskel .

Arne hvis du vil smide et svar så skal du få point, Erik jeg går ikke ud fra du vil have point, men ellers skal du være velkommen til at smide et svar også.
Avatar billede danco Nybegynder
23. januar 2012 - 01:28 #11
Jeg tror det må være tid til at lukke her.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester