国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

各製品に多くのパラメータがある複數(shù)の製品の製品テーブルを設(shè)計(jì)する方法
P粉675258598
P粉675258598 2023-08-22 17:45:42
0
2
809
<p>私にはテーブル設(shè)計(jì)の経験があまりありません。私の目標(biāo)は、次の要件を満たす 1 つ以上の製品テーブルを作成することです。 </p>
    <li><p>複數(shù)の種類(lèi)の製品 (テレビ、攜帯電話、コンピュータなど) をサポートします。製品の各タイプには、次のような異なるパラメータのセットがあります。 </p>
      <li><p>攜帯電話には色、サイズ、重量、オペレーティング システムなどが異なります。 </p></li> <li><p>コンピュータには CPU、ハードドライブ、メモリなどが搭載されています。 </p></li> </ul>< <li><p>パラメータセットは動(dòng)的である必要があります。任意のパラメータを追加または編集できます。 </p></li> </ul> <p>製品タイプごとに個(gè)別のテーブルを作成せずに、これらの要件を満たすにはどうすればよいでしょうか? </p>
P粉675258598
P粉675258598

全員に返信(2)
P粉930448030

###@石の心###

私は常に EAV と MVC を使用します。

@ビル?カービン

ここで言及したすべての內(nèi)容:

データ検証
  • 屬性名のスペル検証
  • 必須の列/フィールド
  • 依存プロパティの破棄の処理
  • 私の意見(jiàn)では、アプリケーションのプログラミング言語(yǔ)が可能な適切なレベルでこれらの対話や要件を処理できるデータベースは存在しないため、これらはデータベースに存在すべきではありません。

私の意見(jiàn)では、このようにデータベースを使用することは、石で釘を打つようなものです。石を使って行うこともできますが、このアクティビティのために特別に設(shè)計(jì)された、より正確なハンマーを使用すべきではないでしょうか。

この問(wèn)題は、データの一部に対して少數(shù)のクエリを?qū)g行し、それをテーブル レイアウトに処理することで解決できます。 600 GB の商品データがある場(chǎng)合でも、このテーブルから各行のデータを取得する必要がある場(chǎng)合は、バッチで処理できます。

さらに、クエリのパフォーマンスを向上させたい場(chǎng)合は、レポートやグローバル テキスト検索などの特定の操作を選択し、必要なデータを保存し、定期的に (30 分ごとなど) 再生成するインデックス テーブルを準(zhǔn)備できます。

追加のデータ ストレージのコストについて心配する必要もありません。データ ストレージのコストは日々低くなっています。

アプリケーションによって実行される操作のパフォーマンスがまだ心配な場(chǎng)合は、いつでも Erlang、C、Go 言語(yǔ)を使用してデータを前処理し、メイン アプリケーションで最適化されたデータをさらに処理できます。

P粉504920992

記述した型階層をモデル化するには、少なくとも次の 5 つのオプションがあります:

  • 単一テーブルの継承: すべてのタイプのすべての屬性を格納するのに十分な列を備えた、すべての製品タイプに対して 1 つのテーブルを使用します。これは、各行に多くの列があり、その行のほとんどが NULL であることを意味します。

  • クラス テーブルの継承: 製品のテーブルを使用して、すべての製品タイプの共通屬性を保存します。次に、各製品タイプのテーブルを使用して、その製品タイプに固有の屬性を保存します。

  • 特定のテーブルの継承: 共通の製品屬性のテーブルはありません。代わりに、製品タイプごとに 1 つのテーブルを使用して、共通の製品屬性と製品固有の屬性を保存します。

  • シリアル化された LOB: 製品に対して 1 つのテーブルを使用して、すべての製品タイプの共通屬性を保存します。追加の列には、XML、YAML、JSON、またはその他の形式の半構(gòu)造化データの BLOB が保存されます。この BLOB を使用すると、各製品タイプに固有の屬性を保存できます。ファサードやメメントなど、複雑なデザイン パターンを使用してこのプロセスを記述することができます。ただし、いずれにせよ、SQL で簡(jiǎn)単にクエリできないプロパティ BLOB があるため、BLOB 全體をアプリケーションに返し、そこで並べ替える必要があります。

  • Entity-Attribute-Value: 製品のテーブルと、屬性を列ではなく行に回転させるテーブルを使用します。 EAV はリレーショナル パラダイムにおいて効率的な設(shè)計(jì)ではありませんが、今でも多くの人が使用しています。これは、別の回答で述べた「プロパティ パターン」です。問(wèn)題點(diǎn)のいくつかについては、StackOverflow で eav タグ を使用した他の質(zhì)問(wèn)を確認(rèn)してください。

これについては、Extensible Data Modeling というデモで詳しく書(shū)きました。


EAV についてのその他の考え: 多くの人は EAV を気に入っているようですが、私はそうではありません。これは最も柔軟なソリューションであるため、最良のソリューションであると思われます。ただし、この格言 TANSTAAFL を思い出してください。 EAV の欠點(diǎn)のいくつかを次に示します:

  • 列を必須にすることはできません (NOT NULL と同等)。
  • SQL データ型を使用してエントリを検証できません。
  • 屬性名の一貫性のあるスペルを保証できません。
  • ルックアップ テーブルなどの特定の屬性の値に外部キーを配置することはできません。
  • 従來(lái)のテーブル レイアウトの結(jié)果を取得することは複雑でコストがかかります。複數(shù)の行の屬性を取得するには、屬性ごとに JOIN が必要だからです。

EAV によって提供される柔軟性には他の領(lǐng)域での犠牲が必要となり、元の問(wèn)題を従來(lái)の方法で解決した場(chǎng)合と同じくらい (またはさらに悪化) コードが複雑になる可能性があります。

そして、ほとんどの場(chǎng)合、そのレベルの柔軟性は必要ありません。製品タイプに関するご質(zhì)問(wèn)では、製品固有の屬性を格納するテーブルを製品タイプごとに作成する方が簡(jiǎn)単です。これにより、同じ製品タイプのエントリに対して少なくとも一定の一貫した構(gòu)造を適用できます。

各行 に異なるプロパティのセットを許可する場(chǎng)合にのみ、EAV を使用します。製品タイプのセットが限られている場(chǎng)合、EAV は過(guò)剰です。クラステーブルの継承が私の第一選択です。


2019 更新: 「多數(shù)のカスタム プロパテ?!箚?wèn)題の解決策として JSON を使用している人を見(jiàn)るほど、私はこの解決策が好きではなくなります。特別な

JSON 関數(shù) を使用してそれらをサポートしたとしても、クエリは複雑になりすぎます。 JSON ドキュメントを保存するには、通常の行と列に保存するよりも多くのストレージ スペースが必要です。

基本的に、リレーショナル データベースでは、これらのソリューションはどれも簡(jiǎn)単でも効率的でもありません。 「可変特性」を持つという概念全體は、関係理論と根本的に矛盾します。

結(jié)局のところ、データのクエリ方法に基づいてこれらのソリューションの 1 つを選択する必要があります。これは、

アプリケーションにとって最も最?lèi)櫎违渐辚濠`ションに基づいています。したがって、データベース設(shè)計(jì)を選択する前に、データをクエリする方法を知っておく必要があります。アプリケーションにとっては、いずれか 1 つのソリューションが最適な選択となる可能性があるため、1 つのソリューションが「最適」ということはありません。

最新のダウンロード
詳細(xì)>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート