データベースにデータを保存するのにどちらの方法が適していますか?その理由これがレストランの例です。 SQLデータベースとJSONを使用してデータベースと通信しています。
各行がデータベースの列であると想像してください
主にオブジェクトなし
主にオブジェクト
リレーショナルSQLデータベースにはオブジェクトはなく、データをマップして、最終的にすべてがテーブル内の基本的なdbタイプ(int、strings ...)の1つのフィールドに入るようにする必要があります。
最初のスキームについての注意:SQLにも配列はありません。配列を独自の行を持つテーブルに変換し、配列項目をレストランIDに接続できるようにする外部キーを追加する必要があります。
オブジェクトの利点を維持するには、両方の世界間のマッピングを作成するデータソースレイヤーでデータベースマッピングを分離する必要があります。したがって、後でdbコンポーネントを変更する場合、すべてのコードに問題を追加することはありません。たとえば、ある時点で、MongoDBなどのSQLなしのドキュメントデータベースに切り替える場合、オブジェクトアプローチの方が適しています。
パフォーマンスとレプリケーションの容易さが問題になる可能性がありますが、sqlとnosqlのどちらを使用するかを決定する場合は、データの構造または不足を考慮してください。
あなたは飲食店を追跡するためのかなり単純なデータ構造を提案したので、それは重要ではないと思います。ただし、ファストフードレストランでは固有の情報が必要であり、ハイエンドの5つ星レストランではデータ要件のセットがまったく異なるため、もう少し複雑にする必要がある場合はどうなりますか。両方を同じデータ構造で管理しようとすると、複雑になる可能性があります。 NoSQLデータベースは、このタイプのものを少しよく処理する傾向があります。データは通常、クエリしたい方法で構造化されています-ブーム、それは非常に高速に実行されます。
SQLデータベースは、データが通常はデータで満たされる列(変動や驚きがない)にうまく収まる場合に、よりよく実行される傾向があります。他のテーブルのデータに関連付けることができると、一貫性が提供され、データをクエリする予期しない複雑な方法が可能になります。インデックス作成は両方の長所を試し、提供することができますが、自分が何をしているのかをよく理解し、変更を加えることによるパフォーマンスへの影響を考慮する必要があります。たぶん変更を加えることは大したことではありません。結局のところ、レストランは3秒ごとに変わるわけではありません。
これが学習状況でない限り、あなたが最もよく知っている状況で行ってください。必要に応じてタイムリーにTweakで変更できます。いくつかの指標を早い段階で決定し、それらを監視して、間違ったプラットフォームを使用していることを示唆するインジケーターがポップアップする可能性があることを把握します。
両方してください。 doxdbでは、そのアプローチを使用しました。コンセプトは、クエリされるデータを格納し、実際のデータとは別にインデックスを作成することです。そうすることで、スキーマ設計をもう少し自由にすることができます。
Mongoまたはelastic searchを使用してこれを行うこともできます。