কোনও রিলেশনাল ডাটাবেসে সিঙ্গলটনকে মডেল করার সর্বোত্তম উপায়


12

ওয়েব অ্যাপ্লিকেশনগুলির জন্য রিলেশনাল ডেটাবেস স্কিমা ডিজাইন করার সময়, আমি প্রায়শই একটি কেস পাই যেখানে আমি কেবল একটি সারি এবং কেবল একটি সারি রাখার জন্য একটি টেবিল তৈরি করি। এটি এটির নকশা করার ভুল উপায় বলে মনে হয় তবে আমি উল্লেখযোগ্যভাবে আরও ভাল কিছু নিয়ে আসতে পারি না বা এটি অবশ্যই "এটি করার সঠিক উপায়"।

সাম্প্রতিক উদাহরণটি এমন একটি সাইট যা ব্যবহারকারীদের হোম পেজে ম্যানুয়ালি সামগ্রী নিয়ন্ত্রণ করতে দেয়। ঠিক আছে, কেবলমাত্র একটি হোম পৃষ্ঠা আছে। আমি একটি টেবিল তৈরি করেছি যার হোমপেজ তৈরির জন্য সমস্ত প্রয়োজনীয় ক্ষেত্র রয়েছে যেমন বর্ণনামূলক পাঠ্য রয়েছে এমন কোনও অঞ্চলের জন্য একটি পাঠ্য ক্ষেত্র। একটি বড় চিত্র ফাইলের নাম সঞ্চয় করার ক্ষেত্র। কিছু বিদেশী কীগুলি নিবন্ধগুলি নির্দেশ করে যা হোমপেজে প্রদর্শিত হবে ইত্যাদি It এটি কাজ করে তবে কেবল এক সারি দিয়ে একটি টেবিল রাখা ভুল বলে মনে হয়।

অতীতে আমি অন্যান্য অনেক ডিজাইনের চেষ্টা করেছি যেমন হোমপেজ টেবিলে একাধিক সারিকে মঞ্জুরি দেওয়া এবং এলোমেলোভাবে একটি নির্বাচন করা। আমি "সক্রিয়" নামে একটি বুলিয়ান ক্ষেত্র যুক্ত করার চেষ্টা করেছি এবং এলোমেলোভাবে সক্রিয় হোমপেজগুলির মধ্যে একটি নির্বাচন করার চেষ্টা করেছি। আমি প্রয়োগের যুক্তিতে যে কোনও সময় সক্রিয় হতে শুধুমাত্র একটি সারি জোর করে চেষ্টা করেছি। এমনকি হোমপেজ টেবিল তৈরি না করে এবং অন্যান্য সমস্ত আইটেম যেমন নিবন্ধগুলির মতো বৈশিষ্ট্যযুক্ত_অন_পৃষ্ঠার মতো বুলিয়ান ক্ষেত্র রাখার চেষ্টা করেছি।

বেশিরভাগ ক্ষেত্রে আমি সেটিংস ফাইলে একগুচ্ছ কনস্ট্যান্ট সহ হোমপেজটি তৈরি করতে পারি। সেটিংস ফাইলটির প্রধান সমস্যা হ'ল এটি বিকাশকারী নিয়ন্ত্রণে রয়েছে। যেহেতু হোমপেজের বিষয়বস্তুগুলির মতো কিছু ব্যবহারকারীর দ্বারা সম্পাদনা করা যেতে পারে, এটি ডেটাবেসে যেতে হবে।

অনেক সাইটে আমার এই সমস্যা নেই কারণ আমি পাঁচটি নতুন নিবন্ধ নির্বাচন করার মতো কোনও প্রশ্নের সাথে হোমপেজের মতো জিনিসগুলি তৈরি করতে পারি। তবে যখন আমার কাছে এমন পৃষ্ঠা রয়েছে যা ম্যানুয়ালি কঠোর প্রয়োজনীয়তার সাথে সজ্জিত হয়, তখন এটি ডাটাবেসে মডেল করা কৃপণ হয়ে ওঠে। তবে ভাবুন আপনার কাছে একটি ফটো টেবিল এবং একটি নিবন্ধের টেবিল রয়েছে। প্রয়োজনটি হ'ল হোমপেজটি হ'ল পাঁচটি ফটো, হুবহু তিনটি নিবন্ধ এবং ব্যবহারকারী দ্বারা নিয়ন্ত্রিত নির্বিচারে পাঠ্যের দুটি ব্লক প্রদর্শন করবে। আপনি কিভাবে সঠিকভাবে ডাটাবেসে মডেল করবেন?

এছাড়াও, কেবল হোমপেজ ছাড়াও অন্যান্য অনেক ক্ষেত্রে আমার এই মডেলিংয়ের সমস্যা রয়েছে। এটি কেবলমাত্র সবচেয়ে সহজ এবং সর্বাধিক প্রয়োগযোগ্য উদাহরণ যা আমি সামনে আসতে পারি।


একক সারির টেবিলটি আপনার কাছে কোন সমস্যাটি উপস্থাপন করে তা একেবারেই পরিষ্কার নয়, এটি কোনওভাবে কোনও টেবিলের অপচয়কে প্রতিনিধিত্ব করে। আপনি কি নিশ্চিত যে আপনি যে সমস্যাটি ভুগছেন তার সমাধান করার চেষ্টা করছেন?
ডেভিড অলড্রিজ

উত্তর:


10

একটি সহজ পদ্ধতির নাম হ'ল পৃষ্ঠা পৃষ্ঠা বৈশিষ্ট্যগুলিকে একটি সম্পত্তি বৈশিষ্ট্যের টেবিলে সংরক্ষণ করতে হবে (বা এটিকে অন্য কোনও কিছু বলা হবে) যা নাম ও মান কলামগুলি দিয়ে তৈরি।

HomePageProperty1 - ব্যবহারকারীর মূল্য 1

HomePageProperty2 - ব্যবহারকারীর মূল্য 2

এটি একটি আদর্শ সমাধান নাও হতে পারে তবে এটি সহজ এবং নমনীয়। এটি এক সারি দৃশ্যের সাহায্যে টেবিলটি সরিয়ে দেয়।


1
এই পদ্ধতির একাধিক উদ্দেশ্যে কাজ করে। উদাহরণস্বরূপ, আমি স্কিমা সংস্করণ তথ্য, প্রতিদিন যে সাইকেল চালানো দরকার ইত্যাদিগুলির জন্য রোটেশন পয়েন্টারগুলি সঞ্চয় করব। কী ভুল হয়েছে তা নির্ধারণের সময় স্কিমা সংস্করণ তথ্য গুরুত্বপূর্ণ। প্যাচটি কেবলমাত্র ডাটাবেস-ফিক্সের জন্য প্রয়োগ করা হয়েছে তা নিশ্চিত করার যুক্তিসঙ্গত উপায়।
বেরিন লরিটস্ক

2
+1 - আমাদের ডেটা আর্কিটেক্ট একই ধরণের উদ্দেশ্যে আমাকে এই সঠিক টেবিল লেআউটটি দিয়েছে।
আলী

3
এই পদ্ধতির সাথে সমস্যাটি হ'ল আপনাকে আলাদা আলাদা ক্যারামের বিভিন্ন ধরণের বিভিন্ন কলাম হিসাবে প্রতিনিধিত্ব করতে হবে এবং কোন কলামটি ব্যবহার করতে হবে এবং কোনটি বাধ্যতামূলক তা বলার জন্য আপনার যুক্তি থাকতে হবে। আপনি এটি নির্ধারণ করতে পারবেন না যে একটি বুলিয়ান মান বুলিয়ান, বা একটি তারিখ একটি তারিখ, বা কোনও নির্দিষ্ট গুণাবলী বাতিল হতে পারে না, বা একটি নির্দিষ্ট পরিসরের মধ্যে পড়তে হবে বা একটি শর্ত পূরণ করতে হবে - তুচ্ছভাবে সরল সমস্ত কিছু একটি একক সারি টেবিল সহ।
ডেভিড অলড্রিজ

3

এটি আপনার কাছে পরিষ্কার নয় যে আপনার একটি সমস্যা সমাধান করা দরকার।

একটি একক সারির টেবিলটি কোনওভাবেই ডাটাবেসের জন্য নিজেই কোনও সমস্যা নয় এবং আপনাকে ডেটা সম্পর্কিত ধরণের এবং সীমাবদ্ধতা প্রয়োগ করতে দেয়।

আমি নিশ্চিত নই যে আপনি সত্যিকারের সমস্যাটি সমাধান করার চেষ্টা করছেন।


2

আমার কাছে মনে হচ্ছে আপনি এমন কোনও কিছুর জন্য একটি ডাটাবেস ব্যবহার করছেন যা আসলে ফাইল হিসাবে সংরক্ষণ করা উচিত।

আপনার বিবরণটি আমাকে প্রচুর উইকি পৃষ্ঠাগুলির স্মরণ করিয়ে দেয়, যেখানে ব্যবহারকারীরা সামগ্রীগুলি সম্পাদনা করতে পারবেন। উইকিসে, বা কমপক্ষে আমি যে বাস্তবায়ন দেখেছি তাতে পৃষ্ঠাগুলি ফাইল হিসাবে স্থির থাকে।

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

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


2

এক সারি সহ একটি টেবিলের সাথে একেবারেই ভুল কিছু নেই।

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

আপনি যদি প্রচুর পরিমাণে কলাম পেতে শুরু করেন তবে আপনি টেবিলটি সংকীর্ণ করতে এবং তার পরিবর্তে কনফিগারেশন আইটেমের জন্য এক সারি প্রলুব্ধ করতে পারেন। এটি সেরা ধারণা নয় কারণ আপনি ধরণের সুরক্ষা এবং বৈধতা হারাবেন। এছাড়াও, আপনি বহুসংখ্যার সাথে সামঞ্জস্যপূর্ণতা হারাবেন , যা আপনার কাছে গুরুত্বপূর্ণ হতে পারে। আপনার সত্তা আসলে কী তা পুনর্বিবেচনা করা এবং বিভিন্ন সত্তার জন্য পৃথক একক-সারি সারণী রাখা আরও ভাল সমাধান হতে পারে।

হ্যাঁ, আমি কেবল একক-সারির টেবিলটি ঠিক বলছি না, তবে আমি প্রস্তাব দিচ্ছি যে আপনি তাদের মধ্যে একটিরও বেশি চাইবেন।


1

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


1

কেবলমাত্র একটি একক সারি সহ একটি টেবিল থাকার ক্ষেত্রে সেয়ে কোনও ভুল নেই। যদি আপনার কাছে কেবল কোনও নির্দিষ্ট সত্তার একটি উদাহরণ থাকে তবে এটি উপস্থাপনের পক্ষে খুব প্রাকৃতিক উপায় হতে পারে।

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


0

কেবল ওয়াল্টার যুক্ত করতে ..

সম্পত্তি সারণী কাঠামোর একাধিক ডেটা প্রকারের অনুমতি দেওয়া উচিত।

Fileds:
PropertyName
PropertyTextValue
PropertyDateValue
PropertyNumericValue
PropertyBoolValue

এটির সাহায্যে আপনি কীভাবে গ্যারান্টি দিচ্ছেন যে প্রতি সারিতে কেবল একটি সম্পত্তি মূল্য সেট করা আছে? অ্যাপ্লিকেশনটিতে এটি প্রয়োগ করা যথেষ্ট সহজ, তবে যদি কেউ নিজেই ডাটাবেসটিকে ম্যানুয়ালি আপডেট করে এবং সেখানে কিছু তথ্য আটকে দেয় তবে কী হবে?
এপ্রেচে

0

আমার কাছে মনে হচ্ছে আপনি আরও একটি স্তর বিমূর্ত করতে পারতেন। শেষ পর্যন্ত একটি "হোমপেজ" একটি "পৃষ্ঠা"। আপনার প্রয়োজনীয় বৈশিষ্ট্যগুলি সহ বিভিন্ন ধরণের পৃষ্ঠা থাকতে পারে। আপনার সাইটে বিভাগগুলি থাকলে আপনার সম্ভবত একটি "সেকশনহোমপেজ" দরকার যা খুব ভালভাবে "হোম পৃষ্ঠা" এর মতো কাজ করতে পারে।

প্রয়োজনটি হ'ল হোমপেজটি হ'ল পাঁচটি ফটো, হুবহু তিনটি নিবন্ধ এবং ব্যবহারকারী দ্বারা নিয়ন্ত্রিত নির্বিচারে পাঠ্যের দুটি ব্লক প্রদর্শন করবে। আপনি কিভাবে সঠিকভাবে ডাটাবেসে মডেল করবেন?

আসুন এটি চেষ্টা করুন। আমি একটি আর্টিকেল পেজ টেবিল যুক্ত করছি যাতে আপনি দেখতে পারেন যে কীভাবে আপনি সেই অনুযায়ী সম্পত্তি আলাদা করতে পারেন।

PAGES
Id
Title
Description

HOMEPAGES
PageId (FK)
PhotoListLimit
ArticleListLimit
TextBlockListLimit

ARTICLEPAGE
PageId (FK)
ArticleMainQuote
ArticleMainBody
ArticlePhoto1
ArticlePhoto2

এটি আমার পক্ষে দুর্দান্ত কাজ করবে, এমনকি কোনও বড় সাইটের জন্য দুর্দান্ত কাজ করবে।

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