অপ্রচলিত ডাটাবেস কলামগুলি অবসর নেওয়ার সর্বোত্তম অনুশীলনগুলি কী কী? [বন্ধ]


14

আমি একটি অ্যাপ্লিকেশন ডিজাইন করছি যা প্রাথমিক পর্যায়ে ক্লায়েন্টদের কাছ থেকে ডেটা এ, বি এবং সি সংগ্রহ করবে তবে পরবর্তীতে এর পরিবর্তে এ, বি, এবং ডি তথ্য সংগ্রহ করবে will

এ, বি, সি এবং ডি খুব সম্পর্কিত এবং একক ডাটাবেস পোস্টগ্রাইএসকিউএল টেবিল টি এর কলাম হিসাবে এখনই বিদ্যমান ।

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

আমি এবিডি-র জন্য একটি নতুন টেবিল তৈরি করার কথা ভেবেছি, তবে এর অর্থ যে কোনও সারি রেফারেন্সিং টেবিল টি নিয়ে সমস্যা হতে পারে।

আমি কেবল কলামটি সি বরাবর রেখে যেতে পারি এবং কোডটিতে এর উল্লেখগুলি সরিয়ে ফেলতে পারি, বিদ্যমান ডাটা টিকে থাকতে পারি।

আমি দেখছি না এমন আরও ভাল বিকল্প আছে?

কিছু অতিরিক্ত বিশদ:

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


আমি মনে করি এটির কাছে যাওয়ার সঠিক উপায়টি যদি আপনার {A, B, C from থেকে সংগ্রহ করা সারিগুলির মধ্যে এবং {A, ​​B, D collected থেকে সংগ্রহ করা সারিগুলির মধ্যে পার্থক্য করার প্রয়োজন হয় এবং যদি হ্যাঁ হয় তবে আপনার বর্তমান ডেটা নির্ভর করে মডেল এটি অনুমতি দেয়। এবং এটি depend এ, বি, সি collected থেকে সংগ্রহ করা সারিগুলির সাথে আপনি কী করতে চলেছেন তার উপরও নির্ভর করবে - অ্যাপ্লিকেশনটির নতুন সংস্করণটি খালি "ডি" সহ {এ, বি, ডি as হিসাবে দেখায়, তবে একটি ব্যবহারকারী কলাম কলামের সামগ্রী দেখতে পাচ্ছেন না, তিনি কন্টেন্টটি না দেখায়, তিনি ডিবি থেকে এই সারিটি মুছে ফেলার জন্য প্রলুব্ধ হতে পারেন (যদি অ্যাপটি সারিগুলি মোছার অনুমতি দেয়),
ডক ব্রাউন


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

@ ওয়ার্ননারসিডি প্রশ্নে আমার মামলায় কিছু বিশদ যুক্ত করেছে
জাদ এস

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

উত্তর:


31

আপনি যদি ডেটা রাখতে চান তবে এটি অচল নয়। এটি যেখানে আছে সেখানে ছেড়ে দিন। যদি কোনও টেবিলের সাথে কিছু শ্রেণি ম্যাপ করা থাকে তবে প্রতিটি কলাম মানচিত না করে It's


1
আপনি কিছুক্ষণ পরে অনেকগুলি নাল কলাম দিয়ে শেষ করতে পারেন
ইভান

8
হতে পারে তারা স্ট্যাকেক্সচেঞ্জে সেরা অনুশীলনের পদ্ধতির জন্য চাইতে পারে .... যখন এটি ঘটে
ইওয়ান

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

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

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

8

ঠিক আছে তাই আপনার পরিস্থিতিটি হল আপনি পুরানো সারিগুলিতে সম্পত্তি সি রাখতে চান তবে নতুনগুলি নেই।

এটি শ্রেণীর উত্তরাধিকারের সম্পর্ক থাকার সমতুল্য

class All
{
    string A;
    string B;
}

class Old : All
{
    string C;
}

class New : All
{
    string D;
}

যা আপনি 1 থেকে 1 টি সম্পর্কের সাথে তিনটি টেবিলের সাথে ডাটাবেসে উপস্থাপন করবেন

table All
    id varchar
    A varchar
    B varchar

table Old
    id varchar
    C  varchar

table New
    id varchar
    D  varchar

সুতরাং আপনি নতুন পুরানো টেবিলটি তৈরি করতে মাইগ্রেশন স্ক্রিপ্ট তৈরি করতে পারেন, এতে আইডি এবং সি ডেটা অনুলিপি করতে এবং সমস্ত সারণী থেকে সি কলামটি সরিয়ে ফেলতে পারেন।

নতুন স্কয়ারের সাথে আপনার কোডটি প্রয়োজনীয় হিসাবে আপডেট করা;

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


1
আমি যদি টেবিলগুলি বিভক্ত করি, তবে আমি তাদের মধ্যে তিনটি নেব: {এ, বি} {সি} {ডি}
অ্যাকনকাগুয়া

যে উদাহরণের সাথে মেলে না?
ইয়ান

অপেক্ষা করুন। আমি পড়তে মিস করি
ইওয়ান

2

যদি ডেটা স্টোরেজ কোনও উদ্বেগের কারণ হতে পারে তবে টেবিলগুলি বিভক্ত করুন: কী / এ / বি কী / সি কী / ডি

আপনি কোনও দর্শন (ডিবিতে ডেটা অবস্থানের সংজ্ঞা) এর মাধ্যমে বা ওআরএম সংজ্ঞা পরিবর্তনের মাধ্যমে অ্যাক্সেস সম্পাদন করতে পারেন।

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

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

দৃশ্যের মাধ্যমে অ্যাক্সেস সম্পাদন করা আপনাকে ন্যূনতম পরিবর্তন এবং কোনও ডেটা চলাচল না করে অন্তর্নিহিত সারণীতে A / B / C থেকে A / B / C / D থেকে A / B / D এ স্যুইচ করতে দেয়। পঠন যুক্তির জন্য একটি দৃশ্য স্বচ্ছ হবে এবং আপনার ডিবিএমএস যদি ফাংশন বা আপডেটযোগ্য মতামতকে সমর্থন করে তবে লেখার যুক্তিতেও স্বচ্ছ।

সত্যিই আমি মনে করি আপনার সিদ্ধান্তটি বাস্তব-বিশ্বের অনেকগুলি উদ্বেগকে প্রতিফলিত করবে: 1) ডেটাটাইপস সি এবং ডি কি 2) সি / ডি 3 এর জন্য সংগৃহীত আপেক্ষিক ডেটা ভলিউমগুলি) খাঁটি সি বা ডি এন্ট্রির তুলনায় সি / ডি ডেটার তুলনামূলক ওভারল্যাপ 4) ডাউনটাইম / রক্ষণাবেক্ষণ উইন্ডো উপলব্ধতা এবং সময়কাল 5) আপডেটযোগ্য ভিউগুলির জন্য ডিবিএমএস সমর্থন 6) ডিবিতে ভিউ / ফাংশনগুলির মাধ্যমে উপস্থাপনের মাধ্যমে ওআরএম বনাম ডিবি শারীরিক কাঠামোর বিশদটি রাখার আকাঙ্ক্ষা (যেখানে এটি সমস্ত অ্যাক্সেসের জন্য একই অ্যাপ্লিকেশন, শুধুমাত্র বর্তমানের নয়)

আমার উত্তরটি বৃহত্তর / জটিল ডেটাটাইপগুলির জন্য (1), সামান্য ওভারল্যাপ (3) এবং নূন্যতম ডাউনটাইম (4) এর জন্য, আদর্শভাবে (5) এ ভাল ডিবিএম সমর্থন এবং একাধিক অ্যাপ্লিকেশন (6) এ ডেটা অ্যাক্সেস করতে পারে

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


1

রেফারেন্সগুলি সরিয়ে ফেলা এবং এতিম ডেটা হ্রাস করা একটি স্বল্প ঝুঁকির বিকল্প।

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

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

অ্যাপ্লিকেশনগুলি নির্বাচিত কলামগুলির চেয়ে পুরো টেবিলটি একবারে পড়তে পারে - তবে আপনি যদি কেবল একটি ORM ব্যবহার করেন তবে এটি অসম্ভব।


1

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

আমি জ্যাঙ্গো ওআরএম জানি না, তবে এটি একটি সম্ভাবনা হতে পারে।


2
ওপি জানিয়েছেন তারা পোস্টগ্রিস ব্যবহার করছে using
ট্রিপহাউন্ড

ধন্যবাদ - একটি ট্যাগ দেখেনি। আমি কিউ সম্পাদনা করব
রবি ডি

0
  • A, b, c কলাম সহ আপনার একটি সারণী A রয়েছে।
  • ক, ক, খ কলাম সহ একটি নতুন সারণি বি তৈরি করুন।
  • আপনার ডেটা সারণি বিতে স্থানান্তরিত করুন
  • আপনার বিদেশী কীগুলি টেবিল বি তে টেবিল বিতে সরান

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

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