一意の制約のようなものを実装するための Couchrest のベスト プラクティスは何ですか。_id を使用してこれを行うこともできますが、必ずしも複合としてではなく、複数のフィールドに実装したい場合はどうすればよいでしょうか。たとえば、例を示すために、メール ID とユーザー名の両方を一意にする必要があるとします。
_id フィールドを使用せずにこれを行うベスト プラクティスはありますか。
CouchDB で一意性を強制する唯一の方法は、_id
フィールドを使用することです。
一意性が必要な他のものに対するベストプラクティスは、クライアントがそれを保存できるようにし、外部プログラム (またはスレッド、または cron ジョブなど) として一意性をチェックし、それに反応することだと思います。たとえば、map/reduce ビューは同一のフィールド値の数を簡単に生成できるため、フィールドの検索count > 1
は簡単です。次に、見つかった重複を修正します。
これを、要求/拒否または要求/承認のステップを含む単純なワークフローとして扱うこともできます。最初のドキュメントを保存しますが、たとえば"confirmed":true
. オフライン チェッカーが上記のチェックを実行した後にのみ確認を受け取ります。
現実世界のアプリケーションでは、CouchDB を使用して開発する人々は、時期尚早に最適化しないようにするのと同じ理由で、一意性制約を先延ばしにしていると思います。ユーザーの 99% は常に一意のメール アドレスを入力していることにおそらく気付くでしょう。常に一意性を強制しようとすると、必要のない問題が発生するだけです。