Το MongoDB είναι μια βάση δεδομένων εγγράφων και δεν διατηρεί σχέσεις μεταξύ εγγράφων όπως σχεσιακές βάσεις δεδομένων όπως η PostgreSQL.
Ωστόσο, το MongoDB σάς επιτρέπει να δημιουργείτε σχέσεις μεταξύ εγγράφων. Αυτές οι σχέσεις μπορούν είτε να μοντελοποιηθούν μέσω ενσωματωμένων ή αναφερόμενων προσεγγίσεων. Ας ρίξουμε μια πιο προσεκτική ματιά.
Ενσωματωμένες σχέσεις vs. Σχέσεις Αναφοράς
Σε μια ενσωματωμένη προσέγγιση, ένα έγγραφο εισάγεται απευθείας μέσα σε άλλο έγγραφο, με αποτέλεσμα ένθετα δεδομένα. Η διαδικασία ονομάζεται επίσης «αποκανονικοποίηση».
Η προσέγγιση αναφοράς, από την άλλη πλευρά, χρησιμοποιεί αναφορές εγγράφων για να οδηγεί από το ένα έγγραφο στο άλλο. Αυτή η προσέγγιση ονομάζεται επίσης "κανονικοποίηση".
MongoDB: One-to-One Relationships with Embedded Documents
Μπορείτε να δημιουργήσετε μια σχέση ένας προς έναν μεταξύ των εγγράφων χρησιμοποιώντας την ενσωματωμένη προσέγγιση. Αυτή η σχέση προκύπτει όταν ένα αντικείμενο εγγράφου μπορεί να σχετίζεται μόνο με ένα άλλο έγγραφο.
Σκεφτείτε μια βάση δεδομένων μαθητών. Αυτή η βάση δεδομένων περιέχει τις συλλογές μαθητών και διευθύνσεων με τα ακόλουθα έγγραφα.
// Έγγραφο Φοιτητή
{
"studentName": "Frodo Baggins",
"phone Number": "987654321",
};
// Έγγραφο διεύθυνσης
{
"studentName": "Frodo Baggins",
"street": "Bagshot Row",
"πόλη": "Χόμπιτον",
}
Σε αυτή τη βάση δεδομένων, ένας μαθητής επιτρέπεται να έχει μόνο μία διεύθυνση. Για να ανακτήσετε τη διεύθυνση, θα πρέπει να υποβάλετε ερώτημα στη συλλογή διευθύνσεων χρησιμοποιώντας το όνομα του μαθητή.
Σχετίζεται με: Πώς να δημιουργήσετε μια βάση δεδομένων και μια συλλογή στο MongoDB
Σε περιπτώσεις όπου η διεύθυνση χρησιμοποιείται παράλληλα με άλλες λεπτομέρειες όπως α όνομα μαθητή, θα πρέπει να ρωτήσετε τη βάση δεδομένων πολλές φορές. Το μειονέκτημα αυτού είναι ο μεγάλος αριθμός λειτουργιών ανάγνωσης και κατά συνέπεια η χαμηλή απόδοση ερωτήματος.
Χρησιμοποιώντας την ενσωματωμένη προσέγγιση, μπορείτε να εισαγάγετε τα δεδομένα διεύθυνσης απευθείας στο έγγραφο μαθητή και να χρησιμοποιήσετε μόνο ένα ερώτημα για να λάβετε τα δεδομένα.
{
"studentName": "Frodo Baggins",
"phone Number": "987654321",
"διεύθυνση": [{
"street": "Bagshot Row",
"city": "Hobiton"
}],
};
Για να ανακτήσετε τη διεύθυνση μέσω του όνομα μαθητή, χρησιμοποιήστε αυτό το ερώτημα.
db.student.findOne({"studentName":"Frodo Baggins"}, {"address":1})
Σχέσεις One-to-Many με ενσωματωμένα έγγραφα στο MongoDB
Σκεφτείτε μια κατάσταση όπου ένας μαθητής έχει πολλές διευθύνσεις. Η σχέση μεταξύ του μαθητή και των διευθύνσεων γίνεται ένα προς πολλά.
Το ενσωματωμένο μοντέλο σάς επιτρέπει να προσθέσετε πολλές διευθύνσεις στο έγγραφο μαθητή. Όπως και στη σχέση ένας προς έναν χρησιμοποιώντας ενσωματωμένα έγγραφα, αυτή η προσέγγιση έχει σχετικά υψηλή απόδοση ερωτήματος.
{
"studentName": "Frodo Baggins",
"phone Number": "987654321",
"διεύθυνση": [
{
"street": "Bagshot Row",
"city": "Hobiton"
},
{
"street": "Another Bagshot Row",
"city": "Hobiton2"
},
]
};
Το παρακάτω ερώτημα θα επιστρέψει τις διευθύνσεις του καθορισμένου ονόματος μαθητή.
db.student.findOne({studentName: "Frodo Baggins"}, {address: 1})
Σχετίζεται με: Πώς να δημιουργήσετε έγγραφα στο MongoDB
Τώρα, εάν έχετε περισσότερες διευθύνσεις και συνεχίσετε να τις προσθέτετε στο πεδίο διεύθυνσης, το έγγραφο μπορεί να γεμίσει αρκετά γρήγορα. Μια λύση είναι η χρήση παραπομπών εγγράφων.
MongoDB: Σχέσεις ένα προς πολλά με παραπομπές εγγράφων
Μπορείτε επίσης να μοντελοποιήσετε μια σχέση ένα προς πολλά χρησιμοποιώντας την προσέγγιση αναφοράς. Σε αυτό το μοντέλο δεδομένων, τα δεδομένα μαθητή και διεύθυνσης θα διατηρούνται σε ξεχωριστές συλλογές. Για να συσχετίσετε τον μαθητή με τη διεύθυνσή του, προσθέστε ένα πεδίο που περιέχει τα αναγνωριστικά διευθύνσεων στο έγγραφο μαθητή.
{
"studentName": "Frodo Baggins",
"phone Number": "987654321",
"διεύθυνση": [
ObjectId("61fa7bfeebdadf8ac71427ea"),
ObjectId("61fa7d19ebdadf8ac71427eb")
]
};
Η λήψη των στοιχείων διεύθυνσης ενός μαθητή περιλαμβάνει τη λήψη των αναγνωριστικών διευθύνσεων από το έγγραφο μαθητή και τη χρήση αυτών των αναγνωριστικών για την ανάκτηση των πραγματικών διευθύνσεων από τη συλλογή.
const student = db.users.findOne({"name":"Frodo Baggins"},{"address":1})
const addresses = db.address.find({"_id":{"$in":student["address_ids"]}})
Επιλογή μεταξύ ενσωματωμένων προσεγγίσεων και προσεγγίσεων αναφοράς
Τόσο τα μοντέλα ενσωμάτωσης όσο και αναφοράς έχουν τα πλεονεκτήματα και τα μειονεκτήματά τους και θα πρέπει να εξετάσετε μερικά πράγματα πριν κάνετε μια επιλογή. Για αρχή, θα πρέπει να εξετάσετε την περίπτωση χρήσης. Εάν τα δεδομένα σχετίζονται μόνο με ένα έγγραφο, η ενσωμάτωση θα μπορούσε να είναι η καλύτερη επιλογή σας.
Για να δημιουργήσετε σχέσεις ένα προς πολλά, μπορείτε να χρησιμοποιήσετε είτε το μοντέλο αναφοράς είτε το ενσωματωμένο μοντέλο. Η αναφορά οδηγεί σε ένα καθαρό και συνεπές έγγραφο, καθώς προσθέτετε μόνο το αναγνωριστικό αναφοράς του εγγράφου με το οποίο θέλετε να συσχετιστείτε.
Ωστόσο, ο αριθμός των λειτουργιών ανάγνωσης που απαιτούνται για την ανάκτηση των συνδεδεμένων δεδομένων είναι σχετικά υψηλός και μπορεί να επηρεάσει την απόδοση. Η ενσωμάτωση του εγγράφου μπορεί να αυξήσει την απόδοση, αλλά με πολλά ένθετα έγγραφα μπορεί να καταλήξετε με μια συμφορημένη συλλογή.
Επομένως, η επιλογή του τρόπου υλοποίησης των σχέσεων δεδομένων στο έγγραφό σας εξαρτάται αποκλειστικά από εσάς. Σκεφτείτε πώς θα χρησιμοποιήσετε το έγγραφο, το επίπεδο απόδοσης ερωτήματος στο οποίο στοχεύετε και τους συμβιβασμούς που είστε διατεθειμένοι να κάνετε.
Σκέφτεστε μια διαφορετική προσέγγιση στις βάσεις δεδομένων; Δείτε πώς λειτουργεί η μοντελοποίηση δεδομένων στο MongoDB.
Διαβάστε Επόμενο
- Προγραμματισμός
- Προγραμματισμός
- βάση δεδομένων
Η Mary Gathoni είναι μια προγραμματίστρια λογισμικού με πάθος για τη δημιουργία τεχνικού περιεχομένου που δεν είναι μόνο ενημερωτικό αλλά και συναρπαστικό. Όταν δεν κωδικοποιεί ή δεν γράφει, της αρέσει να κάνει παρέα με φίλους και να βρίσκεται σε εξωτερικούς χώρους.
Εγγραφείτε στο ενημερωτικό μας δελτίο
Εγγραφείτε στο ενημερωτικό μας δελτίο για συμβουλές τεχνολογίας, κριτικές, δωρεάν ebook και αποκλειστικές προσφορές!
Κάντε κλικ εδώ για να εγγραφείτε