2012-03-11 6 views
1

MySQLのようなリレーショナルデータベースでは、「サブタイプ」を格納する標準的な方法は何ですか?同じ親であるデータの複数の「型」を許可するための一般的なスキーマ

例として、単一のユーザーのFacebookフィードを考えてみましょう。それに含まれるものはすべて「エントリ」ですが、これらのエントリはタイプが大きく異なり、保存する必要があります。ステータスにはたとえばVARCHAR(255)が必要ですが、画像にはBLOBが、メモにはTEXTが必要な場合があります。

テーブルを完全に分離すると、最近のエントリをすべて取得するために、一見不要な複雑なクエリを作成する必要があります。 1つだけがNULLでない余分な列をたくさん持っているのは、扱いにくく、非効率的で、完全に安定していないようです。


私は私の重複を伝えること自由に感じなさい、私は喜んで質問を閉じるよ、これは一般的な質問でなければなりませんが、私は似た何かを見つけることができないことを理解しています。

答えて

0

というサブタイプは階層構造です。 エントリは実際には抽象的なエンティティであり、具体的なサブエントリはステータス,ピクチャおよび何でもです。だから、ユーザーは何とかそれらのサブエントリーのうちの1つに "マッピング"される多くのエントリーを持つことができます。

あなたはテーブルに階層構造を変換する方法を確認するには、この質問を見てとることができます。What is the best database schema to support values that are only appropriate to specific rows?

+0

ありがとうございます。 SQLの例を示すリソースがありますか? –

0

私は種類ごとに別々のテーブル(すなわち、ステータス、ノートなど)を作成し、にテーブルを使用しますユーザーID、アイテムタイプ、アイテムIDの3つの列を持つユーザーへのエントリをリンクします。次に、アイテムタイプを使用して、どのテーブルを結合するかを決定します。その後、すべてのデータを正しい型として格納することができ、適切な索引付けによって結合がうまく機能します。

+0

どのようなMySQLタイプは、そのような方法で結合を容易にするために 'item'型でなければなりません。また、SELECTの見方に関するリンク/例を提供できますか? –

関連する問題