একটি ডাটাবেসে ট্যাগ সঞ্চয় করার সবচেয়ে কার্যকর উপায় কী?


138

আমি আমার ওয়েবসাইটে একটি স্ট্যাকওভারফ্লো ব্যবহারের অনুরূপ একটি ট্যাগিং সিস্টেম বাস্তবায়ন করছি, আমার প্রশ্ন - ট্যাগগুলি সংরক্ষণ করার সবচেয়ে কার্যকর উপায় কী যাতে সেগুলি অনুসন্ধান এবং ফিল্টার করা যায়?

আমার ধারণাটি হ'ল:

Table: Items
Columns: Item_ID, Title, Content

Table: Tags
Columns: Title, Item_ID

এটা কি খুব ধীর? একটি ভাল উপায় আছে কি?


2
পূর্বে জিজ্ঞেস করেন: stackoverflow.com/questions/20856/...
DrBloodmoney

1
2016 সালের হিসাবে, সোলার বা ইলাস্টিকসার্ক
চার্লস এল।

উত্তর:


189

একটি আইটেম অনেক ট্যাগ হতে চলেছে। এবং একটি ট্যাগ অনেকগুলি আইটেমের অন্তর্ভুক্ত। এটি আমার কাছে বোঝায় যে বহু-থেকে-বহু প্রতিবন্ধকতা কাটিয়ে উঠতে আপনার পক্ষে সম্ভবত একটি মধ্যবর্তী টেবিলের প্রয়োজন।

কিছুটা এইরকম:

সারণী: আইটেম
কলাম: আইটেম_আইডি, আইটেম_উইস, সামগ্রী

সারণী: ট্যাগস
কলাম: ট্যাগ_আইডি, ট্যাগ_শক্তি

সারণী: আইটেম_টি্যাগস
কলাম: আইটেম_আইডি, ট্যাগ_আইডি

এটি হতে পারে যে আপনার ওয়েব অ্যাপটি অত্যন্ত জনপ্রিয় এবং রাস্তার নীচে নামার প্রয়োজন, তবে এটি খুব তাড়াতাড়ি জলকে কাঁদাচ্ছে।



যদি ট্যাগগ্রুপের মতো এটির পরিচালনা করার মতো কোনও জিনিস থাকে যেমন ট্যাগগুলি বিভাগগুলিতে ভাগ করা হয় যেমন: প্রোগ্রামিং ভাষা: সি #, ভিবি, মুক্তো। ওএস: উইন্ডোজ 7, ​​ডস, লিনাক্স ইত্যাদি
থান্ডার

4
@ থান্ডার: ধরে নিই যে একটি ট্যাগ কেবল একটি বিভাগের অন্তর্ভুক্ত হতে পারে, আমি বিভাগ_আইড এবং বিভাগ_নামের সমন্বিত একটি ট্যাগশ্রেণী টেবিল তৈরি করব। সেখান থেকে আমি ট্যাগের টেবিলে একটি বিভাগ_আইডি ফিল্ড যুক্ত করব এবং এতে একটি যোগদান করবো।
সাইমন স্কার্ফ

114

ফিলিপ কেলারের ব্লগ পোস্টগুলি ডাটাবেস স্কিমার ট্যাগিং সম্পর্কে পড়তে হবে। কয়েক চেষ্টা করে এবং তার ফলাফল রিপোর্ট, উভয় সাধারণ প্রশ্নের নির্মাণের কর্মের পরিপ্রেক্ষিতে , এবং কার্যকারিতা পদ । ট্যাগের সংখ্যা, ট্যাগ হওয়া আইটেমের সংখ্যা এবং আইটেম প্রতি ট্যাগের সংখ্যা সমস্ত কারণ ছিল। পোস্টগুলি 2005 এর; আমি তখন থেকে কোনও আপডেট সম্পর্কে অবগত নই।


19
আমি মনে করি এটিই সেরা উত্তর। এটি অন্যান্য উত্তরগুলির মতো অনুমানের চেয়ে প্রকৃত পরীক্ষা এবং গবেষণার উপর ভিত্তি করে।
ক্রিশ্চিয়ান ভ্রাবী

4
উত্তরের লিঙ্কগুলি কাজ করছে বলে মনে হচ্ছে না। Vtidter.blogspot.be/2014/02/datedia-schema-for-tags.html-
ক্রিস্টোফ হারেম্যান

8

প্রকৃতপক্ষে আমি বিশ্বাস করি স্কেলগুলির উপর নির্ভর করে ট্যাগ টেবিলটিকে ডি-নরমালাইজ করা আরও ভাল উপায় হতে পারে।

এইভাবে, ট্যাগ টেবিলটিতে কেবল ট্যাগড, আইটেমিড, ট্যাগ নাম থাকে।

আপনি সদৃশ ট্যাগনাম পাবেন, তবে এটি নির্দিষ্ট আইটেমগুলির জন্য ট্যাগগুলি যুক্ত / অপসারণ / সম্পাদনা করে তোলে যা আরও সাধারণ। আপনাকে একটি নতুন ট্যাগ তৈরি করতে হবে না, পুরানোটির বরাদ্দ সরিয়ে ফেলতে হবে এবং নতুন একটি বরাদ্দ দিতে হবে, আপনি কেবল ট্যাগের নামটি সম্পাদনা করুন।

ট্যাগগুলির একটি তালিকা প্রদর্শনের জন্য, আপনি কেবল DISTINCT বা গ্রুপ ব্যবহার করেন এবং অবশ্যই আপনি সহজেই কোনও ট্যাগটি কতবার ব্যবহার করতে পারেন তা গণনা করতে পারেন।


4

আপনি যদি কিছুটা অ-মানক স্টাফ ব্যবহার করতে আপত্তি করেন না তবে পোস্টগ্রাস সংস্করণ 9.4 এবং এর জেএসএন পাঠ্য অ্যারে টাইপ করে রেকর্ড সংরক্ষণ করার বিকল্প রয়েছে।

আপনার স্কিমাটি হ'ল:

Table: Items
Columns: Item_ID:int, Title:text, Content:text

Table: Tags
Columns: Item_ID:int, Tag_Title:text[]

আরও তথ্যের জন্য, জোশ বার্কাসের এই দুর্দান্ত পোস্টটি দেখুন: http://www.datediasoup.com/2015/01/tag-all-things.html

পারফরম্যান্সের জন্য পুঙ্খানুপুঙ্খভাবে তুলনা করার জন্য আরও বিভিন্ন বিকল্প রয়েছে এবং উপরে প্রস্তাবিত একটি সর্বোত্তমভাবে সামগ্রিক।


2

আমি ট্যাগগুলি সংরক্ষণ করার জন্য মধ্যস্থতাকারী তৃতীয় টেবিলটি ব্যবহার করার পরামর্শ দেব <<> ট্যাগ এবং আইটেমগুলির মধ্যে আমাদের অনেকগুলি থেকে বেশি সম্পর্ক রয়েছে, যেমন একটি আইটেম একাধিক ট্যাগের সাথে যুক্ত হতে পারে এবং একটি ট্যাগ একাধিক আইটেমের সাথে যুক্ত হতে পারে। এইচটিএইচ, ভালভ


1

আপনি একটি প্রশ্নে যে তথ্য সরবরাহ করেছেন তার উপর ভিত্তি করে আপনি আস্তে আস্তে কথা বলতে পারবেন না। এবং আমি মনে করি না যে আপনার বিকাশের এই পর্যায়ে পারফরম্যান্স সম্পর্কে খুব বেশি চিন্তা করা উচিত। একে অকাল অপটিমাইজেশন বলা হয়

তবে, আমি প্রস্তাব দেব যে আপনি ট্যাগ সারণিতে Tag_ID কলামটি অন্তর্ভুক্ত করবেন। এটি সাধারণত একটি ভাল অনুশীলন যে প্রতিটি টেবিলের একটি আইডি কলাম থাকে।


1

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


0

আইটেমগুলিতে একটি "আইডি" ক্ষেত্র থাকতে হবে এবং ট্যাগগুলির একটি "আইডি" ক্ষেত্র থাকতে হবে (প্রাথমিক কী, গোষ্ঠীযুক্ত)।

তারপরে আইটেমআইডিআইডি / ট্যাগআইডিআইডি একটি মধ্যবর্তী টেবিল তৈরি করুন এবং " পারফেক্ট সূচক " সেখানে লাগান ।

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