সাধারণত আমি ইয়াকভ এলিসের সাথে একমত হব তবে এই বিশেষ ক্ষেত্রে আরও একটি কার্যকর সমাধান আছে:
দুটি টেবিল ব্যবহার করুন:
Table: Item
Columns: ItemID, Title, Content
Indexes: ItemID
Table: Tag
Columns: ItemID, Title
Indexes: ItemId, Title
এর কিছু বড় সুবিধা রয়েছে:
প্রথমে এটি উন্নয়নকে আরও সহজ করে তোলে: সন্নিবেশ করানো এবং আপডেট করার জন্য ত্রি-সারণির সমাধানে item
আপনাকে Tag
ইতিমধ্যে এন্ট্রি রয়েছে কিনা তা দেখতে টেবিলটি দেখতে হবে। তারপরে আপনাকে তাদের সাথে নতুনদের সাথে যোগ দিতে হবে। এটি কোনও তুচ্ছ কাজ নয়।
তারপরে এটি অনুসন্ধানগুলি আরও সহজ (এবং সম্ভবত দ্রুত) করে তোলে। তিনটি প্রধান ডাটাবেস ক্যোয়ারী রয়েছে যা আপনি করবেন: সবার Tags
জন্য আউটপুট Item
, একটি ট্যাগ-ক্লাউড আঁকুন এবং একটি ট্যাগ শিরোনামের জন্য সমস্ত আইটেম নির্বাচন করুন।
একটি আইটেমের জন্য সমস্ত ট্যাগ:
3-টেবিল:
SELECT Tag.Title
FROM Tag
JOIN ItemTag ON Tag.TagID = ItemTag.TagID
WHERE ItemTag.ItemID = :id
2-টেবিল:
SELECT Tag.Title
FROM Tag
WHERE Tag.ItemID = :id
ট্যাগ-মেঘ:
3-টেবিল:
SELECT Tag.Title, count(*)
FROM Tag
JOIN ItemTag ON Tag.TagID = ItemTag.TagID
GROUP BY Tag.Title
2-টেবিল:
SELECT Tag.Title, count(*)
FROM Tag
GROUP BY Tag.Title
একটি ট্যাগের আইটেম:
3-টেবিল:
SELECT Item.*
FROM Item
JOIN ItemTag ON Item.ItemID = ItemTag.ItemID
JOIN Tag ON ItemTag.TagID = Tag.TagID
WHERE Tag.Title = :title
2-টেবিল:
SELECT Item.*
FROM Item
JOIN Tag ON Item.ItemID = Tag.ItemID
WHERE Tag.Title = :title
তবে কিছু ত্রুটিগুলিও রয়েছে: এটি ডাটাবেসে আরও বেশি জায়গা নিতে পারে (এটি আরও ডিস্ক অপারেশনগুলিকে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে চলতে পারে)
আকারের যুক্তিটি তেমন শক্তিশালী নয় কারণ ট্যাগগুলির প্রকৃতিটি হ'ল এগুলি সাধারণত খুব ছোট হয় তাই আকার বৃদ্ধি কোনও বড় নয়। যে কেউ তর্ক করতে পারে যে একটি ছোট টেবিলের মধ্যে ট্যাগ শিরোনামের জন্য ক্যোয়ারীটি খুব দ্রুততর হয় যার মধ্যে প্রতিটি ট্যাগ কেবল একবার থাকে এবং এটি অবশ্যই সত্য। তবে যোগদান না করার জন্য সঞ্চয়গুলি এবং আপনি যে তাদের উপর একটি ভাল সূচক তৈরি করতে পারেন তা বিবেচনা করা সহজেই এর জন্য ক্ষতিপূরণ দিতে পারে। এটি অবশ্যই আপনি যে ডাটাবেসটি ব্যবহার করছেন তার আকারের উপর নির্ভর করে।
অসামঞ্জস্যতার যুক্তিটিও কিছুটা মিট। ট্যাগগুলি নিখরচায় পাঠ্য ক্ষেত্র এবং 'foo' থেকে "ট্যাগ" সমস্ত ট্যাগের নতুন নামকরণের মতো কোনও প্রত্যাশিত ক্রিয়াকলাপ নেই।
সুতরাং tldr: আমি দ্বি টেবিল সমাধানের জন্য যেতে হবে। (আসলে আমি যাচ্ছি। এর বিরুদ্ধে বৈধ যুক্তি আছে কিনা তা দেখতে এই নিবন্ধটি পেয়েছি।)