sql >> Database >  >> NoSQL >> MongoDB

mongoDB-alternatieven voor externe sleutelbeperkingen

MongoDB heeft geen trapsgewijze verwijderingen. Wanneer uw toepassing gegevens verwijdert, is deze ook verantwoordelijk voor het verwijderen van objecten waarnaar wordt verwezen zelf en eventuele verwijzingen naar het verwijderde document. Maar meestal als je on delete . gebruikt in een relationele database heb je een geval van compositie waarbij een bovenliggend object een of meer onderliggende objecten bezit en de onderliggende objecten zonder de bovenliggende betekenis zinloos zijn. In die situatie moedigt MongoDB insluiten aan in plaats van verwijzen . Dat betekent dat u een array in het bovenliggende object maakt en de volledige onderliggende documenten in die array plaatst in plaats van ze in een eigen verzameling te bewaren. Op die manier worden ze samen met de ouder verwijderd, omdat ze er deel van uitmaken.

Hoewel het absoluut niet mogelijk is om meer dan één waarde in een veld te houden in SQL, is daar niets mis mee in MongoDB. Dat komt omdat de MongoDB-querytaal gemakkelijk kan werken met arrays en ingesloten objecten. U kunt zelfs indexen maken op velden van subdocumenten in arrays, zodat u gemakkelijk kunt zoeken naar objecten die zijn ingesloten in andere objecten.

Als je nog steeds naar objecten uit een andere collectie wilt verwijzen, kun je ofwel een DBRef gebruiken, of je kunt ook een andere unieke identifier gebruiken (uniciteit is een van de weinige dingen die door MongoDB kunnen worden afgedwongen. Om dit te doen, maak een unieke index met de opdracht createIndex ). Maar MongoDB dwingt in dit geval geen consistentie af. U kunt DBRef's maken die verwijzen naar niet-bestaande ObjectIds en wanneer het document waarnaar de DBRef verwijst wordt verwijderd, gebeurt er niets. De applicatie is verantwoordelijk om ervoor te zorgen dat wanneer het een document verwijdert, alle documenten die ernaar verwijzen, worden bijgewerkt.

Beperkingen kunnen ook niet worden afgedwongen door MongoDB. Het kan zelfs geen specifiek type voor een veld afdwingen, vanwege het schemaloze karakter van MongoDB. Nogmaals, uw toepassing is verantwoordelijk om ervoor te zorgen dat de gegevens die het in mongodb plaatst, aan specifieke specificaties voldoen. Als je dit wilt automatiseren, zijn er object-relationele mapping frameworks voor MongoDB voor veel programmeertalen beschikbaar.

Om het allemaal af te ronden: MongoDB is niet zo "slim" als SQL-databases. Op zich doet het niet veel. Het doet wat het wordt verteld door de applicatie, niet meer en niet minder. Maar dat is de reden waarom het zo snel is (geen dure consistentiecontroles) en flexibel (geen databaseaanpassingen nodig om nieuwe functies te implementeren).



  1. Kan MongoDB strings van UTF-8 opslaan en manipuleren met codepunten buiten het meertalige basisvlak?

  2. Hoe innerlijk toetreden in MongoDB?

  3. hoe mongodb-aggregaat te gebruiken en volledige documenten op te halen

  4. Indexeren op een veld dat zich in een array van subdocumenten bevindt