In che modo i database orientati ai documenti implementano i riferimenti?

6

Nel mondo relazionale abbiamo Foreign Keys per fare riferimento ad altre entità. Ma come fanno i database orientati ai documenti come MongoDb, CouchDb, RavenDb a implementare riferimenti tra entità?

Aggiornamento. Esempio correlato a StackExchange. Abbiamo un'entità Domanda e i suoi tag. Ogni tag è un'entità separata e quindi ha le sue proprietà (ad esempio, descrizione). Come posso fare riferimento ai tag per alcune domande?

    
posta SiberianGuy 09.10.2011 - 14:14
fonte

2 risposte

6

Puoi fare la stessa cosa degli RMDB, fai riferimento per identificatori. Io uso MongoDB, quindi possiamo parlare di questo da quel punto.

tag:

{
  _id: ObjectId('tag id'),
  tag_name: "nosql",
  tag_description: "blahblah' 
}

Quindi nel post

{
  _id: ObjectId('post id'),
  tags: [
    ObjectId('tag1 id'),
    ObjectId('tag2 id')
  ],
  title: "title",
  // etc..
}

Quando carichi un oggetto Post puoi anche estrarre i tuoi tag, oppure puoi estrarli dalla cache. Spesso usi un ODM (invece di ORM) e spesso puoi gestire questi riferimenti per te. Ad esempio, in Mongoid per Rails, dovresti solo dire :has_many :tags e questo sarebbe il resto per te. Quando chiami post.tags , viene semplicemente restituito un array di tag associati al post.

    
risposta data 09.10.2011 - 16:05
fonte
4

Easy; non lo fanno.

Se desideri abilitare la partecipazione, devi implementarle nel tuo codice cliente. Alcune di queste API lo rendono un po 'più semplice definendo un tipo di' Chiave 'che facilita la memorizzazione e l'uso dei riferimenti, ma devi fare un secondo recupero per ottenere l'entità referenziata.

    
risposta data 09.10.2011 - 14:37
fonte

Leggi altre domande sui tag