কী কী স্পষ্ট করে দেওয়া উচিত?


15

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


আপনি কী বোঝাতে চাইছেন যে আপনার কাছে যদি একটি অনন্য কী আছে, তবে কেন একটি প্রাথমিক সমস্যা আছে?
ভেরেস

1
শুধু এগুলি কেন ঘোষিত হয়? এটি খুব সহায়ক বলে মনে হচ্ছে, তবে কার্যত এমন একটি ডাটাবেস থাকা কি আসলেই প্রয়োজনীয়?
dsaxton

1
আপনার ডাটাবেসের কাজ করার জন্য এগুলি প্রয়োজন হয় না তবে আপনার ডেটা "কাজ" করার জন্য অর্থাত্ সুসংগত হতে হবে কারণ এটি ঠিক আপনার ডাটাবেস সার্ভারকে তথ্যটি ধারাবাহিক রাখতে বলছেন ।
অ্যান্ড্রি এম

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

উত্তর:


32

আপনি স্পষ্টতই পরামর্শ দিচ্ছেন যে CONSTRAINTকোনও ডাটাবেসে সেই অ্যাপ্লিকেশন দ্বারা প্রয়োগ করা উচিত যা / যেটি ডাটাবেস অ্যাক্সেস করে?

আছে অনেক কারণে এই একটি খারাপ (খারাপ, খারাপ ...) ধারণা।

1) আপনি যদি কোনও "রোল-আপনার নিজের" প্রতিবন্ধকতা "ইঞ্জিন" তৈরি করছেন (যেমন আপনার অ্যাপ্লিকেশন কোডের মধ্যে), তবে আপনি কেবল ওরাকল / এসকিউএল সার্ভার / মাইএসকিউএল / পোস্টগ্রিসকিউএল / <কে ... যা ব্যয় করেছেন তা অনুকরণ করছেন ... বছর লেখার। আক্ষরিক মিলিয়ন মিলিয়ন ব্যবহারকারী তাদের বছরগুলিতে তাদের নিয়ন্ত্রণ কোড পরীক্ষা করেছে ।

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

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

জোনাথন লুইস ( ওরাকল অপটিমাইজারের মৌলিক বিষয়গুলিতে তিনি 550 পৃষ্ঠার একটি বই লিখেছিলেন ) কোনও হিসাবে নেই। অন্য একটি বইতে তাঁর ডিজাইন বিপর্যয়ের 2 (" ওক টেবিলের গল্পগুলি " - ওক টেবিলটি ওরাকল বিশেষজ্ঞদের একটি দল)

  1. ওরাকলের সীমাবদ্ধতা যাচাই করার ক্ষমতাগুলির পরিবর্তে আমরা অ্যাপ্লিকেশন পর্যায়ে ডেটা অখণ্ডতা যাচাই করব।

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

অ্যাপ্লিকেশন স্তরে ডেটা কনট্রন্টগুলি প্রয়োগ করার জন্য এখানে , এখানে এবং এখানে পাগলের কমতি নেই বলে আপনি আরও পড়তে পারেন ।

আপনার প্রশ্নের বিশেষভাবে উত্তর দিতে:

শুধু এগুলি কেন ঘোষিত হয়? এটি খুব সহায়ক বলে মনে হচ্ছে, তবে এটি কার্যকারী এমন একটি ডাটাবেস থাকা দরকার

কারণ KEYগুলি (হয় PRIMARY, FOREIGN, UNIQUEবা শুধু সাধারণ INDEXস্প্যানিশ ভাষায়) ঘোষিত হয় যখন এটা যে, কঠোরভাবে না তা না হয়, প্রয়োজনীয় একটি ডাটাবেস তাদের আছে জন্য এটি জন্য কাজ একেবারে প্রয়োজনে তাদের ফাংশন জন্য ঘোষিত হওয়ার জন্য ভাল


1
আপনার উত্তরের জন্য ধন্যবাদ. এটি সম্ভবত পুরোপুরি বুঝতে আমার আরও শিখতে হবে। (আমি আসলে কোনও দলের অন্তর্ভুক্ত নই, আমি কৌতুহলের বাইরে কেবল ডেটাবেসগুলি সম্পর্কে শিখছি))
ডিএসএক্সটন

2
কয়েকটি বই পড়ুন (তারিখ, গার্সিয়া-মোলিনা ...) এবং আপনার যদি নির্দিষ্ট প্রশ্ন থাকে (অতিরিক্ত প্রশ্নযুক্ত যে প্রশ্নগুলি এখানে বিষয়বস্তু হিসাবে বিবেচিত হয়) থাকে তবে আমাদের কাছে ফিরে আসুন । পিএস ফোরামে স্বাগতম :-)
ভ্যারেস

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

10

আপনি যখন একটি ডাটাবেসে একটি কী তৈরি করেন তখন ডিবিএমএস ইঞ্জিন মূল বৈশিষ্ট্যের উপর একটি স্বতন্ত্রতা বাধা প্রয়োগ করে। এটি কমপক্ষে তিনটি সম্পর্কিত উদ্দেশ্যে পরিবেশন করে:

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

8

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

প্রাথমিক কীটি অনুশীলনে বিশেষভাবে কার্যকর ধারণা হতে পারে।

আপনি কীটি প্রয়োগ করেন বা না করুন (আপনার সম্ভবত হওয়া উচিত) ডকুমেন্টেশনটি তার নিজের পক্ষে মূল্যবান।


1
ডাটাবেস চিত্র! আমি যে সফ্টওয়্যারটির সাথে পরিচিত নই তার সম্পর্কে অর্থপূর্ণ কিছু বলতে যখন আমি সর্বদা করি তখন তা দেখতে হয় এটি কোনও রিলেশনাল ডাটাবেস ব্যবহার করে কিনা, এবং যদি তা করে থাকে তবে একটি ডাটাবেস ডায়াগ্রাম তৈরি করার চেষ্টা করুন। এটি আমাকে অ্যাপ্লিকেশনটির সাথে সম্পর্কিত তথ্যগুলির একটি দুর্দান্ত ধারণা দেবে। দুর্ভাগ্যক্রমে, 90% ডাটাবেসগুলি আমি দেখেছি বিদেশী কীগুলি ঘোষণা করে না, তাই ডায়াগ্রামগুলি কেবল টেবিলের সেট sets অন্তর্নিহিত অ্যাপ্লিকেশন-স্তরের বিদেশী কীগুলি হ্রাস করার জন্য অনুমান করা এবং টুইট করা দরকার।
রিইনারপোস্ট

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

@ রিনিয়ারপোস্ট - একটি বৃহত ইউরোপীয় দেশের পুরো রেল অবকাঠামো (বৃহত্তর - কোটি কোটি উইজেটগুলি ভাবেন) এর জন্য সফ্টওয়্যার সরবরাহকারী একটি সংস্থার জন্য পরামর্শ নেওয়া হয়েছিল এবং আমি বলেছিলাম, "হুম, আমি একটি FOREIGN KEYসংজ্ঞা পেতে কেবল সংজ্ঞাটি পরীক্ষা করব সিস্টেমের জন্য অনুভব "। আমার জিজ্ঞাসা জিপ ফিরে !!! নিশ্চিত হয়ে যে আমার এসকিউএল অবশ্যই ভুল হয়েছে, আমি এটি সিনিয়র প্রোগ্রামারগুলির একজনের কাছে উল্লেখ করেছি। সঙ্গে গর্ব (কম কোন) তিনি ঘোষণা (যেন তিনি নতুন জন্মগ্রহণকারী পুত্র উপস্থাপন হয়) সিস্টেম কোনো FKs ছিল না কারণ "সমস্ত অনুসন্ধান উপর PRIMARY KEYs" এর - (অপ্রাসঙ্গিক)। <দোহ ...> লা লা হোমার সিম্পসন!
ভেরেস

5

আপনার অভ্যন্তর-অ্যাপ্লিকেশন-কোডের পরিবর্তে আপনার চুক্তিগুলি ব্যবহার করার আরও একটি কারণ:

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

পিএস: অবশ্যই আপনি ট্রিগার তৈরি করতে পারতেন তবে এগুলি সাধারণত ভয়ানক ধীর হয় (চুক্তির তুলনায়) compared

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