নতুন বৈশিষ্ট্যগুলি পরিচালনা করতে ডাটাবেসগুলি রিফ্যাক্টরিং বা আপগ্রেড করা


9

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

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

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


1
এটি জিজ্ঞাসা করার জন্য +1 ধন্যবাদ। আমি আমার আসল প্রশ্নের প্রতিক্রিয়াগুলি অনেক কিছু শিখেছি এবং এটি একটি অন্তর্দৃষ্টিপূর্ণ থ্রেডও।
জিম

উত্তর:


3

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

আপনি এখানে ডাটাবেস রিফ্যাক্টরিং সম্পর্কে আরও পড়তে পারেন ।



14

রিফ্যাক্টরিং কোড সহজ - আপনি কেবল কোডটি পরিবর্তন করেন এবং আপনার রিগ্রেশন টেস্টগুলি চালান।

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

ভীতিজনক জিনিস।


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

8
@ ম্যাথিউ ফ্লাইনের জন্য +1। এই প্রয়োজনীয়তাটি স্বীকৃতি দেওয়ার আগে আপনি কতটা ডেটা সংগ্রহ করতে চলেছেন? মিলিয়ন সারি। আর একটি সমস্যা হ'ল অনেক সময় আপনার অ্যাপ্লিকেশনটি কেবল ডাটাবেস ব্যবহার করে না। ডাটাবেসটিতে এতে অনেক অ্যাপ কাজ করতে পারে এবং আপনি তাদের অস্তিত্ব জানেন না (যেমন বন্য "বিআই" অ্যাপ্লিকেশন)। ডাটাবেসের স্কিমের পরিবর্তন হয় ভীতিকর।
অ্যাঞ্জেলো

2
কখনও কখনও কয়েক বিলিয়ন সারি
HLGEM

1
আপনি যদি কয়েক মিলিয়ন সারি নিয়ে কাজ করে থাকেন তবে কীভাবে তাদের সরিয়ে নেওয়া যায় তা আপনি আরও ভালভাবে জানেন
জেফো

3

ভবিষ্যতে আপনার যথেষ্ট পরিমাণ সময় সাশ্রয় করার জন্য পর্যাপ্ত বৈশিষ্ট্য যুক্ত করতে আপনার অতিরিক্ত সময় ব্যয় করা এবং আপনার সময় ব্যয় করার মধ্যে একটি দুর্দান্ত লাইন রয়েছে।


1
আপনি একটি বিচ্ছিন্ন উদাহরণ বা দুটি জন্য এই তর্ক করতে পারেন, কিন্তু সময়ের 'বিটস' যখন খুব বেশি যুক্ত হয়?
জেফো

আমার নিজের অভিজ্ঞতা থেকে, এটি আসলে বেশিরভাগ প্রকল্পের ক্ষেত্রে। তবে আমি অনুমানও করতে পারি যে এটি অভিজ্ঞতা নিয়ে আসে এবং অত্যন্ত বিষয়গত হয় :) যদি কেউ আপনাকে একটি সঠিক রেসিপি দিতে পারে তবে আমি অবাক হব (সুতরাং 'সূক্ষ্ম রেখা')।
0x4B1D

@ জেফ ও: এটি 'বিটস' হবে না। দৃening়তায় উন্নয়নের সময় 10% বা 20% বিনিয়োগের প্রয়োজন কারণ সিস্টেমটি মূলত কল্পনা করা সময়সীমা এবং আপনার কর্মসংস্থান উভয়ই ছাড়িয়ে যেতে পারে।
rwong

3

আমি মনে করি তত্ত্বটি হ'ল যদি আপনি 2 টি টেবিলের মধ্যে অনেকগুলি সম্পর্কের জন্য অনেকগুলি সমর্থন করার জন্য একটি লিঙ্ক টেবিল অন্তর্ভুক্ত করেন, তবে এমনকি যদি ডেটাতে সত্যই কেবল এক থেকে এক সম্পর্ক বিদ্যমান থাকে তবে সকলেই এসকিউএল এমনভাবে লিখবে যে যদি কখনও কখনও অনেকের কাছে অনেকগুলি সমর্থিত সবকিছু "কেবলমাত্র কাজ করবে"।

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

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

অতএব অনেকের সাথে অনেক সম্পর্কে পরিবর্তনের ফলে প্রতিটি ক্যোয়ারিতে প্রভাব পড়বে যা মূল 2 টি টেবিলকে জড়িত করে, প্রায়শই ব্যবসায়ের স্তরটির চেয়ে অনেক বেশি বিস্তৃত ক্যাসকেডিং প্রভাব। সুতরাং লোকেরা এটিকে যাতে না ঘটে তার জন্য উল্লেখযোগ্য পরিমাণে যায়।

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

ইতিমধ্যে, হ্যাঁ, আপনি 1-থেকে-বহু থেকে বহু-বহুতে রিফ্যাক্টর করতে পারেন, তবে এটি অনেক কাজ হতে পারে।


আপনি কি প্রতিটি সম্পর্ককে বহু-বহুতে পরিণত করতে যাচ্ছেন না?
JeffO

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

3

আমি সাধারণত পিএইচবিগুলিতে এটি ব্যাখ্যা করি - কোডটি দেয়াল এবং ছাদ, ডেটাবেস হল ভিত্তি।

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

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

গ্রাহক সার্ভারগুলিতে আপডেট স্ক্রিপ্টগুলি ঘুরিয়ে দেওয়া একটি অ-তুচ্ছ প্রকল্প এবং গ্রাহকের প্রতিটি ডিবিএ আপনার ট্রিপলটি চেক করতে ইচ্ছুক over কিছু অতিরিক্ত কলাম এবং টেবিল এতদূর খারাপ নয়।


1

সাধারণ নিয়ম যদি একটি সম্পর্ক এক অন্যতম কিন্তু পারে ভবিষ্যতে অনেক অনেক তারপর, এটা অনেকের কাছে অনেক Make হও।

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

একের অনেকের কাছে অনেকের অনেকের হিসাবে প্রয়োগ করা হয় তবে এটির জন্য বেশি খরচ হয় না - তবে অনেকের কাছে অনেকের সমর্থন করার জন্য একটি ডাটাবেস এবং অ্যাপ্লিকেশনটি রিফ্যাক্ট করা ব্যয়বহুল এবং অসুবিধায় ভরা।


আমি সম্মত হই যে অনেক পরিপক্ক ডোমেন রয়েছে (যেমন এইচআর) যেখানে ক্লায়েন্ট প্রয়োজনের পূর্বাভাস দেয় না, তবে আপনি জানেন যে এটি ঘটতে বাধ্য।
JeffO

0

সফটওয়্যারটির নকশা (এবং সম্ভবত আরও অনেকগুলি জিনিস) দেখার দুটি উপায় রয়েছে - একটি কৌশলগত দৃষ্টিভঙ্গি বা কৌশলগত দৃষ্টিভঙ্গি। প্রত্যেকের নিজস্ব সুবিধা এবং ত্রুটি রয়েছে।

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

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

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

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

সুতরাং, এটি শুরু থেকে আগে থেকেই ধারণা করা ভাল।


শুরু থেকেই প্রত্যাশা করা ভাল।
JeffO

0

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

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