কোনও ওআরএম সমর্থনকারী ডেটা বৈধকরণের জন্য, ডাটাবেসেও কি বাধা প্রয়োগ করা উচিত?


13

আমি সর্বদা আমার (অ্যাক্টিভেকর্ড) মডেলগুলি ছাড়াও ডাটাবেস স্তরে সীমাবদ্ধতা প্রয়োগ করেছি। তবে আমি ভাবছিলাম যে এটি কি সত্যই প্রয়োজন?

একটু ব্যাকগ্রাউন্ড

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

আমি ডিবি, ইমোতে সীমাবদ্ধতাগুলি এড়িয়ে গেলে সম্ভাব্য সুবিধা -

  • ডাটাবেস স্থানান্তরিত না করে মডেলটিতে একটি বৈধতা নিয়ম পরিবর্তন করতে পারে।
  • পরীক্ষায় বৈধতা এড়িয়ে যেতে পারে।

সম্ভাব্য অসুবিধা?

যদি এটি সম্ভব হয় যে ওআরএম বৈধতা ব্যর্থ হয় বা বাইপাস করা হয় তবে যাইহোক, ডাটাবেস সীমাবদ্ধতার জন্য যাচাই করে না।

আপনি কি মনে করেন?

সম্পাদনা এই ক্ষেত্রে, আমি ইআই ফ্রেমওয়ার্ক ব্যবহার করছি যা ডেটাবেস থেকে মডেল তৈরি করে, তাই ডাটাবেস বিধিগুলিও উত্পন্ন হয় (যদিও আমি নিজেও সেগুলি পোস্ট-প্রজন্ম নিজেই লিখতে পারতাম)।


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

উত্তর:


16

আপনার গাইডিং নীতিটি নিজেকে পুনরাবৃত্তি করবেন না এমন হওয়া উচিত :

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

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

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

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

ব্যর্থতাসমূহ

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

অন্য যে কোনও কিছুর জন্য ওআরএম বাইপাস করা

এছাড়াও একটি ভাল ধারণা না। তবে এটি বিভিন্ন কারণে ঘটতে পারে:

  1. ওআরএম চালু হওয়ার আগে নির্মিত অ্যাপ্লিকেশনটির উত্তরাধিকার অংশগুলি।

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

    খারাপভাবে ডিজাইন করা 2 * 10 ^ 8 টি সারি মাইএসকিউএল টেবিলের (ডাউনটাইম ছাড়াই) কোনও কী পরিবর্তন করার চেষ্টা করুন এবং আপনি বুঝতে পারবেন আমি কোথা থেকে আসছি।

  2. অ্যাপ্লিকেশনটির অ-উত্তরাধিকার অংশগুলির জন্য যা সম্পূর্ণরূপে সরাসরি ডেটা স্টোরেজে কথা বলতে হয়:

    এমনকি কৌতুকপূর্ণ। ওআরএম হ'ল অভিনব সরঞ্জাম, এবং তারা প্রায় সবকিছুর যত্ন নেয় তবে কখনও কখনও তারা কেবল পথে আসে এমনকি একেবারে অকেজো। গুঞ্জনধ্বণিতে (buzzphrase সত্যিই) হল অবজেক্ট রিলেশনাল ইম্পিডেন্স মেলেনি , সহজভাবে করা এটি আপনার ORM করতে সম্ভব টেকনিক্যালি না সবকিছু আপনার রিলেশনাল ডাটাবেস করে, এবং স্টাফ তারা কিছু, একটি উল্লেখযোগ্য কর্মক্ষমতা শাস্তি আছে।

মন্তব্য

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

এটি হ'ল অতিরিক্ত স্তর যুক্ত করা অত্যন্ত সহায়ক হবে এবং আমরা যদি কোনও ওয়েব অ্যাপ্লিকেশন সম্পর্কে কথা বলি তবে আমি একটি রেস্ট এপিআই দিয়ে যাব। এর জন্য অতিমাত্রায় সরল নকশাটি হ'ল :

এখানে চিত্র বর্ণনা লিখুন

ওআরএম এপিআই এবং ডেটা স্টোরেজের মধ্যে বসবে এবং এপিআই এর পিছনে থাকা সমস্ত কিছু (এটি সহ) বিভিন্ন অ্যাপ্লিকেশন থেকে একক সত্তা হিসাবে বিবেচিত হবে।


সাধারণত আপনি নিজের ওআরএম-তে একটি স্কিমা সংজ্ঞায়িত করবেন যা ডাটাবেসে মিরর করা হয় যাতে আপনার দ্বিতীয় স্তরের আশ্বাস থাকে।
জোশ কে

2
@ জোশক আপনি দ্বিতীয় স্তরের আশ্বাস বলছেন, আমি বলছি রক্ষণাবেক্ষণ নরক। আপনি ঠিক না,
এমনটি

বোধ হয়। আমি এখন এই পথ অনুসরণ করছি। ধন্যবাদ!
না

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

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

20

এটি উত্তর দেওয়া আসলে একটি খুব কঠিন প্রশ্ন এবং আমি এটি একটি খুব বিতর্কিত বিষয় বলে মনে করেছি।

যেমন ইয়ান্নিস রিজস তার উত্তরে উল্লেখ করেছেন, ডাটাবেস এবং ওআরএম স্তর উভয় ক্ষেত্রেই সীমাবদ্ধ যুক্তি থাকার কারণে ডিআরওয়াই লঙ্ঘন হবে বলে মনে হচ্ছে যা "রক্ষণাবেক্ষণের দুঃস্বপ্ন, দুর্বল ফ্যাক্টরিং এবং যৌক্তিক দ্বন্দ্বের কারণ হতে পারে"।

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

  1. ম্যানুয়াল ডিবি আপডেট (এগুলি প্রতিটি সংস্থায় মনে হয়)

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

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

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

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


2
সবেমাত্র কাজ ছেড়ে গেছে এবং আমার উত্তরটি প্রসারিত করার কথা ভাবছে যা আপনি সবেমাত্র পোস্ট করেছেন তা কমবেশি হবে। ভাল উত্তর!
ইয়ানিস

3

আমি অবশ্যই আমার ডিফল্ট বিকল্প হিসাবে ডাটাবেসে বাধা যুক্ত করব add কারণ এন্টারপ্রাইজের জন্য ডেটা কিং এবং ডেটা কোয়ালিটি সর্বমোট। @ ইয়ানিস রিজস ডিআরওয়াই নীতিটি আলোচনায় নিয়ে আসেন। তবে আর একটি নীতি হল ডিফেন্স ইন ডিপথ। ডেটার জন্য আমি এই নীতিটি ব্যবহার করব।

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


2

আমি মনে করি আপনি উভয় কিছুটা হলেও করেন।

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

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


1

ডাটাবেসটি কেবলমাত্র আইএমও যেখানে ডিআরওয়াই লঙ্ঘন করা যায়, কারণ যদি কোনও কিছু আপনার ওআরএমকে ছাড়িয়ে যায় এবং খারাপ ডেটা থাকে তবে তা that's খেলা শেষ. দুর্নীতিগ্রস্থ ডেটা থাকা হত্যাকাণ্ড blow


শুধু ডাটাবেস? আমি অনেকগুলি ক্ষেত্রেই ভাবতে পারি যেখানে ডেটা যুক্ত থাকলেও একাধিক স্তরে (যৌক্তিক বা শারীরিক) ডেটা যুক্ত থাকা সত্ত্বেও ডেটা যুক্ত থাকা উচিত data কখনও কখনও একক উত্স কোড থাকা এবং মোতায়েন করা ডিএল এর "সদৃশ" হ্রাস করা সম্ভব।
মাইকে 30
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.