আমি মঙ্গোডিবিতে এই জাতীয় কোনও পরিকল্পনা কীভাবে ডিজাইন করব? আমার মনে হয় কোনও বিদেশী চাবি নেই!
আমি মঙ্গোডিবিতে এই জাতীয় কোনও পরিকল্পনা কীভাবে ডিজাইন করব? আমার মনে হয় কোনও বিদেশী চাবি নেই!
উত্তর:
আপনি মংগয়েড বা মঙ্গোমাপ্পারের মতো কোনও ওআরএম ব্যবহারে আগ্রহী হতে পারেন।
http://mongoid.org/docs/references/referencesd/1-n.html
মঙ্গোডিবি-র মতো কোনও নোএসকিউএল ডাটাবেসে 'টেবিল' নয় তবে সংগ্রহ রয়েছে। সংগ্রহগুলির মধ্যে নথিগুলি গোষ্ঠীভুক্ত করা হয়। একক সংকলনে আপনার যে কোনও ধরনের নথি থাকতে পারে - যে কোনও ধরনের ডেটা সহ with মূলত, কোনও নোএসকিউএল ডাটাবেজে আপনার যদি কোনও তথ্য থাকে তবে কীভাবে ডেটা এবং তার সম্পর্কগুলি সংগঠিত করবেন তা সিদ্ধান্ত নেওয়া আপনার উপর নির্ভর করে।
মংগয়েড এবং মঙ্গোমাপার যা করেন তা হ'ল আপনাকে সহজেই সম্পর্ক স্থাপনের জন্য সুবিধাজনক পদ্ধতিগুলি সরবরাহ করা। আমি আপনাকে দেওয়া লিঙ্কটি দেখুন এবং যেকোন কিছু জিজ্ঞাসা করুন।
সম্পাদনা করুন:
মঙ্গয়েডে আপনি আপনার স্কিমটি এভাবে লিখবেন:
class Student
include Mongoid::Document
field :name
embeds_many :addresses
embeds_many :scores
end
class Address
include Mongoid::Document
field :address
field :city
field :state
field :postalCode
embedded_in :student
end
class Score
include Mongoid::Document
belongs_to :course
field :grade, type: Float
embedded_in :student
end
class Course
include Mongoid::Document
field :name
has_many :scores
end
সম্পাদনা করুন:
> db.foo.insert({group:"phones"})
> db.foo.find()
{ "_id" : ObjectId("4df6539ae90592692ccc9940"), "group" : "phones" }
{ "_id" : ObjectId("4df6540fe90592692ccc9941"), "group" : "phones" }
>db.foo.find({'_id':ObjectId("4df6539ae90592692ccc9940")})
{ "_id" : ObjectId("4df6539ae90592692ccc9940"), "group" : "phones" }
নথিগুলির মধ্যে সম্পর্ক স্থাপনের জন্য আপনি সেই অবজেক্টআইড ব্যবহার করতে পারেন।
মংডোবিতে এই জাতীয় টেবিল কীভাবে ডিজাইন করবেন?
প্রথমে কিছু নামকরণের সম্মেলন পরিষ্কার করতে। এর collections
পরিবর্তে মঙ্গোডিবি ব্যবহার করে tables
।
আমার মনে হয় কোনও বিদেশী চাবি নেই!
নিম্নলিখিত মডেল নিন:
student
{
_id: ObjectId(...),
name: 'Jane',
courses: [
{ course: 'bio101', mark: 85 },
{ course: 'chem101', mark: 89 }
]
}
course
{
_id: 'bio101',
name: 'Biology 101',
description: 'Introduction to biology'
}
স্পষ্টতই জেনের কোর্সের তালিকাটি নির্দিষ্ট কিছু কোর্সের দিকে নির্দেশ করে। ডাটাবেস সিস্টেমে কোনও বাধা প্রয়োগ করে না ( যেমন: বিদেশী কী বাধা ), তাই কোনও "ক্যাসকেডিং মোছা" বা "ক্যাসকেডিং আপডেট" নেই। তবে, ডাটাবেসটিতে সঠিক তথ্য রয়েছে does
তদ্ব্যতীত , মঙ্গোডিবির একটি ডিবিআরএফ স্ট্যান্ডার্ড রয়েছে যা এই উল্লেখগুলি তৈরির মানকে সহায়তা করতে সহায়তা করে। আসলে, আপনি যদি সেই লিঙ্কটি একবার দেখুন, এটির একটি অনুরূপ উদাহরণ রয়েছে।
আমি এই কাজটি কীভাবে সমাধান করতে পারি?
পরিষ্কারভাবে বলতে গেলে, মঙ্গোডিবি সম্পর্কযুক্ত নয়। কোনও স্ট্যান্ডার্ড "নরমাল ফর্ম" নেই। আপনার সঞ্চয় করা ডেটা এবং আপনার চালনার ইচ্ছা অনুসারে থাকা প্রশ্নের জন্য আপনার আপনার ডাটাবেসটি উপযুক্ত করা উচিত।
আমরা foreign key
মঙ্গোডিবি -তে তথাকথিত সংজ্ঞা দিতে পারি । তবে আমাদের নিজের দ্বারা ডেটা অখণ্ডতা বজায় রাখা দরকার । উদাহরণ স্বরূপ,
student
{
_id: ObjectId(...),
name: 'Jane',
courses: ['bio101', 'bio102'] // <= ids of the courses
}
course
{
_id: 'bio101',
name: 'Biology 101',
description: 'Introduction to biology'
}
courses
ক্ষেত্র রয়েছে _id
কোর্স গুলি। একের মধ্যে একাধিক সম্পর্কের সংজ্ঞা দেওয়া সহজ। তবে, আমরা যদি শিক্ষার্থীর কোর্সের নামগুলি পুনরুদ্ধার করতে চাই, তবে আমাদের ডকুমেন্টটি Jane
পুনরুদ্ধার করার জন্য অন্য একটি ক্রিয়াকলাপ করা উচিত ।course
_id
যদি কোর্সটি bio101
সরানো হয়, আমাদের ডকুমেন্টের courses
ক্ষেত্রটি আপডেট করার জন্য অন্য একটি ক্রিয়াকলাপ করা উচিত student
।
মংগোডিবি-র নথি-টাইপিত প্রকৃতি সম্পর্কের সংজ্ঞা দেওয়ার নমনীয় উপায়গুলিকে সমর্থন করে। একের মধ্যে একাধিক সম্পর্কের সংজ্ঞা দিতে:
উদাহরণ:
student
{
name: 'Kate Monster',
addresses : [
{ street: '123 Sesame St', city: 'Anytown', cc: 'USA' },
{ street: '123 Avenue Q', city: 'New York', cc: 'USA' }
]
}
উপরের student
/ course
উদাহরণটি পছন্দ করুন ।
লগ বার্তাগুলির মতো এক থেকে স্কোয়িলিয়নের জন্য উপযুক্ত।
host
{
_id : ObjectID('AAAB'),
name : 'goofy.example.com',
ipaddr : '127.66.66.66'
}
logmsg
{
time : ISODate("2014-03-28T09:42:41.382Z"),
message : 'cpu is on fire!',
host: ObjectID('AAAB') // Reference to the Host document
}
কার্যত, একটি host
হ'ল এর পিতামাতা logmsg
। host
লগ বার্তাগুলি স্কিলিয়নে দেওয়া এই আইডিকে রেফারেন্স করা অনেক বেশি জায়গা সাশ্রয় করে।
তথ্যসূত্র:
থেকে লিটল MongoDB বুক
যোগদানের সাথে যুক্ত হওয়ার আরেকটি বিকল্প হ'ল আপনার ডেটাটিকে ডেনরমালাইজ করা। Icallyতিহাসিকভাবে, ডেনরমালাইজেশন কার্য সম্পাদন-সংবেদনশীল কোডের জন্য সংরক্ষণ করা হয়েছিল, বা যখন ডেটা স্ন্যাপশট করা উচিত (অডিট লগের মতো)। যাইহোক, নোএসকিউএল-এর ক্রমবর্ধমান জনপ্রিয়তার সাথে, যার মধ্যে বেশিরভাগই যোগ দেয় না, সাধারণ মডেলিংয়ের অংশ হিসাবে অস্বীকৃতি ক্রমশই সাধারণ হয়ে উঠছে। এর অর্থ এই নয় যে আপনার প্রত্যেক নথিতে প্রতিটি টুকরো তথ্য নকল করা উচিত। যাইহোক, সদৃশ ডেটা আপনার নকশার সিদ্ধান্তগুলিকে চালিত করার পরিবর্তে কোন তথ্যটি কী ডকুমেন্টের সাথে সম্পর্কিত তার ভিত্তিতে আপনার ডেটা মডেলিংয়ের বিষয়টি বিবেচনা করুন।
সুতরাং,
student
{
_id: ObjectId(...),
name: 'Jane',
courses: [
{
name: 'Biology 101',
mark: 85,
id:bio101
},
]
}
যদি এটি একটি রেস্টলফুল এপিআই ডেটা হয় তবে কোর্স আইডিকে কোর্স রিসোর্সের জিইটি লিঙ্কের সাথে প্রতিস্থাপন করুন
ফরেনকির উদ্দেশ্য হ'ল যদি ক্ষেত্রের মানটি তার বিদেশের সাথে মেলে না তবে ডেটা তৈরি করা রোধ করা। মঙ্গোডিবিতে এটি সম্পাদন করার জন্য, আমরা স্কিমা মিডলওয়্যারগুলি ব্যবহার করি যা ডেটা ধারাবাহিকতা নিশ্চিত করে।
ডকুমেন্টেশন একবার দেখুন। https://mongoosejs.com/docs/middleware.html#pre