ホームページ  >  記事  >  バックエンド開発  >  1 つのメインテーブルと複数の異なる種類の付録をデザインするにはどうすればよいでしょうか?

1 つのメインテーブルと複数の異なる種類の付録をデザインするにはどうすればよいでしょうか?

WBOY
WBOYオリジナル
2016-08-18 09:15:301784ブラウズ

たとえば、次のようなブログがあります。 このブログに保存されているデータは比較的複雑です
保存できるデータ:
映画データ:
音楽データ:
製品データ:
写真データ:
ソフトウェアデータ:
これだけのデータを保存するには、どうすればよいですかテーブルをデザインするには?
それぞれのデータには独自の特性があります。たとえば、音楽には作詞者と作曲家がおり、写真にはピクセルがあります。
テーブルを用意して、データの異なる特性をそれぞれフィールドに与えることは不可能です。
ただし、テーブルに分割すると、タイプやIDなどの基本情報を記録する一般的なテーブル、動画データ用のテーブルが1つ、写真データ用のテーブルが1つ…この場合、すべてを取得したい場合データを大量にクエリする必要があるため、効率が比較的低くなります。
より良い設計ソリューションはありますか?

返信内容:

たとえば、次のようなブログがあります。 このブログに保存されているデータは比較的複雑です
保存できるデータ:
映画データ:
音楽データ:
製品データ:
写真データ:
ソフトウェアデータ:
これだけのデータを保存するには、どうすればよいですかテーブルをデザインするには?
それぞれのデータには独自の特性があります。たとえば、音楽には作詞者と作曲家がおり、写真にはピクセルがあります。
テーブルを用意して、データの異なる特性をそれぞれフィールドに与えることは不可能です。
ただし、テーブルに分割すると、一般的なテーブルにはタイプやIDなどの基本情報が記録され、動画データ用に1テーブル、写真データ用に1テーブル…この場合、すべてのデータを取得したい場合、多くのクエリを実行する必要があるため、テーブルを作成すると効率が比較的低くなります。
より良い設計ソリューションはありますか?

nosqlを使用してmongodbドキュメントなどを保存できます。
畑にこだわる必要はありません。

質問のタイプが mysql5.7, 可以把存儲數據的字段設置爲json の場合 (例:

) リーリー

テーブルを分割した後、前後のロジックを別々に記述する必要があります:

フロントデスクで読み取るときは、メインテーブルのデータを直接読み取るのではなく、特定のタイプの関連テーブルを通じてメインテーブルをクエリします。

バックグラウンドでメインテーブルの情報を直接読み取りますが、添付テーブルのデータのみをバックグラウンドリストに表示します。詳細ページ。各付録に特定のフィールドを表示する必要がある場合は、パフォーマンスを多少犠牲にする価値があります。また、これらのフィールドがすべての付録に共通である場合は、メイン テーブルにも記載する必要があります

2 階を参照することもできますが、それでも単一タイプのデータベースが必要な場合は、WordPress のライブラリ設計を参照できます。非メインまたは変数タイプの属性を、キーと値の形式でセカンダリ テーブル ストレージに設計します。 ... 考え方は nosql と同じです 一貫性のある ...リレーショナル データベースを使用して実装しただけです

または、EAV 構造設計を使用して、テーブルにデータのみを保存し、そこにコードのレイヤーを追加して、さまざまな種類のデータのニーズを満たすことができます。
具体的な方法については、EAV を検索してください。Magento は、この方法を使用して実装されたオンライン ストアです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。