আমি আপনার সাথে আমার ডিজাইন ভাগ করতে যাচ্ছি এবং এটি আপনার উভয় ডিজাইনের থেকে পৃথক যে এটিতে প্রতিটি সত্তা টাইপের জন্য একটি টেবিলের প্রয়োজন। আমি যে কোনও ডাটাবেস ডিজাইনের বর্ণনা দেওয়ার সর্বোত্তম উপায়টি ইআরডি এর মাধ্যমে পেয়েছি, এখানে আমার:
এই উদাহরণে আমাদের কর্মচারী নামে একটি সত্তা রয়েছে । ব্যবহারকারী সারণীটি আপনার ব্যবহারকারীর রেকর্ড এবং সত্তা এবং অস্তিত্ব_প্রেমীকরণ এমন দুটি টেবিল যা আপনার সিস্টেমে থাকা সমস্ত সত্তার প্রকারের জন্য পুনর্বিবেচনার ইতিহাস রাখে। এই নকশাটি কীভাবে কাজ করে তা এখানে:
এর দুটি ক্ষেত্র ENTITY_ID এবং REVISION_ID
আপনার সিস্টেমের প্রতিটি সত্তার নিজস্ব একটি স্বতন্ত্র সত্তা আইডি থাকবে। আপনার সত্তা হয়ত পুনর্বিবেচনার মধ্য দিয়ে যেতে পারে তবে এর সত্তা_আইডি একই থাকবে। আপনার এই সত্তা আইডিটি আপনাকে কর্মী সারণীতে রাখতে হবে (বিদেশী কী হিসাবে)। সত্তার টেবিলে আপনার সত্তার ধরণটিও সংরক্ষণ করা উচিত (যেমন 'কর্মচারী')। এখন যেমন রেভিশন_আইডি, যেমন এর নামটি দেখায় এটি আপনার সত্তা সংশোধনগুলির উপর নজর রাখে। আমি এর জন্য সবচেয়ে ভাল উপায়টি খুঁজে পেয়েছি কর্মচারী_আইডিটিকে আপনার সংশোধন_বিধি হিসাবে ব্যবহার করা । এর অর্থ আপনার কাছে বিভিন্ন ধরণের সত্তার জন্য নকল পুনর্বিবেচনার আইডি থাকবে তবে এটি আমার কাছে কোনও আচরণ নয় (আমি আপনার মামলার বিষয়ে নিশ্চিত নই)। একমাত্র গুরুত্বপূর্ণ নোটটি হ'ল সত্তা_আইডি এবং পুনর্বিবেচনা_আইডির সংমিশ্রণটি অনন্য হওয়া উচিত।
সত্তা_প্রেমীকরণ টেবিলের মধ্যে একটি রাষ্ট্রের ক্ষেত্রও রয়েছে যা পুনর্বিবেচনার অবস্থাটি নির্দেশ করে। এটি তিনটি রাজ্যের এক হতে পারে latest
, obsolete
বা deleted
(পুনর্বিবেচনা তারিখ উপর নির্ভর না আপনি একটি মহান চুক্তি আপনার প্রশ্ন অনুমোদন করতে সাহায্য করে)।
রিভিশন_আইডির একটি সর্বশেষ নোট, আমি কোনও বিদেশী কী সংযোগকারী কর্মচারী_আইডিকে সংশোধন_আইডিতে সংযুক্ত করিনি কারণ আমরা ভবিষ্যতে যুক্ত হতে পারে এমন প্রতিটি সত্তা টাইপের জন্য ইন্টিটি_রিভিশন টেবিলটি পরিবর্তন করতে চাই না।
সন্নিবেশ
প্রতিটি কর্মচারীর জন্য যা আপনি ডাটাবেসে সন্নিবেশ করতে চান, আপনি সত্তা এবং সত্তা_প্রেমিতে একটি রেকর্ড যুক্ত করবেন । এই শেষ দুটি রেকর্ড আপনাকে কখন এবং কখন একটি ডেটাবেসে একটি রেকর্ড sertedোকানো হয়েছে তা ট্র্যাক রাখতে সহায়তা করবে।
হালনাগাদ
বিদ্যমান কর্মচারী রেকর্ডের জন্য প্রতিটি আপডেট দুটি সন্নিবেশ হিসাবে প্রয়োগ করা হবে, একটি কর্মচারী টেবিলে এবং একটি সত্তা_প্রেমীকরণে। দ্বিতীয়টি আপনাকে কখন এবং কবে রেকর্ড আপডেট হয়েছে তা জানতে সহায়তা করবে।
মুছে যাওয়া
কোনও কর্মচারীকে মুছে ফেলার জন্য, সারণি_পরিষ্কারে একটি রেকর্ড সন্নিবেশ করানো হয়েছে উল্লেখ করে এবং সম্পন্ন করা হয়েছে।
আপনি এই নকশায় দেখতে পাচ্ছেন যে কোনও ডেটা ডাটাবেস থেকে কোনও দিনই পরিবর্তন বা সরানো হয় না এবং আরও গুরুত্বপূর্ণভাবে প্রতিটি সত্তার ধরণের জন্য কেবল একটি টেবিলের প্রয়োজন হয়। ব্যক্তিগতভাবে আমি এই নকশাটি সত্যই নমনীয় এবং সহজেই কাজ করতে পারি। তবে আমি আপনার সম্পর্কে নিশ্চিত নই কারণ আপনার চাহিদা অন্যরকম হতে পারে।
[হালনাগাদ]
নতুন মাইএসকিউএল সংস্করণগুলিতে সমর্থিত পার্টিশন থাকার পরে, আমি বিশ্বাস করি যে আমার নকশাটিও সেরা পারফরম্যান্সগুলির সাথে আসে। একটি ভাগ করতে entity
ব্যবহার টেবিল type
যখন পার্টিশন ক্ষেত্র entity_revision
তার ব্যবহার state
ক্ষেত্র। এটি নকশাটিকে SELECT
সহজ এবং পরিষ্কার রাখার সময় প্রশ্নগুলিকে আরও বেশি বাড়িয়ে তুলবে ।