ORMS

2012-04-18 1 views
0

2つのテーブルに分割するかどうかには、テキスト列を含む大きな(数百K個の)レコードがあるかどうかに少しのジレンマがあります。ORMS

質問店舗のニュース記事内のテーブル:

CREATE TABLE `article` (
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, 
    `articleType` varchar(7) DEFAULT NULL, 
    `dateCreated` datetime NOT NULL, 
    `label` varchar(75) NOT NULL, 
    `lastUpdated` datetime NOT NULL, 
    `reporter` mediumint(8) unsigned NOT NULL, 
    `text` text NOT NULL 
    PRIMARY KEY (`id`), 
    KEY `reporter-fk` (`reporter`), 
    CONSTRAINT `reporter-fk` FOREIGN KEY (`reporter`) REFERENCES `reporter` (`id`) 
) 

ので、大したことは、あなたが(最新ニュース)の見出しを取得したいまっすぐSQLにあなたが欲しいの列(ID、ラベルをつかむだろう、 のすべてが含まれていdateCreated)と

ORMでの作業、しかし、オブジェクトが取得されたくないもの(特に肥大化テキスト列)を除外するには、その直近の50つかん記事はいくつかのオーバーヘッド、おそらくそれほど大したものではありませんが、私はまっすぐSQLを書くとき、私はこのケースではすべてのフィールドをつかむことはありません。

ORMの現実を考えれば、テキスト列を別の関連する表に分割するか、気にしないでORM grab-the-whole-enchiladaのコンベンションに参加して、サイトのトラフィックがより効率的になるように心配してください、2テーブルソリューション?

答えて

1

通常、早すぎて最適化しないと言います。

しかし、この場合は、すでにこれを行うための議論があるので、私は今すぐ中止したいと思います。あなたはおそらく、本文を表示せずに記事ヘッダーのリストを表示しています。記事に関連するテーブル/クラスに体を置くのはなぜですか?

記事ヘッダーと記事本文はすでに2つの別々のものであるようです。

+0

生産中のORMのない単一のテーブルがあります。開発中に、私はすべてのクエリで記事のテキストを含めるという(完璧主義者)の考えに対処できないので、テーブルを分割しました。このポストはORMのコンベンションやSQLコンベンションに行くのですが、私の好みは後者の方が私が最もよく知っているものです。 – virtualeyes

1

特定のORM、自家製のものを使用していますか? Propelを使用している場合は、に遅延ロードという列を設定します。これは、オブジェクトの残りの部分ではなく、明示的な要求でロードされます。そうでない場合は、ORMがこれをサポートしているかどうかを確認してください。

+0

技術的にはORMではなくScalaQueryを使用しています.LINQを使った機能的なJDBCラッパーSQLと似た能力を持っています。クールなのは、特定の列を読み込み遅延させることですが、ScalaQueryがそのようなマッピングを提供している可能性は低いです。私は、クエリから返されたオブジェクト(実際にはかなり良い)に反対ではなく、キッチンシンクが投げ込まれたときのオブジェクトの重さ/重さを指摘する必要があります。私は分割に傾いていますテーブルは、おそらく頭の下に頭痛を保存するでしょう... – virtualeyes

+0

ああ、懇願 - 私はあなたのタグリストでPHPを見たと思った。私は脳にPHPを持っています!クイック検索では、ScalaQueryに遅延ロードがないことが示唆されていますが、ここでは[Hibernateのこの機能]に関する情報があります(http://stackoverflow.com/questions/2192242/what-is-lazy-loading-in-hibernate)。 – halfer

+0

さて、ScalaQueryでは、カラムを指定することができました(私はちょっと嘘をつきました)が、オブジェクトを扱うのがコーディングのほうがいいですし、Scalaのような静的型言語では、いくつかの定型文を(select foo、bar、 bazとは、各列の型[(String、Int、Date)]を指定して、このタプルを渡すことを意味します。これはIDEのオートコンプリートを得ることができるFoosのリストで作業するよりも便利です。とにかく、ありがたいことにPHP、10年のLAMP stackin '、スパゲッティで済ませました;-) – virtualeyes