sql >> Databáze >  >> NoSQL >> MongoDB

alternativy mongoDB pro omezení cizího klíče

MongoDB nemá žádné kaskádové mazání. Když vaše aplikace odstraní data, je také zodpovědná za odstranění všech odkazovaných objektů sama o sobě a všech odkazů na odstraněný dokument. Ale obvykle, když použijete on delete v relační databázi máte případ kompozice, kdy jeden nadřazený objekt vlastní jeden nebo více podřízených objektů a podřízené objekty bez nadřazeného objektu postrádají smysl. V této situaci MongoDB doporučuje vkládání namísto odkazování . To znamená, že vytvoříte pole v nadřazeném objektu a do tohoto pole vložíte úplné podřízené dokumenty namísto toho, abyste je uchovávali ve vlastní kolekci. Tímto způsobem budou odstraněny společně s rodičem, protože jsou jeho součástí.

Zatímco ponechání více než jedné hodnoty v poli je v SQL absolutní zákaz, v MongoDB na tom není nic špatného. Je to proto, že dotazovací jazyk MongoDB může snadno pracovat s poli a vloženými objekty. Můžete dokonce vytvářet indexy na polích dílčích dokumentů v polích, takže můžete snadno vyhledávat objekty, které jsou vnořeny do jiných objektů.

Pokud stále chcete odkazovat na objekty z jiné kolekce, můžete buď použít DBRef, nebo můžete také použít jakýkoli jiný jedinečný identifikátor (jedinečnost je jednou z mála věcí, které může MongoDB vynutit. Chcete-li tak učinit, vytvořte jedinečný index pomocí příkazu createIndex ). Ale MongoDB v tomto případě nevynucuje konzistenci. Můžete vytvořit DBRefs, které ukazují na neexistující ObjectId, a když je dokument, na který DBRef ukazuje, odstraněn, nic se nestane. Aplikace je zodpovědná za to, že když odstraní dokument, budou aktualizovány všechny dokumenty, které na něj odkazují.

Omezení nelze vynutit ani MongoDB. Nemůže ani vynutit konkrétní typ pro pole, kvůli bezschemické povaze MongoDB. Vaše aplikace je opět zodpovědná za to, že data, která vkládá do mongodb, odpovídají konkrétním specifikacím. Pokud to chcete automatizovat, jsou k dispozici objektově-relační mapovací rámce pro MongoDB pro mnoho programovacích jazyků.

Abychom to všechno uzavřeli: MongoDB není tak „chytrý“ jako SQL databáze. Samo o sobě toho moc nenadělá. Dělá to, co mu aplikace říká, ne více a ne méně. Ale to je důvod, proč je tak rychlý (žádné drahé kontroly konzistence) a flexibilní (žádné úpravy databáze nutné k implementaci nových funkcí).



  1. MongoDB findOneAndReplace()

  2. Jak aktualizovat podmnožinu řetězce v MongoDB?

  3. Jak aktualizovat více prvků pole v mongodb

  4. odstranění duplicitních hodnot pole z mongodb