পরিবর্তনশীল কলামগুলির সাহায্যে টেবিল ডিজাইন কীভাবে পরিচালনা করবেন handle


17

আমার কাছে একটি টেবিল ডিজাইনের দৃশ্য আছে এবং একটি নন-ডিবিএ টাইপ হিসাবে, মতামত চান যা সম্পর্কে আরও স্কেলযোগ্য।

বলুন আপনাকে একটি মেট্রো অঞ্চলের বাড়ির উপর ছোট ছোট পাড়া (200 বাড়ি) থেকে শুরু করে অবশেষে 5000000+ বাড়ীতে তথ্য রেকর্ড করতে বলা হয়েছে।

আপনার বেস তথ্য সংরক্ষণ করতে হবে: আইডি # (একটি অনন্য লট # আমরা একটি অনন্য সূচক হিসাবে ব্যবহার করতে পারি), অ্যাডার, সিটি, রাজ্য, জিপ। দুর্দান্ত, সাধারণ টেবিল এটি পরিচালনা করবে।

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

শেষ অবধি - প্রতি বছর অতিরিক্ত কলামের # টি পরিবর্তন হবে। 2 টি অতিরিক্ত কলাম দিয়ে শুরু হতে পারে, তার পরের বছর 6 এ চলে যাবে, তারপরে নীচে নেমে 2 এ যাবে।

সুতরাং একটি টেবিল পদ্ধতির হ'ল ঘরের টেবিলগুলিতে কলাম হিসাবে কাস্টম তথ্য যুক্ত করার চেষ্টা করা যাতে কেবলমাত্র একটি টেবিল থাকে।

তবে আমার এমন পরিস্থিতি রয়েছে যাতে কেউ এর জন্য এই টেবিলগুলি রেখেছিলেন:

"হাউস টেবিল" কলাম: আইডি, অ্যাডার, শহর, রাজ্য, জিপ - প্রতি বাড়িতে এক সারি

ID   Addr              City     State  Zip 
-------------------------------------------
1    10 Maple Street   Boston      MA  11203

2    144 South Street  Chelmsford  MA  11304

3    1 Main Avenue     Lowell      MA  11280

"কাস্টম ইনফরমেশন টেবিল" কলাম: আইডি, নাম, মান - সারণীর মতো দেখতে:

ID   Name             Value

1    Last Name        Smith

2    Last Name        Harrison

3    Last Name        Markey

1    Square Footage   1200

2    Square Footage   1930

3    Square Footage 

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

1    Last Name    Smith

2    Last Name    Harrison

3    Last Name    Markey

1    First Name   John

2    First Name   Harry

3    First Name   Jim

শেষ পর্যন্ত আপনি 100,000 বাড়ির সারি সংগ্রহ করেছেন এবং এক বছরে 10 টি অতিরিক্ত টুকরো তথ্য রয়েছে; দ্বিতীয় সারণীতে এখন 1,000,000 সারি তথ্য, যার মধ্যে অনেকগুলি অনর্থক (বিবরণ) তথ্য রয়েছে। সামগ্রিকভাবে ডাটাবেসের প্রয়োজনীয়তা হ'ল লোকেরা প্রতিদিন বাড়ির সারি সম্পর্কিত তথ্য + সম্পর্কিত কাস্টম ফিল্ডের মানগুলি কয়েক হাজার বার পেতে হবে।

সুতরাং আমার প্রশ্ন: এটির বদলে কি খারাপ (বা ভয়ঙ্কর) অনুশীলন হবে:

ক) কাস্টম কলামগুলির সর্বাধিক # এ অনুমান সহ ঘরের টেবিলটি রাখুন ("10" এর মাধ্যমে সম্ভবত "1" বলা হয়) এবং বাড়ির সারিগুলিতে ঠিক সেই কাস্টম মানগুলি সন্নিবেশ করান

অথবা

খ) বাড়ির টেবিলটিতে কাস্টম তথ্য সংরক্ষণ করুন, তবে প্রতি বছর যখন প্রয়োজনীয়তাগুলি পরিবর্তন হয়, কাস্টম তথ্যের জন্য প্রয়োজনীয় # কলামগুলি দিয়ে বাড়ির টেবিলটি পুনর্নির্মাণ করুন, প্রয়োজনীয়তা বাদাম হতে পারে এবং আপনি কখনই জানেন না যে কতগুলি সর্বোচ্চ alচ্ছিক ক্ষেত্রের জন্য জিজ্ঞাসা করা যেতে পারে?

ধন্যবাদ, আশা করি এটি সার্থক হয়েছে!


হাই, আপনি কীভাবে আপনার সমস্যা পরিচালনা করলেন? আমি একই ধরণের দৃশ্যে দৌড়াচ্ছি এবং আমি অতিরিক্ত তথ্যের জন্য একটি সম্পর্কিত টেবিল তৈরি করতে চলেছি এবং এটি "একক টেবিল" হিসাবে দর্শন দিয়ে রেন্ডার করছি।
বেনজ

উত্তর:


15

আপনার কাছে প্রায় 4 টি পছন্দ রয়েছে:

নোএসকিউএল - সংজ্ঞা প্রতিটি রেকর্ড কী / মান জোড়ার সেট হিসাবে সংরক্ষণ করা হয়। এটি খুব নমনীয় এবং দ্রুত। সমস্ত রিপোর্ট লেখকই এই স্টোরেজকে সমর্থন করেন না। NoSQL এর অনেকগুলি ডাটাবেস বাস্তবায়ন রয়েছে। এখনই যেটিকে সবচেয়ে জনপ্রিয় বলে মনে হচ্ছে, তা হ'ল মঙ্গোডিবি।

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

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

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

এই সমস্ত সমাধানগুলির মধ্যে, আমার নিজের মতামতটি হল আপনি নোএসকিউএল বা ইএভি পদ্ধতিটি আপনার কোড এবং আপনার স্কিমা রিফ্যাক্টিংয়ের ন্যূনতম পরিমাণে সর্বাধিক সফল হতে পারবেন।

আপনার এমন পরিস্থিতি তৈরি হবে যেখানে আপনি এক বছর না হয়ে এক বছর ডেটা সংগ্রহ করেন এবং তারপরে এটি আবার সংগ্রহ করুন। সঠিক তথ্য সহ পুরানো ডেটা আপডেট করার চেষ্টা করা সমস্যাযুক্ত এবং ব্যয়বহুল। সংগ্রহস্থল হয় না।


আমি শুনেছি আপনি পিভট টেবিল বা এর মতো কিছু ব্যবহার করতে পারেন
আলেকজান্ডার মিলস

2

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

তবে এটি আমার কাছে কোনও নোএসকিউএল ডাটাবেসের ( http://en.wikedia.org/wiki/NoSQL ) জন্য ভাল প্রার্থীর মতো বলে মনে হচ্ছে । আমি কখনই এই জাতীয় ডাটাবেসের সাথে কাজ করি নি, আপনি যা বর্ণনা করেন তা হল একটি সাধারণ দৃশ্য যা এটি সমাধান করে।


0

যদি কাস্টম কলামগুলির একযোগে সংখ্যার সীমাবদ্ধ হয় এবং সীমাগুলি জানা থাকে (যেমন স্ট্রিংয়ের জন্য 10-20 কাস্টম কলামগুলি বেশি নয়, পূর্ণসংখ্যার জন্য x কলামগুলির চেয়ে বেশি নয়)
আপনি ডেটাপে প্রতিটি অতিরিক্ত ক্ষেত্র সহ বেস টেবিলটি ব্যবহার করতে পারেন প্রতি বছর সারণীটি পুনর্নির্মাণের ক্ষেত্রে কেবলমাত্র প্রাসঙ্গিক কলামগুলি এবং সেই বছরের জন্য সামগ্রীর প্রতিফলন ঘটানোর জন্য জেনেরিক ক্ষেত্রগুলির নাম পরিবর্তন করে including বছরের জন্য একটি দৃশ্য তৈরি করুন।

House Table:
ID, Addr, City, State, Zip, custom_string1,cs_2,cs_3,custom_integer_1,ci_2,ci_3 ...

create view house_2014 as 
select ID, Addr, City, State, Zip,
custom_string1 as last_name,cs_2 as first_name ...

এই পদ্ধতির সাথে সমস্যাটি হ'ল আপনার কোনও ইতিহাস নেই তবে আপনি কলাম প্রয়োজনীয়তা পরিবর্তন করার আগে প্রতি বছর সহজেই একটি অনুলিপি তৈরি করতে পারতেন।

create table house_2014_archive as select * from house_2014;
drop house_2014;
create view house_2015 as "select column list for new year";

0

আপনি যে সমস্ত পরিস্থিতিতে আপনি এই ডেটা সংরক্ষণ করতে চান তা গণনা করতে পারেন?

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

প্রতিটি দৃশ্যের জন্য একটি টেবিল, এইভাবে কমপক্ষে আপনি টেবিলগুলি পরিষ্কার রাখবেন এবং রাস্তার ঠিকানা "শেষ নাম" কলামে সংরক্ষণ করা আপনি এড়াতে সক্ষম হবেন ...

এই নকশা প্রশ্নটি একবার দেখুন: /programming/554522/something- Like-inheritance-in-database- design

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