Autor Zpráva
Arynev
Profil *
S triggery začínám, ale dá se vyřešit pomocí nich vyřešit "Class Table Inheritance"?

commentable
id (int)
type (enum)
time (datetime)

article
id(int)
title (varchar)
commentable_id (int)

Případně jiné řešení? Potřebuju před přidání nového článku (INSERT INTO article) přidat záznam do commentable, vrátit id, které se bude ukládat do article.commentable_id
Kajman_
Profil *
Případně jiné řešení?
Buď si můžete už přímo v aplikaci udělat insert do commentable a získané id pak použít při vložení article.

Nebo si můžete udělat funkci, která udělá insert do commentable a vrátí id a tuhle funkci použít vrámci insertu do article.

Nebo si udělat trigger before insert na tabulce article, kdy při prázném commentable_id vloží záznam do tabulky commentable a do new.commentable_id nachystá získané id (ten insert může být také nachystán jako uložená funkce, pokud to databáze podporuje).
Arynev
Profil *
Pardon, jedná se o MySQL. Uložená funkce se jeví jako dobré řešení, ale... Jak je to s rychlostí? V aplikaci se neobjevuje pouze commentable, ale i další tabulky podobné této. Nechci to řešit přímo v aplikaci, tohle by dle mého názoru měla obstarávat samotná databáze. Mohu požádat o napsání toho triggeru? Vím že tady neni placená podpora, ale s triggery si nerozumím, hlavně se mi nedaří do triggeru přidat ostatní data.

Děkuji za odpověď
Kajman_
Profil *
Arynev:
Uložená funkce se jeví jako dobré řešení, ale... Jak je to s rychlostí?
Zkuste si to změřit, myslím, že to nebude pomalejší než triggerová verze. A článků stejně asi nebudete vkládat tisíce každou sekundu.

Být Vámi, udělám to na straně aplikace. Bude to univerzálnější (zatím není pravidlem, že na většině hostingů je v mysql podpora triggerů) a nebudete tam mít části kódu, které se nesnažíte naučit.
Arynev
Profil *
To už je tedy druhá věc na kterou jsem narazil, kterou mysql neumí a musí se nějak obcházet. Udělám to tedy v aplikaci.

Děkuji za odpovědi

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0