ডাটাবেস টেবিলের কলামে কীভাবে একটি তালিকা সংরক্ষণ করবেন


114

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

একেএক্সের সমাধান (উপরে সংযুক্ত) তালিকাটি ক্রমিক করা এবং এটি বাইনারি কলামে সংরক্ষণ করা। তবে এটিও অসুবিধাজনক বলে মনে হচ্ছে কারণ এর অর্থ হ'ল সিরিয়ালাইজেশন এবং deserialization সম্পর্কে আমাকে চিন্তা করতে হবে।

এর চেয়ে ভাল সমাধান আর কি আছে? এর চেয়ে ভাল সমাধান যদি না হয় তবে কেন? দেখে মনে হচ্ছে এই সমস্যাটি সময়ে সময়ে উঠে আসা উচিত।

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

সবাইকে ধন্যবাদ!

জন

আপডেট: সুতরাং আমি যে উত্তর পেয়ে যাচ্ছি তার প্রথম আলোড়ন থেকে আমি দেখতে পাচ্ছি "আপনি সিএসভি / এক্সএমএল রুটে যেতে পারেন ... তবে কিছুই করবেন না!" সুতরাং এখন আমি কেন এর ব্যাখ্যা খুঁজছি। কিছু ভাল রেফারেন্স আমাকে নির্দেশ করুন।

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

উত্তর:


182

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

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

আপনি যে নীতিটি লঙ্ঘন করছেন সেটিকে প্রথম সাধারণ ফর্ম বলা হয় , এটি ডাটাবেসের সাধারণকরণের প্রথম পদক্ষেপ।

কিছু oversimplifying ঝুঁকি, ডাটাবেজ নিয়মমাফিককরণ কোন ডেটা উপর ভিত্তি করে আপনার ডাটাবেস সংজ্ঞা প্রক্রিয়া হয় , যাতে আপনি এটি বিরুদ্ধে যুক্তিসম্মত, সামঞ্জস্যপূর্ণ প্রশ্নের লিখতে এবং এটিকে সহজে বজায় রাখতে সক্ষম হতে পারে। সাধারণীকরণটি আপনার ডেটাতে যৌক্তিক অসঙ্গতি এবং দুর্নীতির সীমাবদ্ধ করার জন্য ডিজাইন করা হয়েছে এবং এর অনেকগুলি স্তর রয়েছে। ডাটাবেস স্বাভাবিককরণের উইকিপিডিয়া নিবন্ধটি আসলে বেশ ভাল।

মূলত, সাধারণীকরণের প্রথম নিয়ম (বা ফর্ম) সূচিত করে যে আপনার টেবিলটি অবশ্যই কোনও সম্পর্কের প্রতিনিধিত্ব করবে। এই যে মানে:

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

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

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


17
সুতরাং আপনি দৃ strongly়ভাবে বিশ্বাস করেন যে কলামে একটি তালিকা সঞ্চয় করা একটি খারাপ ধারণা, তবে কেন তা উল্লেখ করতে আপনি ব্যর্থ হন। যেহেতু আমি কেবল এসকিউএল দিয়ে শুরু করছি, "কেন" এর একটি সামান্য বিস্তৃত সত্যিই খুব সহায়ক হবে। উদাহরণস্বরূপ, আপনি বলেছিলেন যে আমি "একটি উত্সাহী যুদ্ধ করছি এবং কোনও অকারণে সম্পর্কযুক্ত ডাটাবেস ডিজাইনের অন্যতম মৌলিক নীতি লঙ্ঘন করছি" ... সুতরাং নীতিটি কী? যে কারণগুলি আমি "ভাল নেই" উল্লেখ করেছি? (বিশেষত, আমার তালিকাগুলির অনুসারে বাছাই করা এবং পারমাণবিক প্রকৃতি)
জেএনব্রাইমন

6
মূলত, এটি সেরা অনুশীলনে সংশ্লেষিত কয়েক বছরের অভিজ্ঞতা থেকে নেমে আসে। প্রশ্নের মধ্যে মূল অধ্যক্ষ 1 ম সাধারণ ফর্ম হিসাবে পরিচিত ।
টবি

1
ধন্যবাদ আদম। খুবই তথ্যবহুল. আপনার শেষ প্রশ্নের সাথে ভাল পয়েন্ট।
JnBrymn

8
"[…] এবং অন্য এসকিউএল বিকাশকারীরা যখন আপনার ডাটাবেস ডিজাইনটি দেখেন তখন আপনাকে কৌতুক করা হবে না।" প্রথম সাধারন ফরম (এবং আপনার উত্তর তাদের উল্লেখ) সম্মান খুব ভাল কারণ আছে, কিন্তু পিয়ার চাপ / "যে কিভাবে যে কাছাকাছি সম্পন্ন করা হয়" হয় না তাদের মধ্যে।
লিন

5
আমরা ইতিমধ্যে প্রতিদিন ডাটাবেস কলামে তালিকার গুচ্ছগুলি সঞ্চয় করি। তাদের "চর" এবং "বর্ণচর" বলা হয়। অবশ্যই পোস্টগ্র্রেসে তাদের পাঠ্যও বলা হয়। 1NF সত্যই যা বলেছে তা হ'ল আপনি কখনই কোনও ক্ষেত্রের তথ্যকে ছোট ক্ষেত্রগুলিতে ভাগ করতে চান না এবং আপনি যদি তা করেন তবে আপনি বোকা বানাবেন। সুতরাং আপনি নাম সংরক্ষণ করবেন না, আপনি ব্যক্তিগত নাম, মাঝের নাম এবং পরিবারের নাম (স্থানীয়করণের উপর নির্ভর করে) সংরক্ষণ করুন এবং সেগুলি একসাথে সেলাই করুন। অন্যথায় আমরা পাঠ্যের স্ট্রিং মোটেও সংরক্ষণ করব না। অন্যদিকে, তিনি যা চান তা হ'ল একটি স্ট্রিংয়ের স্ট্রিং। এবং এটি করার উপায় আছে।
হাকন লাটভিট

15

আপনি এসকিউএলকে কেবল একসাথে ভুলে যেতে পারেন এবং "নোএসকিউএল" পদ্ধতির সাথে যেতে পারেন। RavenDB , MongoDB এবং CouchDB লাফ সম্ভাব্য সমাধান হিসেবে মনে। কোনও নোএসকিউএল পদ্ধতির সাথে আপনি রিলেশনাল মডেলটি ব্যবহার করছেন না..আপনি স্কিমাতেও সীমাবদ্ধ নন।


11

আমি অনেক লোককে যা দেখেছি তা হ'ল এটি (এটি সর্বোত্তম পদ্ধতির নাও হতে পারে, আমি ভুল হলে আমাকে সংশোধন করুন):

উদাহরণটিতে আমি যে টেবিলটি ব্যবহার করছি তা নীচে দেওয়া হয়েছে (টেবিলটিতে আপনি আপনার নির্দিষ্ট গার্লফ্রেন্ডদের দেওয়া ডাক নামগুলি অন্তর্ভুক্ত রয়েছে Each প্রতিটি বান্ধবীর একটি আলাদা আইডি রয়েছে):

nicknames(id,seq_no,names)

মনে করুন, আপনি একটি আইডির অধীনে অনেক ডাকনাম সংরক্ষণ করতে চান। এই কারণেই আমরা একটি seq_noক্ষেত্র অন্তর্ভুক্ত করেছি ।

এখন, এই মানগুলি আপনার টেবিলে পূরণ করুন:

(1,1,'sweetheart'), (1,2,'pumpkin'), (2,1,'cutie'), (2,2,'cherry pie')

আপনি যদি আপনার মেয়ে বন্ধু আইডি 1 তে প্রদত্ত সমস্ত নাম সন্ধান করতে চান তবে আপনি ব্যবহার করতে পারেন:

select names from nicknames where id = 1;

5

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

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

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

আপনি যদি এই ধরণের জিনিসটি করার জন্য একটি ভাল উপায় চান তবে সাধারণত অ্যারে বা অনুরূপ প্রকার পাওয়া যায়। উদাহরণস্বরূপ পোস্টগ্র্রেস একটি ধরণের হিসাবে অ্যারের অফার করে এবং আপনি যা চান তা যদি আপনি পাঠ্যের একটি অ্যারে সঞ্চয় করতে দেন এবং মাইএসকিউএল এবং এমএস এসকিউএল এর জন্য জেএসওএন ব্যবহার করে একই রকম কৌশল রয়েছে এবং আইবিএম এর ডিবি 2 পাশাপাশি অ্যারে প্রকারের প্রস্তাব দেয় (তাদের মধ্যে নিজস্ব সহায়ক ডকুমেন্টেশন)। এটির প্রয়োজন না হলে এটি এত সাধারণ হবে না।

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


3

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

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


ভবিষ্যতের পরিবর্তনগুলির প্রত্যাশার জন্য +1 - সর্বদা আপনার ডেটা মডেলটিকে এক্সটেনসিবল করার জন্য ডিজাইন করুন।
coolgeek

2

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

লিনকিউ দিয়ে সিএসভি কীভাবে টানা যায় তার জন্য এখানে একটি উত্তরের উত্তর


আমি যদিও এটি সম্পর্কে। এরপরেও এর অর্থ হ'ল আমাকে সিরিয়ালাইজ করতে হবে এবং ডিসিরিয়ালাইজ করতে হবে ... তবে আমি সন্দেহ করি এটি করণীয়। আমার ইচ্ছা আমি যা চাই তা করার কিছুটা উপায় অবলম্বন করতাম, তবে আমার সন্দেহ হয় সেখানে তা হয়নি।
JnBrymn

ক্যাপনপ্রোটো.আর.জি হ'ল সিরিয়ালাইজ এবং ডিজিটালাইজেশন না করার একটি উপায়, একইভাবে দ্রুত (সিএসভি বা এক্সএমএল এর তুলনায়) ক্যাপনপ্রোটো আপনার পছন্দের ভাষায় সমর্থিত না হলে _pack.org/index.html
ভোরোনাইপোটো

2

যদি তালিকায় আপনার জিজ্ঞাসা দরকার হয় তবে এটি একটি টেবিলে সংরক্ষণ করুন।

আপনি যদি সর্বদা তালিকাটি চান, আপনি এটি একটি কলামে একটি সীমানা তালিকা হিসাবে সংরক্ষণ করতে পারেন। এমনকি এক্ষেত্রে আপনার যদি না সুনির্দিষ্ট নির্দিষ্ট কারণ না থাকে তবে এটি একটি অনুসন্ধানের টেবিলে সংরক্ষণ করুন।


1

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

এখানে এটি 'ট্র্যাডিশনাল' ডিবি ডিজাইন:

List(ListID, ListName) 
Item(ItemID,ItemName) 
List_Item(ListID, ItemID, SortOrder)

এখানে এটি সাধারণ-সারণীটি রয়েছে:

Lists(ListID, ListContent)

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


0

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


0

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


0

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

আমি এটিকে ব্যাপকভাবে পরীক্ষা করে দেখেছি এবং আমার নির্দিষ্ট ক্ষেত্রে এটি অ্যারে টাইপ ব্যবহার করে (উদগ্রভাবে পোস্টগ্রিসকিউএসএল দ্বারা উত্সাহিত) এবং অন্য টেবিলের অনুসন্ধানের চেয়ে উভয়ই কার্যকর ছিল।

এখানে আমার উত্তর: আমি পোস্টগ্র্রেএসকিউএল-এর একটি একক ক্ষেত্রে সফলতার সাথে তালিকার প্রতিটি আইটেমের নির্দিষ্ট দৈর্ঘ্যটি ব্যবহার করে একটি তালিকা কার্যকর করেছি। ধরা যাক প্রতিটি আইটেম একটি এআরজিবি হেক্স মান হিসাবে রঙ, এর অর্থ 8 চর। সুতরাং আপনি প্রতিটি আইটেমের দৈর্ঘ্য দ্বারা গুণ করে আপনার সর্বোচ্চ 10 আইটেমের অ্যারে তৈরি করতে পারেন:

ALTER product ADD color varchar(80)

আপনার তালিকার আইটেমগুলির দৈর্ঘ্য পৃথক হলে আপনি সর্বদা \ 0 দিয়ে প্যাডিং পূরণ করতে পারেন

এনবি: স্পষ্টতই হেক্স সংখ্যার জন্য এটি সর্বোত্তম পদ্ধতির নয় যেহেতু পূর্ণসংখ্যার একটি তালিকা কম স্টোরেজ গ্রহণ করবে তবে এটি প্রতিটি আইটেমের জন্য বরাদ্দকৃত একটি নির্দিষ্ট দৈর্ঘ্য ব্যবহার করে অ্যারের এই ধারণাটি চিত্রিত করার উদ্দেশ্যে।

কারণ: 1 / খুব সুবিধাজনক: আমি আই * এন, (i +1) * এন সাবস্ট্রিং এ আইটেমটি পুনরুদ্ধার করুন। 2 / ক্রস টেবিল প্রশ্নের ওভারহেড নেই। 3 / সার্ভারের দিক থেকে আরও দক্ষ এবং ব্যয়-সাশ্রয়। তালিকাটি একটি মিনি ব্লবের মতো যা ক্লায়েন্টকে বিভক্ত করতে হবে।

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

"Sশ্বর নিষেধ করবেন না যে এটি এসকিউএল-এর কিছু পবিত্র পবিত্র নীতি লঙ্ঘন করছে": নিয়মগুলি আবৃত্তি করার আগে আরও উন্মুক্ত ও বাস্তববাদী পদ্ধতির গ্রহণ করা সর্বদাই চলার পথ। অন্যথায় আপনি হয়ত স্পাইনেটকে ক্ষুন্ন করার আগে রোবটিক্সের তিনটি আইন আবৃত্তি করার মতো নির্দোষ ধর্মান্ধের মতো শেষ করতে পারেন

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


তবে এটি একটি খুব নির্দিষ্ট ক্ষেত্রে: নির্দিষ্ট দৈর্ঘ্যের আইটেমগুলির একটি নির্দিষ্ট সংখ্যা। তারপরেও, এটি স্ট্যান্ডার্ড এসকিউএল এর চেয়ে শক্ত "কমপক্ষে রঙযুক্ত সমস্ত পণ্য" এর মতো একটি সাধারণ অনুসন্ধান করে।
গার্ট আর্নল্ড

যেমনটি আমি একাধিকবার বলেছি, আমি এটি রঙের জন্য ব্যবহার করি না, যে ক্ষেত্রটি আমি এটির জন্য ব্যবহার করি তা
শৃঙ্খলাবদ্ধ

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

0

অনেকগুলি এসকিউএল ডাটাবেস কোনও টেবিলকে উপাদান হিসাবে সাবটেবল ধারণ করতে দেয়। সাধারণ পদ্ধতিটি হ'ল কলামগুলির মধ্যে একটির ডোমেনটিকে একটি টেবিল হতে দেওয়া। এটি ডিএসএমএসের অজানা উপায়ে উপাদানটি এনকোড করতে CSV এর মতো কিছু কনভেনশন ব্যবহার করার পাশাপাশি রয়েছে।

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

কেন এ নিয়ে বিরক্ত করবেন? ওয়েল, প্রথম স্বাভাবিক ফর্মের ডাটাবেসগুলি সমস্ত ডেটাতে কীড অ্যাক্সেসের অনুমতি দেয়। যদি আপনি কোনও টেবিলের নাম, সেই টেবিলের একটি মূল মান এবং একটি কলামের নাম সরবরাহ করেন তবে ডাটাবেসে সর্বাধিক একটি কক্ষ থাকবে যাতে ডেটাতে একটি আইটেম থাকে।

যদি আপনি কোনও ঘরে কোনও তালিকা বা একটি টেবিল বা অন্য কোনও সংগ্রহ ধারণ করার অনুমতি দেন তবে এখন আপনি কোনও কীটির ধারণাটি সম্পূর্ণরূপে কাজ না করে সাব আইটেমগুলিতে কীড অ্যাক্সেস সরবরাহ করতে পারবেন না।

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


-1

আপনি এটি তালিকার মতো পাঠ্য হিসাবে সঞ্চয় করতে পারেন এবং এমন একটি ফাংশন তৈরি করতে পারেন যা তার ডেটাটিকে প্রকৃত তালিকা হিসাবে ফিরিয়ে দিতে পারে। উদাহরণ:

তথ্যশালা:

 _____________________
|  word  | letters    |
|   me   | '[m, e]'   |
|  you   |'[y, o, u]' |  note that the letters column is of type 'TEXT'
|  for   |'[f, o, r]' |
|___in___|_'[i, n]'___|

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

def string_to_list(string, mode):
    items = []
    item = ""
    itemExpected = True
    for char in string[1:]:
        if itemExpected and char not in [']', ',', '[']:
            item += char
        elif char in [',', '[', ']']:
            itemExpected = True
            items.append(item)
            item = ""
    newItems = []
    if mode == "int":
        for i in items:
            newItems.append(int(i))

    elif mode == "float":
        for i in items:
            newItems.append(float(i))

    elif mode == "boolean":
        for i in items:
            if i in ["true", "True"]:
                newItems.append(True)
            elif i in ["false", "False"]:
                newItems.append(False)
            else:
                newItems.append(None)
    elif mode == "string":
        return items
    else:
        raise Exception("the 'mode'/second parameter of string_to_list() must be one of: 'int', 'string', 'bool', or 'float'")
    return newItems

এছাড়াও আপনার যদি প্রয়োজন হয় তবে এখানে তালিকা থেকে স্ট্রিং ফাংশন রয়েছে।

def list_to_string(lst):
    string = "["
    for i in lst:
        string += str(i) + ","
    if string[-1] == ',':
        string = string[:-1] + "]"
    else:
        string += "]"
    return string
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.