ট্রি ডেটা স্ট্রাকচারের জন্য ডেটাবেস স্ট্রাকচার


151

কোন ডাটাবেসে কোনও কাস্টমাইজযোগ্য (অর্থাত্ একটি অজানা সংখ্যার সাথে গাছের কাঠামো) প্রয়োগ করার সর্বোত্তম উপায় কী হবে?

আমি নিজের কাছে বিদেশী কী সহ একটি টেবিল ব্যবহার করার আগে একবার এটি করেছি।

আপনি আর কি কি বাস্তবায়ন দেখতে পেলেন এবং এই বাস্তবায়নটি কী বোঝায়?



এসকিউএল সার্ভার (২০০৮ সাল থেকে) শ্রেণিবদ্ধ ডেটা টাইপ
বর্নটোকোড

উত্তর:


80

আপনি সর্বাধিক প্রয়োগিত প্রয়োগের কথা উল্লেখ করেছেন, এটি অ্যাডজেসেন্সি তালিকা: https://blogs.msdn.microsoft.com/mvpawardprogram/2012/06/25/hierarchies-convert-adjacency-list-to-nested-sets

বস্তুগত পথ এবং নেস্টেড সেট সহ অন্যান্য মডেলগুলিও রয়েছে: http://communities.bmc.com/communities/docs/DOC-9902

জো সেলকো এই বিষয়ে একটি বই লিখেছেন, যা একটি সাধারণ এসকিউএল দৃষ্টিকোণ থেকে একটি ভাল রেফারেন্স (এটি উপরের নেস্টেড সেট নিবন্ধের লিঙ্কে উল্লেখ করা হয়েছে)।

এছাড়াও, ইটজিক বেন-গ্যান তার "ইনসাইড মাইক্রোসফ্ট এসকিউএল সার্ভার ২০০:: টি-এসকিউএল ক্যোয়ারিং" বইয়ের সর্বাধিক সাধারণ বিকল্পগুলির একটি ভাল ধারণা রয়েছে।

কোনও মডেল বাছাই করার সময় প্রধান বিষয়গুলি বিবেচনা করুন:

1) কাঠামোর পরিবর্তনের ফ্রিকোয়েন্সি - গাছের আসল কাঠামো কত ঘন ঘন পরিবর্তিত হয়। কিছু মডেল আরও ভাল স্ট্রাকচার আপডেট বৈশিষ্ট্য সরবরাহ করে। অন্য তথ্য পরিবর্তনের থেকে কাঠামোগত পরিবর্তনগুলি পৃথক করা গুরুত্বপূর্ণ। উদাহরণস্বরূপ, আপনি কোনও সংস্থার সাংগঠনিক চার্টটি মডেল করতে চাইতে পারেন। কিছু লোক এটিকে সংলগ্ন তালিকা হিসাবে মডেল করবেন, কোনও কর্মচারীকে তাদের তত্ত্বাবধায়কের সাথে সংযুক্ত করতে কর্মচারী আইডি ব্যবহার করে। এটি সাধারণত একটি উপ-অনুকূল পন্থা। একটি কৌশল যা প্রায়শই ভাল কাজ করে তা হ'ল org কাঠামোটি কর্মীদের থেকে পৃথক করে মডেল করা এবং কাঠামোর বৈশিষ্ট্য হিসাবে কর্মচারী বজায় রাখা। এইভাবে, যখন কোনও কর্মচারী সংস্থা ছেড়ে চলে যায়, তখন সাংগঠনিক কাঠামো নিজেই পরিবর্তন করার দরকার হয় না, কেবল যে কর্মচারী চলে যায় তার সাথে সংযুক্তি।

2) গাছটি কি ভারী বা ভারী ভারী লেখা - কাঠামোটি পড়ার সময় কিছু কাঠামো খুব ভালভাবে কাজ করে তবে কাঠামোতে লেখার সময় অতিরিক্ত ওভারহেড ব্যয় করে।

3) কাঠামো থেকে আপনার কী ধরণের তথ্য অর্জন করতে হবে - কিছু কাঠামো কাঠামো সম্পর্কে নির্দিষ্ট ধরণের তথ্য সরবরাহের ক্ষেত্রে দক্ষতা অর্জন করে। উদাহরণগুলির মধ্যে একটি নোড এবং তার সমস্ত বাচ্চাদের সন্ধান করা, একটি নোড এবং তার সমস্ত পিতামাতাকে সন্ধান করা, নির্দিষ্ট শর্ত পূরণ করে চাইল্ড নোডগুলির গণনা সন্ধান ইত্যাদি অন্তর্ভুক্ত include আপনার চাহিদা.


হাই, আমি প্রশ্নটিতে বর্ণিত ঠিক একই সমস্যার মুখোমুখি হয়েছি এবং উপরের বিষয়গুলি সম্পর্কে আপনাকে একটি প্রশ্ন জিজ্ঞাসা করতে চাই। এক নম্বর বিষয় হিসাবে কাঠামোগুলি বিবেচনা করে (একই টেবিলে রেফারেন্স করা প্যারেন্ট আইড সহ সাংগঠনিক কাঠামোগত টেবিল (কর্মচারী কাঠামোগত নয়)), আমাকে নির্দিষ্ট ক্ষেত্রের প্রধান কে হতে হবে তা নির্ধারণ করতে হবে। আমি সেই নির্দিষ্ট এলাকার সমস্ত কর্মচারীকে সরাসরি এটিতে নিয়োগ করব। আপনি যেখানে নির্দিষ্ট ক্ষেতের বস রাখবেন? একই এলাকা বা উপরে একটি গারুপ ভিতরে? আমার দৃষ্টিভঙ্গি তাকে / তার উপরের গ্রুপে উল্লেখ করা, এটি আমাকে আরও ভাল কাঠামো দেয়। ধন্যবাদ।
মার্কোস বুয়ার্ক

1
প্রথম লিঙ্কটি নষ্ট হয়ে গেছে বলে মনে হচ্ছে।
জোর্হে লিটাও

দুর্দান্ত উত্তর। ধন্যবাদ @ জেরেমিডুইল!
ববোকপি

56

মাইএসকিউএলে হায়ারার্কিকাল ডেটা পরিচালনা করার জন্য একবার দেখুন । এটি একটি সম্পর্কিত ডেটাবেজে শ্রেণিবদ্ধ (গাছের মতো) ডেটা সংরক্ষণ এবং পরিচালনা করার জন্য দুটি পদ্ধতির আলোচনা করে appro

প্রথম পদ্ধতির হ'ল সংলগ্ন তালিকার মডেল, যা আপনি মূলত বর্ণনা করেন: বিদেশী কী রয়েছে যা টেবিলে নিজেই বোঝায়। যদিও এই পদ্ধতিটি সহজ, এটি পুরো গাছ তৈরির মতো নির্দিষ্ট প্রশ্নের জন্য খুব অদক্ষ হতে পারে।

নিবন্ধে আলোচিত দ্বিতীয় পদ্ধতির নেস্টেড সেট মডেল। এই পদ্ধতির চেয়ে অনেক বেশি দক্ষ এবং নমনীয়। বিস্তারিত ব্যাখ্যা এবং উদাহরণের প্রশ্নের জন্য নিবন্ধটি দেখুন।


আপনার লিঙ্কটি একটি খুব আকর্ষণীয় বিষয় আলোচনা করা হচ্ছে। ধন্যবাদ!
ফ্রিটজ

9

আপনার যদি ট্রি ডেটা কাঠামোটি সংগঠিত করতে রিলেশনাল ডেটাবেস ব্যবহার করতে হয় তবে পোস্টগ্র্যাসক্লিতে শীতল এলটিআর মডিউল রয়েছে যা বৃত্তবৃদ্ধ গাছের মতো কাঠামোয় সংরক্ষিত ডেটার লেবেল উপস্থাপনের জন্য ডেটা টাইপ সরবরাহ করে। আপনি সেখান থেকে ধারণাটি পেতে পারেন ((আরও তথ্যের জন্য দেখুন: http://www.postgresql.org/docs/9.0/static/ltree.html )

সাধারণভাবে এলডিএপি হায়ারার্কিকাল স্ট্রাকচারে রেকর্ডগুলি সংগঠিত করতে ব্যবহৃত হয়।


2

নিজের কাছে একটি বিদেশী কী সহ একটি টেবিল থাকা আমার কাছে বোধগম্য।

তারপরে আপনি আপনার গাছ তৈরির জন্য এসকিউএল-এ সাধারণ টেবিল এক্সপ্রেশন বা ওরাকল-এর পূর্ব বিবৃতি দ্বারা সংযোগ ব্যবহার করতে পারেন।


আমার লগআইডি পরিচয় কলাম সহ একটি লগ টেবিল এবং একটি FK সহ একটি প্যারেন্টলজিড কলাম রয়েছে যা লগআইডিআইডি কলামে ফিরে নির্দেশ করে points যখন কোনও লেনদেনের প্রথম লগ সারিটি লেখা হয়, আমি SCOPE_IDENTITY () ধরি। অন্যান্য সমস্ত লগ রেকর্ডগুলি প্যারেন্টলজিআইডি কলামে এই মানটি দিয়ে লেখা হয়। একসাথে থাকা সারি গোষ্ঠীকরণের জন্য এটি সত্যই কার্যকর। কী ঘটেছিল তা দেখার একমাত্র আসল উপায়, এটি ব্যতীত এটি একসাথে সমস্ত মিশ্রিত একাধিক লেনদেন থেকে লগ সারিগুলির একটি বিশাল গণ্ডগোল হবে।
কেএম

@ কেএম - তিনি বলেছিলেন যে "বোধ হয়" "বোঝায় না" "
জন রাশ


1

আমি এসকিউএল সার্ভারে নিম্নলিখিত বাস্তবায়ন ব্যবহার করেছি 2005. চেক এখানে


0

যদি এমএস এসকিউএল সার্ভার ২০০৮ এবং উচ্চতর জমিগুলি এই প্রশ্নটিতে ব্যবহার করে তবে: এসকিউএল সার্ভার ২০০৮ এবং এর উচ্চতর এই কাজের জন্য বিশেষভাবে ডিজাইন করা একটি নতুন "hierarchyId" বৈশিষ্ট্য রয়েছে।

Https://docs.microsoft.com/en-us/sql/relational-databases/hierarchical-data-sql-server এ আরও তথ্য

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.