আমি বিশ্বাস করি আপনি এই ব্লগ পোস্ট আকর্ষণীয় পাবেন: ট্যাগ্স: ডেটাবেস স্কিমা
সমস্যা: আপনি একটি ডাটাবেস স্কিমা রাখতে চান যেখানে আপনি যতগুলি ট্যাগ বুকমার্ক (বা একটি ব্লগ পোস্ট বা যা কিছু) আপনার নিজের পছন্দ মতো ট্যাগ করতে পারেন। তারপরে, আপনি কোনও ইউনিয়ন বা ট্যাগের ছেদকে বুকমার্কগুলিকে সীমাবদ্ধ রাখতে কোয়েরি চালাতে চান। আপনি অনুসন্ধান ফলাফল থেকে কিছু ট্যাগ বাদ ((বিয়োগ: বিয়োগ)) করতে চান।
"মাইকিউএসকিউলিস" সমাধান
এই সমাধানে, স্কিমাটি কেবল একটি টেবিল পেয়েছে, এটি অস্বীকৃত। এই ধরণেরটিকে "মাইএসকিউসিলিউশন সমাধান" বলা হয় কারণ মাইএসকিউএসএল এই কাঠামোর সাথে একটি টেবিলের মধ্যে ডেল.সিও.ইউস ডেটা আমদানি করে।
ছেদ (এবং) "অনুসন্ধান + ওয়েবসার্ভিস + সেমওয়েব" এর জন্য অনুসন্ধান:
SELECT *
FROM `delicious`
WHERE tags LIKE "%search%"
AND tags LIKE "%webservice%"
AND tags LIKE "%semweb%"
ইউনিয়ন (OR) "অনুসন্ধান | ওয়েবসার্ভিস | সেমওয়েব" এর জন্য অনুসন্ধান:
SELECT *
FROM `delicious`
WHERE tags LIKE "%search%"
OR tags LIKE "%webservice%"
OR tags LIKE "%semweb%"
"অনুসন্ধান + ওয়েবসার্ভিস-সেমওয়েব" এর জন্য বিয়োগ প্রশ্ন
SELECT *
FROM `delicious`
WHERE tags LIKE "%search%"
AND tags LIKE "%webservice%"
AND tags NOT LIKE "%semweb%"
"Scuttle" সমাধান
স্কটল তার ডেটা দুটি টেবিলগুলিতে সংগঠিত করে। সেই টেবিলটি "স্ক্যাসিগ্রাফিকেশনগুলি" হল "ট্যাগ"-টেবিল এবং "বুকমার্ক"-টেবিলের জন্য একটি বিদেশী কী পেয়েছে।
ছেদ (এবং) "বুকমার্ক + ওয়েবসার্ভিস + সেমওয়েব" এর জন্য অনুসন্ধান:
SELECT b.*
FROM scBookmarks b, scCategories c
WHERE c.bId = b.bId
AND (c.category IN ('bookmark', 'webservice', 'semweb'))
GROUP BY b.bId
HAVING COUNT( b.bId )=3
প্রথমত, সমস্ত বুকমার্ক-ট্যাগ সংমিশ্রণগুলি অনুসন্ধান করা হয়, যেখানে ট্যাগটি "বুকমার্ক", "ওয়েবসার্ভিস" বা "সেমওয়েব" (সি। ক্যাটাগরি ইন ইন ('বুকমার্ক', 'ওয়েবসার্ভিস', 'সেমওয়েব')) রয়েছে, তারপরে কেবল বুকমার্কগুলি যা অনুসন্ধান করা তিনটি ট্যাগই অ্যাকাউন্টে নেওয়া হয়েছে (হ্যাভিং COUNT (বি.বিআইডি) = 3)।
ইউনিয়ন (ওআর) "বুকমার্ক | ওয়েবসার্ভিস | সেমওয়েব" এর জন্য অনুসন্ধান:
কেবলমাত্র অনুচ্ছেদটি ছেড়ে দিন এবং আপনার মিল রয়েছে :
SELECT b.*
FROM scBookmarks b, scCategories c
WHERE c.bId = b.bId
AND (c.category IN ('bookmark', 'webservice', 'semweb'))
GROUP BY b.bId
বিয়োগ (বাদ দেওয়া) "বুকমার্ক + ওয়েবসার্ভিস-সেমওয়েব" এর জন্য ক্যোয়ারী, এটি: বুকমার্ক এবং ওয়েবসার্ভিস এবং নয় সেমওয়েব।
SELECT b. *
FROM scBookmarks b, scCategories c
WHERE b.bId = c.bId
AND (c.category IN ('bookmark', 'webservice'))
AND b.bId NOT
IN (SELECT b.bId FROM scBookmarks b, scCategories c WHERE b.bId = c.bId AND c.category = 'semweb')
GROUP BY b.bId
HAVING COUNT( b.bId ) =2
HAVING COUNT এড়িয়ে যাওয়া "বুকমার্ক | ওয়েবসার্ভিস-সেমওয়েব" এর অনুসন্ধানের দিকে নিয়ে যায়।
"টক্সি" সমাধান
টক্সি তিনটি টেবিল কাঠামো নিয়ে এসেছিল। টেবিলের মাধ্যমে "ট্যাগম্যাপ" বুকমার্কগুলি এবং ট্যাগগুলি এন-টু-মি সম্পর্কিত। প্রতিটি ট্যাগ একসাথে বিভিন্ন বুকমার্ক এবং বিপরীতে ব্যবহার করা যেতে পারে। এই ডিবি-স্কিমাটি ওয়ার্ডপ্রেস দ্বারাও ব্যবহৃত হয়। প্রশ্নগুলি "স্কটল" সমাধানের মতো একই।
ছেদ (এবং) "বুকমার্ক + ওয়েবসার্ভিস + সেমওয়েব" এর জন্য অনুসন্ধান
SELECT b.*
FROM tagmap bt, bookmark b, tag t
WHERE bt.tag_id = t.tag_id
AND (t.name IN ('bookmark', 'webservice', 'semweb'))
AND b.id = bt.bookmark_id
GROUP BY b.id
HAVING COUNT( b.id )=3
ইউনিয়ন (OR) "বুকমার্ক | ওয়েবসার্ভিস | সেমওয়েব" এর জন্য অনুসন্ধান
SELECT b.*
FROM tagmap bt, bookmark b, tag t
WHERE bt.tag_id = t.tag_id
AND (t.name IN ('bookmark', 'webservice', 'semweb'))
AND b.id = bt.bookmark_id
GROUP BY b.id
বিয়োগ (বাদ দেওয়া) "বুকমার্ক + ওয়েবসার্ভিস-সেমওয়েব" এর জন্য ক্যোয়ারী, এটি: বুকমার্ক এবং ওয়েবসার্ভিস এবং নয় সেমওয়েব।
SELECT b. *
FROM bookmark b, tagmap bt, tag t
WHERE b.id = bt.bookmark_id
AND bt.tag_id = t.tag_id
AND (t.name IN ('Programming', 'Algorithms'))
AND b.id NOT IN (SELECT b.id FROM bookmark b, tagmap bt, tag t WHERE b.id = bt.bookmark_id AND bt.tag_id = t.tag_id AND t.name = 'Python')
GROUP BY b.id
HAVING COUNT( b.id ) =2
HAVING COUNT এড়িয়ে যাওয়া "বুকমার্ক | ওয়েবসার্ভিস-সেমওয়েব" এর অনুসন্ধানের দিকে নিয়ে যায়।