এই প্রশ্নটি সম্পর্কে আমি কীভাবে একটি ডেটাবেস ডিজাইন করব, এটি আরও ভাল সমাধান কী হবে তার উপর নির্ভর করে এটি রিলেশনাল / নোসকিএল ডাটাবেসগুলি হতে পারে
একটি প্রয়োজনীয়তা দেওয়া হয়েছে যেখানে আপনাকে এমন একটি সিস্টেম তৈরি করতে হবে যা "সংস্থা" এবং "ব্যবহারকারী" ট্র্যাক করার জন্য একটি ডাটাবেস জড়িত থাকবে। একটি একক ব্যবহারকারী সর্বদা শুধুমাত্র একটি সংস্থার অন্তর্ভুক্ত
- একজন ব্যবহারকারী কেবল একটি সংস্থার অন্তর্ভুক্ত থাকতে পারে
- একটি সংস্থার অনেক ব্যবহারকারী থাকতে পারে
"সংস্থা" টেবিলের জন্য নকশাটি বেশ সোজা। সংস্থার নিম্নলিখিত বৈশিষ্ট্য / কলাম থাকবে: (আসুন এটি সহজ রাখি)
ID, COMPANY_NAME, CREATED_ON
প্রথম দৃশ্য
সরল এবং সোজা এগিয়ে, ব্যবহারকারীর সবার একই বৈশিষ্ট্য রয়েছে, তাই এটি সহজেই সম্পর্কিত শৈলীতে, ব্যবহারকারীর সারণিতে করা যেতে পারে:
ID, COMPANY_ID, FIRST_NAME, LAST_NAME, EMAIL, CREATED_ON
দ্বিতীয় দৃশ্য
যদি বিভিন্ন সংস্থাগুলি তাদের ব্যবহারকারীর জন্য আলাদা প্রোফাইল বৈশিষ্ট্য সঞ্চয় করতে চায় তবে কি হবে। প্রতিটি সংস্থার একটি সংজ্ঞাযুক্ত সেট থাকবে যা সেই সংস্থার সমস্ত ব্যবহারকারীর জন্য প্রযোজ্য।
উদাহরণ স্বরূপ:
- সংস্থা এ সংরক্ষণ করতে চায়: LIKE_MOVIE (বুলিয়ান), LIKE_MUSIC (বুলিয়ান)
- সংস্থা বি সঞ্চয় করতে চায়: FAV_CUISINE (স্ট্রিং)
- সংস্থা সি সঞ্চয় করতে চায়: OWN_DOG (বুলিয়ান), ডিওজি_এন্ট (ইনট)
পদ্ধতির ঘ
নিষ্ঠুর বলের উপায় হ'ল ব্যবহারকারীর জন্য একটি একক স্কিমা থাকা এবং তারা যখন কোম্পানির অন্তর্ভুক্ত না তখন তাদের নালাগুলি দেওয়া উচিত:
ID, COMPANY_ID, FIRST_NAME, LAST_NAME, EMAIL, LIKE_MOVIE, LIKE_MUSIC, FAV_CUISINE, OWN_DOG, DOG_COUNT, CREATED_ON
কোনটা কদর্যজনক কারণ আপনার প্রচুর NULLS এবং ব্যবহারকারীর সারি সমাপ্ত হবে যার কলামগুলি তাদের সাথে অপ্রাসঙ্গিক (যেমন Company সংস্থা এ-এর সাথে সম্পর্কিত সমস্ত ব্যবহারকারীদের FAV_CUISINE, OWN_DOG, DOG_COUNT) এর জন্য নাল মান রয়েছে)
পদ্ধতির ঘ
একটি দ্বিতীয় পদ্ধতির, "ফর্ম ফর্ম ক্ষেত্র" থাকা:
ID, COMPANY_ID, FIRST_NAME, LAST_NAME, EMAIL, CUSTOM_1, CUSTOM_2, CUSTOM_3, CREATED_ON
যা নিজস্বভাবে কদর্য হবে কারণ কাস্টম ক্ষেত্রগুলি কী তা আপনার কোনও ধারণা নেই, ডেটা টাইপ সঞ্চিত মানগুলির প্রতিফলিত হবে না (উদাহরণস্বরূপ, আমরা ভ্যারচআরআর হিসাবে অভ্যন্তরীণ মান সংরক্ষণ করব)।
পদ্ধতির ঘ
আমি পোস্টগ্রাইএসকিউএল জেএসওএন ক্ষেত্রে দেখেছি, এক্ষেত্রে আপনার কী হবে:
ID, COMPANY_ID, FIRST_NAME, LAST_NAME, EMAIL, CUSTOM_PROFILE_JSON, CREATED_ON
এই ক্ষেত্রে আপনি কীভাবে কোনও ব্যবহারকারীর জন্য বিভিন্ন স্কিমার প্রয়োগ করতে সক্ষম হবেন? সংস্থা এ এর সাথে থাকা কোনও ব্যবহারকারীর মতো স্কিমা থাকবে
{"LIKE_MOVIE":"boolean", "LIKE_MUSIC": "boolean"}
যদিও সি সি ব্যবহারকারীর একটি আলাদা স্কিমা থাকবে:
{"OWN_DOG ":"boolean", "DOG_COUNT": "int"}
আমি এই সমস্যাটি কীভাবে সমাধান করব? তাদের (কোম্পানির) সম্পর্কের ভিত্তিতে একটি একক "অবজেক্ট" (ব্যবহারকারীর) জন্য এই নমনীয় স্কিমার অনুমতি দেওয়ার জন্য আমি কীভাবে ডাটাবেসটিকে সঠিকভাবে ডিজাইন করতে পারি?
সম্পর্কের সমাধান? nosql সমাধান?
সম্পাদনা: আমি একটি "CUSTOM_PROFILE" টেবিলের কথাও ভেবেছিলাম যা কলামগুলির চেয়ে সারিগুলিতে ব্যবহারকারী বৈশিষ্ট্যগুলি মূলত সংরক্ষণ করবে।
এই পদ্ধতির সাথে 2 টি সমস্যা রয়েছে:
1) প্রতিটি ব্যবহারকারী ডেটা কলামের পরিবর্তে সারি হিসাবে বৃদ্ধি পায় - এবং এর অর্থ ব্যবহারকারীর একটি সম্পূর্ণ চিত্র পেতে, অনেকগুলি যোগদানের প্রয়োজন, বিভিন্ন কাস্টম বৈশিষ্ট্যের "কাস্টম প্রোফাইল" টেবিলের সাথে একাধিক যোগদান
২) ডেটা মানটি সর্বদা জেনেরিক হওয়ার জন্য VARCHAR হিসাবে সংরক্ষণ করা হয়, এমনকি যদি আমরা জানি যে ডেটাটি পূর্ণসংখ্যা বা বুলিয়ান ইত্যাদি হতে পারে know