একটি কলামের টেবিলটি কি ভাল ডিজাইন? [বন্ধ]


111

একটি মাত্র কলাম সহ একটি টেবিল রাখা ঠিক আছে? আমি জানি এটি প্রযুক্তিগতভাবে অবৈধ নয়, তবে এটি কী খারাপ নকশা হিসাবে বিবেচিত হয়?

সম্পাদনা করুন:

এখানে কিছু উদাহরণ আছে:

  • আপনার কাছে 50 টি বৈধ মার্কিন রাষ্ট্র কোড সহ একটি টেবিল রয়েছে, তবে আপনার ভার্বোস রাষ্ট্রের নাম সংরক্ষণ করার দরকার নেই।
  • একটি ইমেল ব্ল্যাকলিস্ট।

কেউ একটি মূল ক্ষেত্র যোগ করার কথা উল্লেখ করেছেন। আমি এটি যেভাবে দেখছি, এই একক কলামটি প্রাথমিক কী হবে।


কেবলমাত্র একটি একক কলাম সহ একটি টেবিলের জন্য ব্যবহার-কেসটি কল্পনা করতে আমার একটু সমস্যা হচ্ছে। আপনি কি একটি উদাহরণ দিতে পারেন?
পল মরি

তবে কমপক্ষে এটির জন্য একটি সূচক তৈরি করবেন না!
সাথ্য

3
মার্কিন রাষ্ট্রের কোডগুলি কোনও ডোমেন সংজ্ঞায়নের শাস্ত্রীয় উদাহরণ
কাসনসুই

3
আমি এর আগে একটি অ্যাপ্লিকেশনটির জন্য একটি লক মান ধরে রাখতে একটি ডাটাবেস টেবিল ব্যবহার করেছি
রাশ ক্যাম

এই প্যাটার্নটির জন্য আমার ব্যবহার ছিল ডেটার সেট তৈরি করা। প্রধান সারণীতে প্রতিটি রেকর্ডের একটি SET ক্ষেত্র থাকে। একই এসইটি সহ রেকর্ডগুলি সংযুক্ত রয়েছে। আপনি কীভাবে একই এসইটি দিয়ে একাধিক রেকর্ড সন্নিবেশ করবেন? 'INSERT INTO VALUES () সেট করে' এবং তারপরে রেকর্ডগুলির সাথে সংযুক্ত করতে আপনার SET ID হিসাবে শেষ সন্নিবেশ IDটি ব্যবহার করুন। তারপরে আবার, সম্ভবত আমি ইউআইডি ব্যবহার করতে পারতাম, তবে এ সম্পর্কে কিছু ভুল মনে হচ্ছে।
উইলিয়াম এন্টারিকেন

উত্তর:


87

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

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


168

এর নিরিখে relational algebraএকটি অবিচ্ছিন্ন সম্পর্ক হবে, যার অর্থ " এই জিনিসটি বিদ্যমান "

হ্যাঁ, এই জাতীয় সম্পর্কের সংজ্ঞা দেওয়ার জন্য একটি টেবিল রাখা ভাল: উদাহরণস্বরূপ, একটি ডোমেন সংজ্ঞায়িত করা।

এই জাতীয় সারণির মান অবশ্যই প্রাকৃতিক প্রাথমিক কী হওয়া উচিত।

একটি অনুসন্ধান সারণী যা prime numbersআমার মনে প্রথমে আসে।


3
+1: সারণীটি মানগুলির একটি সেট যা আপনার আরডিবিএমএসের আদিম ধরণের হয়ে থাকে।
এসলট

4
সম্পর্কের তত্ত্বের ভিত্তিতে উত্তর সরবরাহের জন্য +1।
lubos hasko

এখানে একটি 1 টি কলাম সারণি একটি প্রাকৃতিক কী, একটি মেসেজিং সিস্টেমের থ্রেড টেবিল ... নয় যে কোনো স্কিমা একটি ভাল উদাহরণ আছে stackoverflow.com/a/6542556/45767
JeremyWeir

29

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


19

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


+1 - নীচের লাইনটি, আমার বইটিতে এটি সঠিক উত্তর
মার্ক ব্রিটিংহ্যাম

সংক্ষিপ্ত, স্পষ্ট উত্তরের জন্য +1
ম্যাথু জোন্স

3
কেন একটি কলামের টেবিলকে অন্য টেবিলের সাথে সংযুক্ত করা যাবে না?
অহেহো

2
কেন না? উদাহরণস্বরূপ স্টেট কোড টেবিলটি নিন। আপনি কেন এড্রেস ফিল্ড সহ অন্য টেবিলে জালিয়াতি কী বাধা হিসাবে ব্যবহার করবেন না?
আহেহো

1
এটি এমন এক সময়ের দুর্দান্ত উদাহরণ যা এটি একটি ভাল ধারণা হবে।
কেভিন

11

একটি ঘটনা যা আমি মাঝে মাঝে পেয়েছি তা হ'ল এরকম:

ছক countries_id , প্রতিটি দেশের জন্য সাংখ্যিক আইডি দিয়ে শুধুমাত্র একটি কলাম রয়েছে।

সারণী দেশসমূহ_ বিবরণ , দেশ আইডি সহ কলাম, ভাষা আইডির সাথে একটি কলাম এবং স্থানীয় দেশের নামের একটি কলাম রয়েছে।

সারণী company_factories , কোম্পানির প্রতিটি কারখানার জন্য তথ্য রয়েছে, উইচ সহ দেশটি অবস্থিত।

সুতরাং টেবিলগুলিতে ডেটা সমন্বয় এবং ভাষার স্বতন্ত্র ডেটা বজায় রাখতে ডাটাবেস ভাষা নির্ভরতা ছাড়াই বিদেশী কীগুলি মঞ্জুরি দেওয়ার জন্য কেবলমাত্র একটি কলামযুক্ত টেবিল সহ এই স্কিমাটি ব্যবহার করে।

এই ক্ষেত্রে আমি মনে করি যে একটি কলামের সারণির অস্তিত্ব ন্যায়সঙ্গত।

মন্তব্যটির জবাবে সম্পাদিত: কাসনসুই


(উত্স: ggpht.com )

এই স্কিমে আমি টেবিলের একটি বিদেশী কী সংজ্ঞা দিতে পারি সংস্থাগুলি_ফ্যাক্টরিগুলিতে আমাকে টেবিলে ভাষা কলাম অন্তর্ভুক্ত করার প্রয়োজন হয় না, তবে আমার যদি টেবিলের দেশগুলি না থাকে তবে বিদেশী কীটি সংজ্ঞায়িত করতে আমার অবশ্যই টেবিলে ভাষা কলামটি অন্তর্ভুক্ত করতে হবে ।


2
কেন দেশ_বিহীন? একটি দেশ সন্নিবেশ করানোর জন্য, আপনাকে কমপক্ষে একটি ভাষায় এর নামটি জানতে হবে এবং এর ফলশ্রুতিতে একটি দেশ_আইডিকৃত_স্ক্রিপিতে প্রদর্শিত হবে। একটি দেশ_দেশবিহীন_স্ক্রিপশন এন্ট্রি অর্থহীন। "ক্যালসেসির রাষ্ট্রপতি জনাব বারাক ওবামা (১৪২৪৩, দেশের নাম) নূন্যমূল্য ফিরে এসেছেন, আজ Россия" এর রাষ্ট্রপতি দিমিত্রি মেদভেদেভের সাথে সাক্ষাত করেছেন
কাসনসুই

4
@ ডলিভেরাস: ঠিক আছে, আমি এখন দেখছি, +1। আমি বরং coutry_code এর জন্য আইএসও 3166-1 ব্যবহার করব। সংখ্যাসূচক আইডির বিপরীতে, একটি 3-বর্ণের দেশ কোড বিশ্বের প্রায় প্রত্যেককে লাতিন বর্ণমালা পড়তে পারে এমন দেশ সম্পর্কে কী উল্লেখ করা হয়েছে সে সম্পর্কে একটি ধারণা দেয়।
কাসনসুই

আমি একই টেবিলে প্রাকৃতিক ভাষার অনুবাদগুলি সমন্বিত করার জন্য এখানে আরও একটি পদ্ধতি প্রয়োগ করেছি। মঞ্জুর, ফলস্বরূপ অনেকগুলি ক্ষেত্র nullaable তবে আপনি কাস্টম ট্রিগারগুলিতে ডেটা অখণ্ডতা অফলোড করতে পারেন। সারণি তৈরি "DBA" "myLocalisedTable" ( "entry_id" পূর্ণসংখ্যা নয় শূন্য ডিফল্ট AUTOINCREMENT, "master_entry_id" পূর্ণসংখ্যা শূন্য, "master_entry_label" VARCHAR (200) শূন্য, "LANGUAGE_ID" পূর্ণসংখ্যা শূন্য, "localised_entry_label" VARCHAR (300) শূন্য।
ভিনসেন্ট বাক

7

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

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


5

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

আমি একক-কলামের টেবিলের দুটি ব্যবহার OTMH সম্পর্কে ভাবতে পারি:

1) ডেটা আইটেম বিদ্যমান। ড্রপডাউন তালিকায় প্রায়শই ব্যবহৃত হয়। সাধারণ বৈধতা পরীক্ষার জন্যও ব্যবহৃত হয়।

যেমন। দ্বি-অক্ষর মার্কিন রাষ্ট্র সংক্ষেপ; আমরা যে পিন কোডগুলিতে প্রেরণ করি; শব্দ স্ক্র্যাবল আইনী; প্রভৃতি

2) বিরাগ বাইনারি অ্যাট্রিবিউট, অর্থাত্‍, একটি বড় টেবিলের মধ্যে একটি বাইনারি অ্যাট্রিবিউট যা কেবলমাত্র খুব কম রেকর্ডের জন্যই সত্য। নতুন বুলিয়ান কলাম যুক্ত করার পরিবর্তে, আমি রেকর্ডগুলির কীগুলি সম্বলিত একটি পৃথক টেবিল তৈরি করতে পারি যার জন্য বৈশিষ্ট্যটি সত্য।

যেমন। টার্মিনাল রোগ রয়েছে এমন কর্মীদের; একটি 360-দিনের বছর সহ ব্যাংক (সর্বাধিক ব্যবহার 365); প্রভৃতি

-Al।



4

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


এখানে কোনও একক কলাম ব্যবহার করা সম্ভবত ভাল, তবে মনে রাখবেন যে আপনি অন্যান্য কলামগুলিতেও স্বতন্ত্রতা সীমাবদ্ধতা সেট করতে পারেন।
স্টিলথ রাব্বি

2

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

আপনি যখন ডাটাবেসের স্কিমার কথা ভাবছেন তখন সেগুলি সত্যই ভাল ডিজাইন হয় না তবে কেবল ইউটিলিটি টেবিল হিসাবে ব্যবহার করা উচিত।

আমি অতীতে কার্যকরভাবে ব্যবহৃত নম্বর সারণী দেখেছি ।


1

ডাটাবেসের উদ্দেশ্য হ'ল একে অপরের সাথে টুকরো টুকরো তথ্য সম্পর্কিত। যখন কোনও ডেটার সাথে সম্পর্কিত হওয়ার কিছু নেই তখন আপনি কীভাবে তা করতে পারেন?

সম্ভবত এটি কোনও ধরণের সংকলন টেবিল (যেমন ফার্স্টনেম + লাস্টনাম + জন্ম তারিখ), যদিও আপনি এখনও এটি করতে চান তা এখনও নিশ্চিত নই।

সম্পাদনা: আমি দেখতে পাচ্ছিলাম কোন ধরণের সাধারণ তালিকার জন্য এই ধরণের টেবিলটি ব্যবহার করা। আপনি কি এটির জন্য ব্যবহার করছেন?


9
না, একটি ডাটাবেসের প্রাথমিক উদ্দেশ্য তথ্য সংরক্ষণ করা।
স্পেন্সার রুপোর্ট

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

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

@ মার্ক - এটি সাধারণ তালিকা থেকে আমি বোঝাতে চাইছি। অনুমান আমি খুব ভাল নিজেকে ব্যাখ্যা না।
ম্যাথু জোন্স

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

1

হ্যাঁ যতক্ষণ ক্ষেত্রটি প্রাথমিক কী হিসাবে আপনি বলেছিলেন যে এটি হবে। কারণ হ'ল যদি আপনি সদৃশ ডেটা .োকান তবে সেই সারিগুলি কেবল পঠনযোগ্য হবে। যদি আপনি নকল করা সারিগুলির একটি মুছতে চেষ্টা করেন। এটি কাজ করবে না কারণ কোন সারিটি মুছতে হবে তা সার্ভার জানে না।


2
যে হাস্যকর. কোনও প্রাথমিক কী বা সীমাবদ্ধতা ছাড়াই মুছুন অপারেশন সমস্ত মিলে যাওয়া সারি মুছে ফেলবে, এগুলি উপেক্ষা করবে না।
এরিক ফানকেনবাশ

1
'কাজ না করা' দ্বারা তার অর্থ "প্রত্যাশার মতো কাজ না করা" হতে পারে, যা "আরে আমি একটি সারি মুছে ফেলেছি তবে দুজনেই চলে গেছে" শর্তটি অন্তর্ভুক্ত করে।
GWLlosa

অথবা, যদি আপনি "ওপেন টেবিল" ভিউ থেকে এসএসএমএসে কোনও রেকর্ড মুছতে চেষ্টা করেন, এটি আসলে একটি ডায়ালগ ছুঁড়ে দেবে যা রেকর্ডটি অনন্যভাবে চিহ্নিত করা যায় না এবং তারপরে কিছুই করতে পারে না ...
মাইকেল ফ্রেড্রিকসন

-1

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

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

সুতরাং, অবৈধ না হলেও, সাধারণত আপনার কেবল একটি কলাম সহ একটি টেবিল থাকা উচিত নয়।


এর অনুরূপ সংখ্যাগুলির টেবিলটি লুপিং বন্ধ করতে খুব কাজে আসে।
u07ch

-1

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


1
মনে হচ্ছে আপনি কোনও লেনদেনের টেবিলের সাথে একটি ডেটা টেবিল মিশ্রণ করছেন। আমার মতে, এগুলি দুটি পৃথক জিনিস হওয়া উচিত।
জোশ নোয়ে

-2

হ্যাঁ পুরোপুরি ঠিক আছে। কিন্তু একটি আইডি ক্ষেত্র এটি অধিকার করতে পারে না?


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

কে বলে আইডি পরিচয় হতে হবে? নাকি চাবি অংশ?
এরিক

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