Autor | Zpráva | ||
---|---|---|---|
Arynev Profil * |
#1 · Zasláno: 5. 12. 2011, 14:46:01
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 * |
#2 · Zasláno: 5. 12. 2011, 16:06:07
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 * |
#3 · Zasláno: 5. 12. 2011, 18:31:04
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 * |
#4 · Zasláno: 6. 12. 2011, 09:08:58
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 * |
#5 · Zasláno: 6. 12. 2011, 09:23:55
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 |
||
Časová prodleva: 14 let
|
0