Wpis z mikrobloga

#mysql

Mirki co robie źle?

Tabelka z pewnymi zestawami ktore mogą (nie muszą) zawierać plik obrazka

CREATE TABLE IF NOT EXISTS offered_product_kit (
id INT(12) NOT NULL AUTOINCREMENT,
name varchar(1024) NOT NULL,
visible TINYINT(1) DEFAULT 0
imgfile_id INT(12) DEFAULT NULL COMMENT 'id pliku obrazka do zestawu',
PRIMARY KEY(id)
) ENGINE=InnoDB AUTOINCREMENT=1 DEFAULT CHARSET=utf8;

Tabelka ogolnego przeznaczenia do przechowywania danych o plikach:

CREATE TABLE IF NOT EXISTS files (
id INT(12) NOT NULL AUTO
INCREMENT,
alternate VARCHAR(256) DEFAULT '',
path VARCHAR(512) NOT NULL,
content-type VARCHAR (128) NOT NULL,
CONSTRAINT iddelimgfk FOREIGN KEY (id) REFERENCES offeredproductkit (imgfileid) ON DELETE CASCADE,
PRIMARY KEY(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Zamysł jes taki, że w przypadku usuniecia rekordu z offeredproductkit usuwany tez jest jego ewentualny rekord w filesach.
Mysql oczywiscie nie pozwala na utworzenie takiej tabelki

mysql> SHOW ERRORS;
+-------+------+-------------------------------------------------+
| Level | Code | Message |
+-------+------+-------------------------------------------------+
| Error | 1005 | Can't create table files (errno: 150)

Jak byscie rozwiazali temat przechowywania danych o plikach dolaczanych do roznych obiektow systemu.
Np tutaj mam tabelke offeredproductkit (zestaw ofertowy) ale jest sobie jeszcze offeredproductkititem (atomowy skladnik zestawu) i on rowniez ma swoje pliki.

Chcialbym zrobic cos aby przy usunieciu rekordu z offered
productkit jak i offeredproductkititem jesli posiadaja one niezerowe id pliku obrazka zostal on usuniety z tabeli files.
Przekombinowałem?
  • 1
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@grabsoon: masz błąd klucza zewnętrznego. Tak właściwie, to gdzie masz kolumnę do tego klucza w z files? Bo dajesz autoincrement na coś, co ma zawierać ID z drugiej tabeli - technicznie wykluczyłeś sobie takie połączenie. Wywal to, albo załóż osobną kolumnę w rodzaju id_z_drugiej_tabeli.
  • Odpowiedz