2011-12-16 12 views
0

例:さまざまな金属(密度、色、融点など)の名前と特性を含むデータベースで、あるソース(ウェブサイト、書籍など)の密度の値と融点他の人からは、私はそれが任意の特定の値が来たソースから取得可能にしたい。フィールドを別のフィールドにリンクするスマートな方法はありますか?

単純な解決策は、すべてのプロパティに対して「密度」列と「濃度ソース」列などを作成することですが、これはこれを解決する非常に冗長な方法のようです。はい、 '密度ソース'は、単純な整数で、別のテーブルでソースを特定することができます。

ある意味では、フィールドに脚注のようなものを追加しようとしています。

+0

それはないだろう[MaterialID、Property、Value、Source]でテーブルを作成しやすくなります。[mercury、 'meltingPoint'、-39、 "website here"? – jclozano

+0

データベース設計のための「正しい方法」はありません。ユースケース、データ特性などを考慮する必要があります。どのクエリが高速に動作するはずですか?いくつのデータがありますか? – kan

+0

@jclozano - はい。 – MatBailie

答えて

0

厳しい答えは、sourceテーブルを持っていて、情報の各ビットごとに各ソースに戻るリンクを持っているよりも冗長ではありません。

密度、色、融点などの可能なソースのマトリックスを作成し、それに汎用の「SourceKey」を割り当てることで、実際のソースを1つだけ保存するだけですプロパティテーブル。完全にあなたが持っているとそれはしかし、全く効率的ですかどうかことができますどのように多くの組み合わせに依存

select 
    s.SourceName as DensitySource, 
    m.* 
from 
    metals m 
    inner join SourceMatrix sm on 
     m.SourceKey = sm.SourceKey 
    inner join Source s on 
     sm.DensitySourceKey = s.SourceKey 

:次に、濃度ソースを取得するには、あなたがこれを行うと思います。データベースにはリレーションが格納されますが、リネ​​ージは格納されません。

+0

あなたの答えは本質的に私の質問にコメントで上記のjclozano提案(私のコメントに彼のコメントを参照してください)だと思う。 – sseelenluft

0

列全体にフラグを付ける場合は、SQL Serverのextended propertiesまたはMySQL COMMENTオプションを使用できます。あなたが別の列を追加し、列ごとおよび行ごとのフラグにしたい場合は、それがモデルに格納する関連するデータであるため、これらは、データベース

のリレーショナル設計の「外」です

関連する問題