sql >> Databasteknik >  >> NoSQL >> MongoDB

mongoDB-alternativ för främmande nyckelbegränsningar

MongoDB har inga överlappande borttagningar. När din applikation raderar data är den också ansvarig för att själv ta bort eventuella refererade objekt och eventuella referenser till det raderade dokumentet. Men vanligtvis när du använder on delete i en relationsdatabas har du ett fall av sammansättning där ett överordnat objekt äger ett eller flera underordnade objekt, och underordnade objekten är meningslösa utan föräldern. I den situationen uppmuntrar MongoDB inbäddning istället för hänvisning a> . Det betyder att du skapar en array i det överordnade objektet och lägger in de fullständiga underordnade dokumenten i den arrayen istället för att behålla dem i en egen samling. På så sätt kommer de att raderas tillsammans med föräldern, eftersom de är en del av det.

Även om att behålla mer än ett värde i ett fält är ett absolut no-go i SQL, är det inget fel med det i MongoDB. Det beror på att frågespråket MongoDB enkelt kan arbeta med arrayer och inbäddade objekt. Du kan till och med skapa index på fält av underdokument i arrayer, så att du enkelt kan söka efter objekt som är inbäddade i andra objekt.

När du ändå vill referera till objekt från en annan samling kan du antingen använda en DBRef, eller så kan du också använda vilken annan unik identifierare som helst (unikhet är en av de få saker som kan upprätthållas av MongoDB. För att göra det, skapa ett unikt index med kommandot createIndex ). Men MongoDB upprätthåller inte konsekvens i det här fallet. Du kan skapa DBRefs som pekar på icke-existerande ObjectIds och när dokumentet som DBRef pekar på raderas kommer ingenting att hända. Applikationen ansvarar för att se till att alla dokument som refererar till det uppdateras när den raderar ett dokument.

Begränsningar kan inte heller tillämpas av MongoDB. Det kan inte ens genomdriva en specifik typ för ett fält, på grund av MongoDBs schemalösa natur. Återigen är din applikation ansvarig för att se till att data den lägger in i mongodb följer specifika specifikationer. När du vill automatisera detta finns det objektrelationella mappningsramverk för MongoDB för många programmeringsspråk tillgängliga.

Så här avslutar du det hela: MongoDB är inte lika "smart" som SQL-databaser. Det gör inte så mycket på egen hand. Den gör vad den blir tillsagd av applikationen, inte mer och inte mindre. Men det är anledningen till att det är så snabbt (inga dyra konsistenskontroller) och flexibelt (inga databasändringar krävs för att implementera nya funktioner).



  1. Mongo $lookup-filter med kapslad fråga

  2. Hur man ställer in återuppringning i mongoose, i en global variabel

  3. dropDups sant fungerar inte mongodb

  4. Hur man distribuerar MongoDB på Heroku