Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Cizí klíče v MySQL

Mám DB, která mj. obsahuje následující tabulky:

CREATE TABLE IF NOT EXISTS `cisvazbatyp` (
  `id_vazba_typ` int(11) NOT NULL AUTO_INCREMENT,
  `vazba_typ_popis` varchar(255) COLLATE utf8_czech_ci NOT NULL,
  PRIMARY KEY (`id_vazba_typ`),
  UNIQUE KEY `UQ_cisVazbaTyp_id_vazba_typ` (`id_vazba_typ`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=4 ;

INSERT INTO `cisvazbatyp` (`id_vazba_typ`, `vazba_typ_popis`) VALUES
(1, 'spolecnost'),
(2, 'stredisko'),
(3, 'servis');

CREATE TABLE IF NOT EXISTS `tabspolecnost` (
  `id_spolecnost` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `id_user` int(3) unsigned NOT NULL,
  `id_spolecnost_typ` int(10) unsigned NOT NULL,
  `spolecnost_nazev` varchar(255) COLLATE utf8_czech_ci NOT NULL,
  `spolecnost_ic` int(11) NOT NULL,
  `spolecnost_platna` enum('A','N') COLLATE utf8_czech_ci NOT NULL DEFAULT 'A',
  PRIMARY KEY (`id_spolecnost`),
  UNIQUE KEY `UQ_tabSpolecnost_id_spolecnost` (`id_spolecnost`),
  KEY `id_user` (`id_user`),
  KEY `id_spolecnost_typ2` (`id_spolecnost_typ`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=15 ;

ALTER TABLE `tabspolecnost`
  ADD CONSTRAINT `tabspolecnost_ibfk_1` FOREIGN KEY (`id_user`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `tabspolecnost_ibfk_2` FOREIGN KEY (`id_spolecnost_typ`) REFERENCES `cisspolecnosttyp` (`id_spolecnost_typ`) ON DELETE CASCADE ON UPDATE CASCADE;

CREATE TABLE IF NOT EXISTS `tabosoba` (
  `id_osoba` int(11) NOT NULL AUTO_INCREMENT,
  `id_vazba_typ` int(11) NOT NULL,
  `id_vazba` int(11) NOT NULL,
  `id_osoba_funkce` int(11) NOT NULL,
  `osoba_jmeno` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
  `osoba_prijmeni` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
  PRIMARY KEY (`id_osoba`),
  UNIQUE KEY `UQ_tabKontaktniOsoba_id_osoba` (`id_osoba`),
  KEY `id_vazba_typ` (`id_vazba_typ`),
  KEY `id_vazba` (`id_vazba`),
  KEY `id_osoba_funkce` (`id_osoba_funkce`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=4 ;

ALTER TABLE `tabosoba`
  ADD CONSTRAINT `tabosoba_ibfk_1` FOREIGN KEY (`id_vazba_typ`) REFERENCES `cisvazbatyp` (`id_vazba_typ`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `tabosoba_ibfk_2` FOREIGN KEY (`id_osoba_funkce`) REFERENCES `cisosobafunkce` (`id_osoba_funkce`) ON DELETE CASCADE ON UPDATE CASCADE;
Kromě těchto tabulek obsahuje i další - např. tabServis, tabStredisko...

Problém:
Když smažu záznam z tabulky tabSpolecnost (tabServis, tabStredisko), tak potřebuju, aby se smazaly automaticky i odpovídající záznamy z tabOsoba. Bohužel záznam v tabOsoba není propojen přímo se záznam v tabSpolecnost, ale je nutno dešifrovat typ vazby pomocí id_vazba_typ, z čehož poznám, jestli ta osoba patří ke společnosti, servisu nebo středisku. Je to možné nějak jednoduše udělat? Myslím bez nutnosti psát triggery, procedury přímo v MySQL apod.

Tenhle návrh struktury není moje dílo, to vymyslela analytička, já osobě bych použila tabulky tabOsoba2Spolecnost, tabOsoba2Stredisko, tabOsoba2servis, pak by se daly foreign klíče nastavit bez problémů a automatické mazání záznamů by taky fungovalo bez problémů.

Odpověď na otázku

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny