web-dev-qa-db-ja.com

非リレーショナルデータベースでスキーマを使用することをお勧めしますか?

MongoDBのような非リレーショナルスキーマレスデータベースでのスキーマの使用が推奨される方法なのか、それとも避けるべき悪い方法なのかを理解しようとしています。

私は研究を行っており、この慣行に賛成または反対する客観的な議論を探しています。

2
Javier Scars

スキーマレスは 誤解を招く用語

  • 一方では、SQLデータベースには常に明確に定義されたスキーマがあります。このスキーマは修正されています。 「レコード」にさらに情報を入れたい場合は、データベース構造を変更して、テーブルに新しい列を追加する必要があります。

  • 一方、MongoDBのような ドキュメント指向のデータベース には事前定義されたスキーマはありません。コレクションに挿入されるすべてのドキュメントは異なる構造を持つことができます。文字通りリンゴと組織を一緒に保存することができます:DBは気にしません。

しかし、真実は、MongoDBコレクションには何が含まれていても、実際には常に何らかの種類の構造が存在するということです。したがって、スキーマレスは、動的または フレキシブルスキーム として理解されるべきであり、進化に対処するためにデータベースを変更する必要はありません。

このコンテキストでは、スキーマは ドキュメントの検証 に対して定義できます。これにより、両方のメリットを組み合わせることができます。

  • ドキュメントの最小要件を定義できます。たとえば、生徒のドキュメントには少なくとも姓と名が必要です。この情報は、すべての表示ウィンドウでアプリケーションが処理する生徒を指定するために必要です。
  • 他のフィールドとスキームの進化に必要なすべての柔軟性を残します。

したがって、スキーマの使用は良い習慣を意味します。

逆に、スキーマを使用しないと、コレクション内のドキュメントが完全にゴミになる可能性があります。一部のアプリケーションでは、これは影響がない場合があります。しかし、一般的なビジネスアプリケーションの場合、それは悪い習慣のように聞こえます。

もちろん、挿入するドキュメントの構造を事前に制御することで、そのような慣行の影響を減らすことができます。しかし、これは責任をアプリケーションに移し、他のアプリケーションが要件に準拠しないことを防ぐことはできません。

4
Christophe