বিভিন্ন পণ্য ধরণের জন্য পৃথক টেবিল তৈরি করা বা না?


25

আমি একটি ডেটাবেস ডিজাইনের প্রক্রিয়াধীন এবং আমার প্রাথমিক নকশার সিদ্ধান্ত সম্পর্কে দ্বিতীয় চিন্তাভাবনা করছি ...

পণ্যের ধরণগুলি নিম্নরূপ: মডেল, যন্ত্রাংশ, প্রতিস্থাপন অংশ কিট এবং বিকল্পগুলি।

বিকল্প একটি (প্রথম নকশা): আমি উপরের পণ্য ধরণের জন্য পৃথক সারণী রাখার পরিকল্পনা করেছি। আমি বলব প্রতিটি টেবিলের প্রায় 75% ক্ষেত্র একই হবে।

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

বিকল্প বি: পৃথক সারণী থাকার পরিবর্তে আমি পণ্য নামে একটি সারণী তৈরি করতে পারি যা মডেল, অংশ, প্রতিস্থাপনের অংশ কিট এবং বিকল্পগুলি অন্তর্ভুক্ত করে। মডেল, বিকল্পগুলি ইত্যাদির মধ্যে পার্থক্য রাখতে টাইপ নামে আমার একটি ক্ষেত্র থাকতে পারে I আমি অনুমান করছি যে এটিই "সেরা অভ্যাসগুলি" কার্যকর হবে না ..

অপশন বি ডিবি ডিজাইনের জটিলতা হ্রাস করবে। কোয়েরিগুলির জন্য ডেটা বের করার সময় আমার কাছে টেবিলগুলির একগুচ্ছ রেফারেন্সের বিষয়েও চিন্তা করতে হবে না ...


2
এই পয়েন্টে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি এমন স্প্রেডশিটগুলি তৈরি করুন যা আপনার টেবিল বিন্যাসকে অনুকরণ করে এবং এগুলি ডেটা দিয়ে পূর্ণ করে। এটি বিদ্যমান যে কোনও দুর্বলতা প্রকাশ করবে।
মাইকেল রিলে - এ কেএ গনি

বিদেশী কীগুলি বিভিন্ন পণ্যগুলিতে আলাদা আলাদা টেবিলে থাকলে কীভাবে নির্দেশ করবেন? দয়া করে টেবিলের উত্তরাধিকার সম্পর্কে পড়ুন।
নিল ম্যাকগুইগান

উত্তর:


8

এটি যদি আমার ডিজাইনের সিদ্ধান্ত হয় তবে আমি সম্ভবত একটি 'অপশন সি' (পরিবর্তিত বিকল্প এ) এর সাথে আরও যেতে পারি।

প্রথমত, 'বিকল্প বি' কেন নয়:

একটি জিনিসের জন্য, আমি স্পষ্টতাটি পছন্দ করি যে প্রতিটি পণ্যের নিজস্ব নিজস্ব টেবিল অঙ্গ রয়েছে। প্রকারটি নির্ধারণের জন্য যদি ক্ষেত্রের সাথে এটি সমস্ত বড় টেবিল হয় তবে সম্পর্কটি এতটা পরিষ্কার নয়।

অন্যের জন্য, ইনডেক্সিং কৌশলটি সর্বদা সেই ধরণের ক্ষেত্রকে তালিকাবদ্ধ করা প্রয়োজন। এটি মাত্র ৪ ধরণের, সূচক কার্ডিনালিটি অত্যন্ত কম ( SELECT * FROM product_table WHERE type='X'মূলত যাইহোক একটি সম্পূর্ণ টেবিল স্ক্যান করছে)

বিকল্প সি

  • একটি প্যারেন্ট সারণী তৈরি করুন যা কেবলমাত্র কলামগুলিকে ধারণ করে যা সমস্ত ধরণের ভাগ করে
  • প্রতিটি অতিরিক্ত প্রকারের নিজস্ব স্বতন্ত্র কলামগুলির সাথে এটি নিজস্ব টেবিল হিসাবে তৈরি করুন: প্যারেন্ট টেবিলের একটি লিঙ্ক
  • প্রতিটি 'লিঙ্ক' সারণী তৈরি করুন: পণ্য_অপনশন, মডেল_পশন ইত্যাদি সম্পর্কিত কীগুলির লিঙ্ক সহ।
  • পারস্পরিক লিঙ্কগুলির সাথে তাদের জন্য (MODEL_OPTION, OPTION_MODEL) এগিয়ে যান এবং সেগুলিও তৈরি করুন। এটি যে কেউ তার দিকে তাকিয়ে তার সাথে যোগ দেয় এতে স্বচ্ছতা যুক্ত হবে।

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


5
এখন মাত্র 4 প্রকার রয়েছে, তবে পরে আরও যুক্ত করা গেলে কী হবে? আমি নিশ্চিত যে অ্যামাজনের মূল পণ্য সারণিকে মূলত "বই" বলা হয়েছিল তবে আপনি কি মনে করেন যে এখন তাদের কাছে প্রতিটি পণ্যের ধরণের জন্য আলাদা টেবিল রয়েছে? আমি মনে করি না প্রতিটি ধরণের নিজস্ব নিজস্ব টেবিল থাকা উচিত তবে আপনি প্রতিটি ধরণের কমন থাকতে পারে এমন অতিরিক্ত বৈশিষ্ট্যের জন্য আপনি একটি EAV মডেল ব্যবহার করতে পারেন।
অ্যারন বার্ট্র্যান্ড

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

1
বিকল্প সি: লিঙ্ক টেবিল থাকা কি প্রয়োজনীয়? আমি কল্পনা করব যে পণ্য_অপনশন পিকে পণ্যের সারণির পিকে সাথে মেলে এবং এটি উভয় টেবিলকে সংযুক্ত করার জন্য সমিতি তৈরি করবে।
পরিশোধ করা

Product_option উদাহরণ হিসাবে ব্যবহার করে, স্কিমাটি হবে (আমার মনে): আইডি, productID, বিকল্পআইডি option productIDকরার জন্য একটি এফ কে হবে product.id, এবং optionIDএকটি এফ কে হয় option.id। আমি লিংক টেবিল দ্বারা বোঝাতে চেয়েছিলাম। এবং হ্যাঁ, একক পণ্যকে একাধিক বিকল্পের সাথে লিঙ্ক করার অনুমতি দেওয়ার জন্য এই নকশায় এটি প্রয়োজনীয়।
ডেরেক ডাউনি

ঠিক আছে আমি বুঝতে পারছি. আপনি যা টাইপ করেছেন তা আমি ভুল লিখেছি .. উফ!
পরিশোধ করা

7

আমি আপনাকে "সঠিক" সম্পর্কের মডেল দিয়ে শুরু করার পরামর্শ দিচ্ছি, আপনার বিকল্প এ। যদি সেই মডেলের সাধারণ ব্যবহার আপনাকে কোনও কোনও ক্ষেত্রে অস্বীকৃতির দিকে পরিচালিত করে, তা করতে ভয় পাবেন না।

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

ডাটাবেসের ইন্টারফেসটি যদি ভালভাবে ডিজাইন করা থাকে তবে সিস্টেমের ব্যবহারের ধরণগুলি সম্পর্কে আরও শিখার সাথে সাথে স্কিমাটি অভিযোজন করা থেকে বিরত থাকতে পারে না।


2

খুব অনুরূপ এই শব্দ উপকরণ / একাধিক cardinalities বিল heirarcy যে পল Neilsen বর্ণনা অধ্যায় 17 এর জন্য SQL সার্ভার 2008 বাইবেল

পুরো অধ্যায়টি খুব ভাল পঠিত এবং সুনির্দিষ্ট বিভাগটি যা আপনার বহু থেকে বহুসংখ্যক ইস্যুটিকে সম্বোধন করে 416-419 পৃষ্ঠায় পাওয়া যায়।

বিস্ফোরিত অংশগুলির ধরণের ডেটা ডিজাইনের বিষয়ে এটি আমি সবচেয়ে ভাল আলোচনা ।


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

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

অংশগুলিতে আমার ডিজাইনে "বিকল্প" নেই। আমি বিকল্পটিকে এমন কিছু হিসাবে সংজ্ঞায়িত করি যা কোনও মডেলকে যায় যা এটি বর্ধিত কার্যকারিতা সরবরাহ করে। একটি বিকল্প অংশ গঠিত হয়। একটি মডেলের বিভিন্ন বিকল্প থাকতে পারে। একটি বিকল্প পাশাপাশি বিভিন্ন বিভিন্ন মডেলের উপর ফিট করতে পারে।
payling

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

0

আপনি যদি এমন সম্ভাব্য দৃশ্যের চিত্র চিত্রণ করতে পারেন যেখানে ঘন ঘন প্রশ্ন আসে যা চারটি পণ্যের ধরণের (এবং এটি আমার কাছে সম্ভবত মনে হয়) হয়ে থাকে তবে আপনার বিকল্পটি সেরা।

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


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

যদিও "ডান" সিদ্ধান্তকে প্রভাবিত করে এমন অনেকগুলি কারণ রয়েছে, সেখানে দুটি বিস্তৃত বিষয় বিবেচনা করতে হবে। 1: সামগ্রিক কর্মক্ষমতা প্রয়োজনীয়তা; 2: অভিযোজনযোগ্যতা / জটিলতা / রক্ষণাবেক্ষণযোগ্যতা। এই দু'জনের মধ্যে একজন সম্ভবত অন্যটির চেয়ে কিছুটা গুরুত্বপূর্ণ। আপনার যদি গতির প্রয়োজন হয় তবে অপশন এ এর ​​সাথে সংযুক্ত করে সংকেতীকৃত করুন আপনার নকল হবে; এটা প্রত্যাশিত আপনার যদি নিয়মিত ভিত্তিতে স্কিমাটি নিয়ে বেড়াতে হবে এবং গতি সর্বাধিক গুরুত্বপূর্ণ কারণ নয়, তবে বিকল্প বি। আপনি আপনার অগ্রাধিকারগুলি জেনে "সঠিক" পেয়েছেন, "অন্য কারও সেরা অনুশীলন" মেনে চলেন না।
অ্যালান ম্যাকবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.