過去ログ表示


過去ログ 303 を表示

トピック内全 21 記事中の 21 〜 21 番目を表示
[ 最新記事及び返信フォームをトピックトップへ ]
このトピックの全ページ / [0] [1] [2]

(環境: WinXP SP3/SeaMonkey1.1)

> SQLite での view は read only です。

"Lite"にはそれも含まれていましたか(^^;
そうなると、FirefoxにとってはViewを多用しても意味が無いから、places.sqliteにViewが一個もないのも納得。

>「view は作らずに、moz_favicons に対して trigger を作って、moz_favicons の行を消す操作をしたときに trigger が発動する」

以下のようなTriggerを作り、moz_faviconの中の行を消したら、moz_placesの複数の行のfavicon_idがちゃんとNULLになりました。
> CREATE TRIGGER "del_favicon" BEFORE DELETE ON moz_favicons
> WHEN EXISTS ( SELECT favicon_id FROM moz_places WHERE favicon_id=OLD.id )
> BEGIN UPDATE moz_places SET favicon_id = NULL WHERE favicon_id=OLD.id;
> END
もっとも、そうなってくれないと困るんですけどね(^^)

Firefox trunkのplaces.sqliteにはTriggerが一個しかありませんでした。
MXRで"JOIN moz_"で検索してもそんなにヒットしてこないし、
そんなに複雑なDBでもないし、それほど複雑なTable間の関連や制約はなそうだし、
FirefoxではTriggerの多用はせず、プログラムロジック側で行うようにしているのかな?
上記のような非常にシンプルな関係・制約だけならば、Triggerで十分だし楽でいいですが、
変に複雑で大量のTriggerを多用すると、いつどんなタイミングで何が実行されるかの把握が困難になるし、
下手に行うと、プログラムロジックの修正よりもTrigger間の整合性の維持管理の方が返って大変になる、ということで、
FirefoxではTriggerをあまり使わないのかもしれないですね。


[ 前のトピック内容10件 ]
このトピックの全ページ / [0] [1] [2]

返信不可


- Child Tree -