আমি একজন সফটওয়্যার বিকাশকারী। আমি কোড পছন্দ করি, তবে আমি ডাটাবেসগুলি ঘৃণা করি ... বর্তমানে, আমি একটি ওয়েবসাইট তৈরি করছি যার উপর কোনও ব্যবহারকারীকে পছন্দসই হিসাবে কোনও সত্তা চিহ্নিত করার অনুমতি দেওয়া হবে (এফবিতে পছন্দ করুন ), এটি ট্যাগ করুন এবং মন্তব্য করুন ।
এই কার্যকারিতাটি পরিচালনা করার জন্য আমি ডাটাবেস টেবিলগুলির নকশায় আটকে যাই। সমাধানটি তুচ্ছ, যদি আমরা এটি কেবলমাত্র এক ধরণের জিনিসের জন্য (উদাহরণস্বরূপ ফটো) করতে পারি। তবে আমাকে এটি 5 টি ভিন্ন জিনিসের জন্য সক্ষম করতে হবে (আপাতত, তবে আমিও ধরে নিয়েছি যে পুরো পরিষেবাটি বাড়ার সাথে সাথে এই সংখ্যাটি বাড়তে পারে)।
আমি এখানে কিছু অনুরূপ প্রশ্ন পেয়েছি, কিন্তু তাদের কোনওটির সন্তুষ্ট উত্তর নেই, তাই আমি এই প্রশ্নটি আবার জিজ্ঞাসা করছি।
প্রশ্নটি হল, কীভাবে সঠিকভাবে, দক্ষতার সাথে এবং ইলাস্টিকালি ডেটাবেস ডিজাইন করবেন, যাতে এটি বিভিন্ন টেবিলের জন্য মন্তব্যগুলি সঞ্চয় করতে পারে , বিভিন্ন টেবিলের জন্য পছন্দগুলি এবং ট্যাগগুলির জন্য। উত্তর হিসাবে কিছু ডিজাইনের প্যাটার্ন সেরা হবে;)
বিস্তারিত বিবরণ : আমি একটি আছে টেবিল User
আরো 3 কিছু ব্যবহারকারী ডেটা সঙ্গে, এবং টেবিল : Photo
সঙ্গে ফটোগ্রাফ , Articles
সঙ্গে নিবন্ধ , Places
সঙ্গে স্থান । আমি যে কোনও লগইন ব্যবহারকারীকে সক্ষম করতে চাই:
এই 3 টি টেবিলের যে কোনওটিতে মন্তব্য করুন
তাদের পছন্দসই হিসাবে চিহ্নিত করুন
তাদের যে কোনওটিকে কিছু ট্যাগ দিয়ে ট্যাগ করুন
আমি প্রতিটি উপাদানগুলির জন্য পছন্দগুলির সংখ্যা এবং সেই নির্দিষ্ট ট্যাগটি ব্যবহৃত হয়েছিল তার সংখ্যাটিও গণনা করতে চাই।
1 ম পন্থা :
ক) জন্য ট্যাগ , আমি একটি তৈরি করবে টেবিল Tag [TagId, tagName, tagCounter]
, তারপর আমি তৈরি করবে অনেক সাথে অধিকের সম্পর্ক টেবিল জন্য: Photo_has_tags
, Place_has_tag
, Article_has_tag
।
খ) মন্তব্যগুলির জন্য একই গণনা।
গ) আমি একটি তৈরি করবে টেবিল LikedPhotos [idUser, idPhoto]
, LikedArticles[idUser, idArticle]
, LikedPlace [idUser, idPlace]
। সংখ্যা লাইক দ্বারা গণনা করা হবে প্রশ্নের (যা, আমি অনুমান খারাপ)। এবং...
আমি এই নকশাটি শেষ অংশের জন্য সত্যিই পছন্দ করি না, এটি আমার কাছে খারাপ গন্ধযুক্ত;)
2 তম পদ্ধতি :
আমি একটি টেবিল তৈরি করব ElementType [idType, TypeName == some table name]
যা প্রশাসক (আমার) দ্বারা সারণীগুলির নামগুলি পছন্দ করতে , মন্তব্য করতে বা ট্যাগ করার জন্য পপুলেটে যাবে । তারপরে আমি টেবিলগুলি তৈরি করব :
ক) LikedElement [idLike, idUser, idElementType, idLikedElement]
এবং প্রত্যেকের জন্য উপযুক্ত কলামগুলির সাথে মন্তব্য এবং ট্যাগগুলির জন্য একই। এখন, আমি যখন কোনও ছবি পছন্দ করতে চাই তখন আমি প্রবেশ করিয়ে দেব:
typeId = SELECT id FROM ElementType WHERE TypeName == 'Photo'
INSERT (user id, typeId, photoId)
এবং স্থানের জন্য:
typeId = SELECT id FROM ElementType WHERE TypeName == 'Place'
INSERT (user id, typeId, placeId)
এবং এইভাবেই ... আমি মনে করি যে দ্বিতীয় পদ্ধতিটি আরও ভাল, তবে আমিও মনে করি যে এই নকশায়ও কিছু হারিয়ে যাচ্ছে ...
অবশেষে, আমি আরও আশ্চর্য হয়েছি যে উপাদানটি কতবার পছন্দ হয়েছিল তার জন্য কাউন্টারটি সঞ্চয় করার সবচেয়ে ভাল জায়গা। আমি কেবল দুটি উপায় সম্পর্কে চিন্তা করতে পারি:
- উপাদান (
Photo/Article/Place
) টেবিল - নির্বাচিত গণনা দ্বারা ()।
আমি আশা করি যে আমার সমস্যাটি সম্পর্কে আমার ব্যাখ্যাটি এখন আরও বিশদ হয়েছে।