প্রতিটি টেবিলের একটি একক-ক্ষেত্র সারোগেট / কৃত্রিম প্রাথমিক কী থাকা উচিত?


33

আমি সাধারণভাবে সারোগেট / কৃত্রিম কীগুলির একটি সুবিধা বুঝতে পারি - এগুলি পরিবর্তন হয় না এবং এটি খুব সুবিধাজনক হতে পারে। এগুলি সত্যই সত্য যেগুলি একক বা একাধিক ক্ষেত্র - যতক্ষণ না তারা 'কৃত্রিম'।

যাইহোক, কখনও কখনও এটি প্রতিটি টেবিলের প্রাথমিক কী হিসাবে একটি স্বয়ং-বর্ধক পূর্ণসংখ্যার ক্ষেত্র থাকা নীতি হিসাবে বিবেচিত হয়। এই জাতীয় সিঙ্গল-ফিল্ড কী থাকা কি সর্বদা সেরা ধারণা এবং কেন (বা কেন নয়)?

পরিষ্কার করা, এই প্রশ্নের বনাম প্রাকৃতিক কৃত্রিম সম্পর্কে নয় - কিন্তু কিনা সব কৃত্রিম কী হওয়া উচিত একক ক্ষেত্র


উত্তর:


28

আমি না বলতে যাচ্ছি , সবসময় নয়, বেশিরভাগ সময় হ্যাঁ।

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

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

কিছু পরিস্থিতি রয়েছে যেখানে পুরানো-বিশ্বস্ত একঘেয়েভাবে বাড়ছে পূর্ণসংখ্যার সারোগেট কী আদর্শ নয়। আপনার কাছে এমন চাবি থাকতে পারে যা আলফানিউমেরিক সারোগেটস। এর মধ্যে অন্তর্ভুক্ত থাকতে পারে:

  • পরিস্থিতি যেখানে আপনাকে একাধিক, স্বাধীন উত্স থেকে ডেটা মার্জ করতে হবে। মূল সংঘর্ষ এড়ানোর জন্য আপনি পরিচয় কীগুলির পরিবর্তে জিইউইডি ব্যবহার করতে পারেন।
  • এমন পরিস্থিতি যেখানে আপনাকে অ-সংখ্যাযুক্ত কী উপস্থাপনা ব্যবহার করতে বাধ্য করা হয়। ধরা যাক আপনার কাছে লাইসেন্স প্লেট ডাটাবেস রয়েছে। আপনার কীটি খাঁটি সংখ্যার পরিবর্তে বর্ণানুক্রমিক মান হতে পারে।
  • এমন পরিস্থিতি যেখানে কিছু বাহ্যিক প্রয়োজনীয়তা আপনাকে আপনার মূল্যের সাথে সংকোচন প্রয়োগ করতে বাধ্য করে। ইন্ট 32 এর জন্য 10 সংখ্যা ব্যবহার না করে আপনি ছয় বেস 36 সংখ্যা ব্যবহার করতে পারেন।

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

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


"সারোগেট কী ব্যবহার করা আপনাকে এই জালে পড়ার হাত থেকে রক্ষা করবে" প্রশ্নটি সার্গেট বনাম প্রাকৃতিক নয়, একক ক্ষেত্র বনাম মাল্টি-ফিল্ড সার্গেট সম্পর্কে।
জ্যাক ডগলাস

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

ইতিহাস থেকে আপনি যেমন দেখতে পাচ্ছেন তেমন আমি প্রশ্নটি পরিবর্তন করি নি, কেবল জোর দিয়েছি যেখানে আমি ভেবেছিলাম যে এটি স্কিম-পাঠকদের সহায়তা করবে
জ্যাক ডগলাস

12

না।

আমি বলতে চাই যে সিঙ্গল-ফিল্ড কীগুলি কমপক্ষে বিদেশী কীগুলির উদ্দেশ্যে , কমপઉન્ડ চাবিগুলির থেকে নিকৃষ্ট হয় তবে অবশ্যই এমন কিছু ঘটনা ঘটে । এর অর্থ এটি নয় যে আপনি যদি চান তবে আপনার এককক্ষেত্রের সারোগেট কীও থাকা উচিত নয়, তবে আমি ব্যক্তিগতভাবে সেই চাবিটি পছন্দ করি যা প্রায়শই একটি বিদেশী চাবি টার্গেট হিসাবে ব্যবহৃত হয় প্রাথমিক কী বলে

আমি নিম্নলিখিত উদাহরণগুলিতে আমার বক্তব্যটি তুলে ধরার চেষ্টা করব, এতে:

  • brand গাড়ি মার্ক, যেমন ফোর্ড, টয়োটা ইত্যাদি
  • dealer একটি শারীরিক ডিলারশিপ, একটি ব্র্যান্ডের সাথে আবদ্ধ (যেমন একটি ফোর্ড ডিলারশিপ কেবল ফোর্ড বিক্রি করে)
  • model গাড়ির ধরণ যেমন ফোর্ড ফোকাস, ফোর্ড ফিয়েস্টা ইত্যাদি
  • stock প্রতিটি ডিলারশিপের জন্য বর্তমান ফোরকোর্ট গাড়ি গণনা

যদি আমরা নিম্নলিখিত dealerএবং এর জন্য একটি একক-ক্ষেত্র সারোগেট কী তৈরি করি model:

create table brand( brand_id integer primary key );

create table dealer( dealer_id integer primary key, 
                     brand_id integer references brand )

create table model( model_id integer primary key, 
                    brand_id integer references brand )

create table stock( model_id integer references model, 
                    dealer_id integer references dealer, 
                    quantity integer,
                      primary key(model_id, dealer_id) )

তারপরে এটি একটি সারি সন্নিবেশ করা সম্ভব stockযা কোনও ফোর্ডকে dealer"টয়োটা" মডেলের সাথে সংযুক্ত করে। কেবল যুক্ত brand_id references brandকরার stockফলে সমস্যা আরও খারাপ হয়। অন্যদিকে, যদি আমরা নীচে প্রাথমিক কী এর অংশ হিসাবে বিদেশী কী রাখি:

create table brand( brand_id integer primary key );

create table dealer( brand_id integer references brand, 
                     dealer_id integer, 
                       primary key(brand_id, dealer_id) )

create table model( brand_id integer references brand, 
                    model_id integer, 
                      primary key(brand_id, model_id) )

create table stock( brand_id integer, 
                    model_id integer, 
                    dealer_id integer, 
                    quantity integer,
                      primary key(brand_id, model_id, dealer_id),
                      foreign key(brand_id, model_id) references model,
                      foreign key(brand_id, dealer_id) references dealer )

এখন এই নিয়মটি যে "ফোর্ড" ব্যবসায়ীরা কেবল "ফোর্ড" গাড়িগুলি স্টক করতে পারে তা মডেল দ্বারা প্রাকৃতিকভাবে প্রয়োগ করা হয়।

নোট করুন যে 'সম্মিলিত কী' উদাহরণে dealer_idপছন্দ অনুসারে অনন্য হতে পারে বা নাও হতে পারে। এটি অনন্য হওয়ার প্রয়োজন নেই (অর্থাত্‍ একটি বিকল্প কী), তবে এটি এতটা তৈরি করে খুব সামান্যই হারাতে পারে (সম্ভবত কিছুটা স্টোরেজ স্পেস) এবং এটি খুব সহজ হতে পারে তাই আমি সাধারণত এটি সেট আপ করি, যেমন:

create table dealer( brand_id integer references brand, 
                     dealer_id serial unique, 
                       primary key(brand_id, dealer_id) )

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

1
সুতরাং "আপনার ব্যবসায়ের বিধি পরিবর্তন হতে পারে"। এটি যে কোনও ব্যবসায়ের নিয়মের ক্ষেত্রে সত্য এবং এটি সর্বদা পুনরায় মডেল করা শক্ত হতে চলেছে। আমি সাধারণত পেতে জানান কি ব্যবসা নিয়ম আছে - আমি নিজেকে জন্য তাদের সিদ্ধান্ত নিতে হবে না।
জ্যাক ডগলাস

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

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

4
"স্কিমার পরিবর্তনগুলি কোড পরিবর্তনের চেয়ে প্রায় সবসময়ই শক্ত" আইএমও এর বিপরীতে সত্য। প্রকৃতপক্ষে আপনি যা বলেছিলেন তার সাথে আমি কার্যত সকলের সাথে একমত নই তবে আমার সন্দেহ যে আপনার সাথে টস নিয়ে বিতর্ক করার কোনও বিন্দু রয়েছে, তাই আমি এটি এ ছেড়ে দেব।
জ্যাক ডগলাস

12

"এটা নির্ভর করে"

হ্যাঁ: প্রাকৃতিক কীটি প্রশস্ত এবং অ-সংখ্যাসূচক হলে সারোগেট আইডেন্টিটি / আউটোনডার ক্ষেত্রগুলি ভাল। দ্রষ্টব্য: এটি "পিকে" এবং ক্লাস্টারড ইনডেক্সের সংমিশ্রণ অনুমান করে যা এসকিউএল সার্ভার এবং সিবাসে ডিফল্টরূপে ঘটে etc

না: 2 পিতামাতার কীগুলি যথেষ্ট হলে অনেকগুলি / অনেকগুলি সারণী। অথবা যখন প্রাকৃতিক কীটি সংক্ষিপ্ত এবং স্থির দৈর্ঘ্যের যেমন মুদ্রা কোড

অবশ্যই, একটি ব্রেনিডেড ওআরএম (পড়ুন: (এন) হাইবারনেট) এই নিয়মগুলিকে ট্রাম্প করতে পারে ...

সম্পাদনা করুন: আবার প্রশ্ন পড়া

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

যদি কোনও টেবিলে একটি সারোগেট (পরিচয় ইত্যাদি) কী থাকে তবে এটির জন্য একাধিক কলাম হওয়া দরকার নেই need

আপনার কাছে একটি সুপার কী থাকতে পারে যাতে সারোগেট অন্তর্ভুক্ত রয়েছে তবে এটি অন্যান্য নিয়মগুলি প্রয়োগ করতে পারে (যেমন উপ-প্রকার )

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