質問: DB設計(MySQL)についての質問です。 現在、小規模(少なくとも当初は)な検索エンジンを作成予定なのですが、テーブル、カラム構成について、次の点で悩んでいます。 (テーブル構成はコメントを参照してください。) 1) cacheテーブルの「***_on」はurlテーブルに持たせるべきか? (「***_interval」と「***_on」を元にクロール等するか決めるため) 2) cacheテーブルの「status」はurlテーブルに持たせるべきか? 3) urlテーブルの「***_interval」やcacheテーブルの「***_on」を別テーブルに分けるべきか? 4) もっと良い構成があれば教えてください。 (1)~(3)、あるいは(4)について、回答、アドバイスをいただければと思います。よろしくお願いします。 (初回のクロール等の後、「***_on」が「***_interval」を超えた場合に再クロール等を行う構成です。) ※ポイント配分にもよりますが、ベストアンサーがあれば最大200ptを送らせていただきます。
回答: 正規化までできてるので、あとは運用と性能を考えて 非正規化するのが一般的な手法です。 1)正規化に反しますが、両方に持たせるべき 性能を考えて、cacheにも持たせる必要はあると思う。 2)これは、cacheテーブルだけでよい 3) おそらく、この2テーブル構成でなくてもう1,2テーブルを持つべき urlはマスターテーブルとして設計 cacheはトランザクションテーブルとして設計 マスターテーブルは、電話帳みたいな役割で一回作成したら変更はほとんどしないほうが望ましい cacheは、マスターテーブルの電話帳から電話をかけた結果の作業ファイルとして使用 これ以外に、トランザクションとして管理テーブルを2つほど作成すべきだと思う。 ・ジョブ管理をするためのトランザクションテーブル(このあたりで、いつクロールさせるかとか登録する) ・404が発生した場合に、それを記憶するトランザクションテーブル はじめての設計をやり抜くための本 概念モデリングからアプリケーション、データベース、アーキテクチャの設計まで (エンジニア道場) !4798117064 !