Portál AbcLinuxu, 15. května 2024 21:18


Dotaz: MySQL 4.0.25 & problém s definicí cizího klíče

17.1.2006 19:19 dau | blog: dau | Brno
MySQL 4.0.25 & problém s definicí cizího klíče
Přečteno: 786×
Odpovědět | Admin

Zdravím

Snažím se s pomocí RoR naprogramovat jistou aplikaci a vše bylo OK, dokud jsem si nezačal hrát s Migrations. Tedy ono to funguje, ale něco "shnilého" se děje s MySQL. Tedy zdá se. Potýkám se s tím už třetí den bez jakéhokoliv výsledku, proto se obracím sem v naději, že někdo pozná v čem je problém, či kde dělám chybu.

Situace je jednoduchá. Mám několik tabulek a teď potřebuji přidat další - s cizím klíčem ukazujícím do již existující tabulky. Příkaz create používám ve stejné syntaxi jako dříve, ovšem s výsledkem:

Mysql::Error: Can't create table './oncosys_dev/#sql-a96_ab.frm' (errno: 150): ALTER TABLE plans ADD CONSTRAINT fk_plans_treatment FOREIGN KEY ( treatment_id ) REFERENCES treatments( id )
Zde je částečná "struktura" tabulek, které s problémem souvisí:
CREATE TABLE plans (
  id int(11) NOT NULL auto_increment,
  treatment_id int(10) default '0',
  name varchar(255) default NULL,
  PRIMARY KEY  (id),
  KEY treatment_id (treatment_id)
) TYPE=InnoDB;

-- --------------------------------------------------------

CREATE TABLE treatments (
  id int(10) unsigned NOT NULL auto_increment,
  patient_id int(10) unsigned default '0',
  machine_id tinyint(3) unsigned default '0',
  plan varchar(6) default NULL,
  description varchar(200) default NULL,
  PRIMARY KEY  (id),
  KEY plan (plan),
  KEY machine_id (machine_id),
  KEY patient_id (patient_id)
) TYPE=InnoDB COMMENT='Basic table with treatments';

-- 
-- Omezení pro tabulku `treatments`
-- 
ALTER TABLE `treatments`
  ADD CONSTRAINT `fk_treatments_machine` FOREIGN KEY (`machine_id`) REFERENCES `machines` (`id`),
  ADD CONSTRAINT `fk_treatments_patient` FOREIGN KEY (`patient_id`) REFERENCES `patients` (`id`);

Právě v tabulce plans by měla být uvedena definice cizího klíče

ALTER TABLE plans ADD CONSTRAINT fk_plans_treatment FOREIGN KEY ( treatment_id ) REFERENCES treatments( id )

Pokud ji tam dodám přímo, skončí vše s již výše zapsanou chybou, pokud definici FOREIGN KEY odstraním, tabulka se bez problému vytvoří. Zkoušel jsem i vytvořit tabulku a cizí klíč vytvořit následně, výsledek tentýž. V phpMyAdmin to zabrečelo něco jako že není index na treatment_id - čemuž se mi nechce věřit, když to vypisuje, že tam je...

Najde se někdo, kdo by dokázal poradit? Předem díky. Jinak vše provozuji na Gentoo Linuxu, verze MySQL 4.0.25.

Není nic tak legračního, jako nechat ze sebe dělat totálního blbce.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Na otázku zatím nikdo bohužel neodpověděl.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.