আপনি কীভাবে একটি ডাটাবেসে উত্তরাধিকার উপস্থাপন করতে পারেন?


236

আমি কীভাবে একটি এসকিউএল সার্ভার ডাটাবেসে একটি জটিল কাঠামোকে উপস্থাপন করব সে সম্পর্কে ভাবছি।

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

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

আমি দেখতে পাচ্ছি যে দুটি প্রধান পছন্দ আছে:

  1. সমস্ত সম্ভাব্য প্রকরণের জন্য প্রয়োজনীয় সমস্ত ক্ষেত্র সমেত একটি নীতি সারণী, তারপরে একটি বিভাগ টেবিল তৈরি করুন, যার বেশিরভাগটি শূন্য হবে।

  2. নীতি সারণী এবং অসংখ্য বিভাগ সারণী তৈরি করুন, প্রতিটি ধরণের কভারের জন্য একটি।

এই উভয় বিকল্পই অসন্তুষ্টিজনক বলে মনে হচ্ছে, বিশেষত যেহেতু সমস্ত বিভাগে কোয়েরি লিখতে হবে, এতে অসংখ্য যোগদান বা অসংখ্য নাল-চেক জড়িত।

এই দৃশ্যের জন্য সেরা অনুশীলন কি?


উত্তর:


430

@Bill Karwin তার তিন উত্তরাধিকার মডেল বর্ণনা করে এসকিউএল Antipatterns বই, যখন SQL সমাধান প্রস্তাব সত্তা-বৈশিষ্ট্য-মূল্য antipattern। এটি একটি সংক্ষিপ্ত বিবরণ:

একক টেবিল উত্তরাধিকার (ওরফ টেবিল প্রতি অনুক্রমের উত্তরাধিকার):

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

+------+---------------------+----------+----------------+------------------+
| id   | date_issued         | type     | vehicle_reg_no | property_address |
+------+---------------------+----------+----------------+------------------+
|    1 | 2010-08-20 12:00:00 | MOTOR    | 01-A-04004     | NULL             |
|    2 | 2010-08-20 13:00:00 | MOTOR    | 02-B-01010     | NULL             |
|    3 | 2010-08-20 14:00:00 | PROPERTY | NULL           | Oxford Street    |
|    4 | 2010-08-20 15:00:00 | MOTOR    | 03-C-02020     | NULL             |
+------+---------------------+----------+----------------+------------------+

\------ COMMON FIELDS -------/          \----- SUBTYPE SPECIFIC FIELDS -----/

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

  • যখন নতুন সাব টাইপ যুক্ত করার কথা আসে তখন আপনাকে এই নতুন অবজেক্টগুলিকে বর্ণনা করে এমন বৈশিষ্ট্যগুলি সমন্বিত করতে টেবিলটি পরিবর্তন করতে হবে। আপনার অনেকগুলি সাব টাইপ থাকে বা আপনি যদি নিয়মিত ভিত্তিতে সাব টাইপ যুক্ত করার পরিকল্পনা করেন তবে এটি দ্রুত সমস্যাযুক্ত হয়ে উঠতে পারে।

  • ডাটাবেসটি প্রয়োগ করতে সক্ষম হবে না কোন বৈশিষ্ট্যগুলি প্রয়োগ হয় এবং কোনটি প্রয়োগ হয় না, কারণ কোন উপ-প্রকারের সাথে সম্পর্কিত কোন বৈশিষ্ট্য নির্ধারণ করার জন্য কোনও মেটাডেটা নেই।

  • NOT NULLবাধ্যতামূলক হওয়া উচিত এমন একটি উপ-টাইপের বৈশিষ্ট্যগুলিও আপনি প্রয়োগ করতে পারবেন না । আপনাকে আপনার অ্যাপ্লিকেশনটিতে এটি পরিচালনা করতে হবে, যা সাধারণভাবে আদর্শ নয়।

কংক্রিট টেবিল উত্তরাধিকার:

উত্তরাধিকার মোকাবেলার জন্য আরেকটি পদ্ধতি হ'ল প্রতিটি উপ-টাইপের জন্য একটি নতুন টেবিল তৈরি করা, প্রতিটি টেবিলের সমস্ত সাধারণ বৈশিষ্ট্য পুনরাবৃত্তি করে। উদাহরণ স্বরূপ:

--// Table: policies_motor
+------+---------------------+----------------+
| id   | date_issued         | vehicle_reg_no |
+------+---------------------+----------------+
|    1 | 2010-08-20 12:00:00 | 01-A-04004     |
|    2 | 2010-08-20 13:00:00 | 02-B-01010     |
|    3 | 2010-08-20 15:00:00 | 03-C-02020     |
+------+---------------------+----------------+
                          
--// Table: policies_property    
+------+---------------------+------------------+
| id   | date_issued         | property_address |
+------+---------------------+------------------+
|    1 | 2010-08-20 14:00:00 | Oxford Street    |   
+------+---------------------+------------------+

এই নকশাটি মূলত একক টেবিল পদ্ধতির জন্য চিহ্নিত সমস্যাগুলি সমাধান করবে:

  • বাধ্যতামূলক বৈশিষ্ট্যগুলি এখন প্রয়োগ করা যেতে পারে NOT NULL

  • একটি নতুন সাব টাইপ যুক্ত করতে একটি বিদ্যমান কলামে কলাম যুক্ত করার পরিবর্তে একটি নতুন টেবিল যুক্ত করা দরকার।

  • কোনও নির্দিষ্ট উপ-টাইপের জন্য যেমন vehicle_reg_noকোনও সম্পত্তি নীতিমালার ক্ষেত্রের জন্য অনুপযুক্ত বৈশিষ্ট্য সেট করা আছে এমন কোনও ঝুঁকিও নেই ।

  • typeএকক টেবিল পদ্ধতির মতো অ্যাট্রিবিউটের প্রয়োজন নেই । টাইপটি এখন মেটাডেটা দ্বারা সংজ্ঞায়িত করা হয়েছে: টেবিলের নাম।

তবে এই মডেলটি কয়েকটি অসুবিধা নিয়ে আসে:

  • সাধারণ বৈশিষ্ট্যগুলি উপ-টাইপ নির্দিষ্ট বৈশিষ্ট্যগুলির সাথে মিশ্রিত হয় এবং তাদের সনাক্ত করার কোনও সহজ উপায় নেই। ডাটাবেসটিও জানবে না।

  • সারণীগুলি সংজ্ঞায়িত করার সময়, আপনাকে প্রতিটি উপ-টাইপ সারণির জন্য সাধারণ বৈশিষ্ট্যগুলি পুনরাবৃত্তি করতে হবে। এটি অবশ্যই DRY নয় ।

  • সাব-টাইপ নির্বিশেষে সমস্ত নীতি অনুসন্ধান করা কঠিন হয়ে পড়ে এবং UNIONএর জন্য একগুচ্ছ এস।

প্রকার নির্বিশেষে আপনাকে সমস্ত নীতি সম্পর্কে জিজ্ঞাসা করতে হবে:

SELECT     date_issued, other_common_fields, 'MOTOR' AS type
FROM       policies_motor
UNION ALL
SELECT     date_issued, other_common_fields, 'PROPERTY' AS type
FROM       policies_property;

নোট করে কীভাবে নতুন সাব টাইপ যুক্ত করতে UNION ALLপ্রতিটি উপ টাইপের জন্য অতিরিক্ত দিয়ে উপরের ক্যোয়ারীটি সংশোধন করা দরকার । যদি এই অপারেশনটি ভুলে যায় তবে এটি সহজেই আপনার অ্যাপ্লিকেশনে বাগগুলি নিয়ে যেতে পারে।

ক্লাস টেবিল উত্তরাধিকার (ওরফে টেবিল প্রতি টাইপ উত্তরাধিকার):

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

CREATE TABLE policies (
   policy_id          int,
   date_issued        datetime,

   -- // other common attributes ...
);

CREATE TABLE policy_motor (
    policy_id         int,
    vehicle_reg_no    varchar(20),

   -- // other attributes specific to motor insurance ...

   FOREIGN KEY (policy_id) REFERENCES policies (policy_id)
);

CREATE TABLE policy_property (
    policy_id         int,
    property_address  varchar(20),

   -- // other attributes specific to property insurance ...

   FOREIGN KEY (policy_id) REFERENCES policies (policy_id)
);

এই সমাধানটি অন্য দুটি ডিজাইনে চিহ্নিত সমস্যাগুলি সমাধান করে:

  • বাধ্যতামূলক বৈশিষ্ট্য প্রয়োগ করা যেতে পারে NOT NULL

  • একটি নতুন সাব টাইপ যুক্ত করতে একটি বিদ্যমান কলামে কলাম যুক্ত করার পরিবর্তে একটি নতুন টেবিল যুক্ত করা দরকার।

  • কোনও বিশেষ উপপ্রকারের জন্য অনুপযুক্ত বৈশিষ্ট্য সেট করা হওয়ার ঝুঁকি নেই।

  • গুণকের প্রয়োজন নেই type

  • এখন সাধারণ বৈশিষ্ট্যগুলি সাব-টাইপ নির্দিষ্ট বৈশিষ্ট্যগুলির সাথে আর মিশ্রিত হয় না।

  • আমরা শেষ পর্যন্ত DRY থাকতে পারি। টেবিলগুলি তৈরি করার সময় প্রতিটি উপ-টাইপ টেবিলের জন্য সাধারণ বৈশিষ্ট্যগুলি পুনরাবৃত্তি করার দরকার নেই।

  • idনীতিগুলির জন্য একটি অটো ইনক্রিমেন্টিং পরিচালনা করা সহজ হয়ে যায়, কারণ এটি প্রতিটি উপ-টাইপ টেবিলের পরিবর্তে স্বতন্ত্রভাবে উত্পাদনের পরিবর্তে বেস টেবিল দ্বারা পরিচালনা করা যায়।

  • সাব-টাইপ নির্বিশেষে সমস্ত নীতি অনুসন্ধান করা এখন খুব সহজ হয়ে যায়: UNIONদরকার নেই - কেবল একটি SELECT * FROM policies

আমি ক্লাস টেবিল পদ্ধতির বেশিরভাগ পরিস্থিতিতে সবচেয়ে উপযুক্ত হিসাবে বিবেচনা করি।


এই তিনটি মডেলের নাম এসেছে মার্টিন ফাউলারের বই প্যাটার্নস অফ এন্টারপ্রাইজ অ্যাপ্লিকেশন আর্কিটেকচার থেকে


97
আমি এই নকশাটিও ব্যবহার করছি, তবে আপনি অসুবিধাগুলির উল্লেখ করবেন না। বিশেষত: 1) আপনি বলেন যে আপনার ধরণের প্রয়োজন নেই; সত্য তবে আপনি কোনও সারির প্রকৃত প্রকারটি সনাক্ত করতে পারবেন না যদি না আপনি কোনও মিল খুঁজে পাওয়ার জন্য সমস্ত সাব টাইপ টেবিলটি না দেখেন। ২) মাস্টার টেবিল এবং সাব টাইপ টেবিলগুলিকে সিঙ্কে রাখা শক্ত (কোনও উদাহরণ সুনির্দিষ্ট টপকে সারণি সরিয়ে ফেলতে পারে এবং মাস্টার সারণীতে নয়)। 3) প্রতিটি মাস্টার সারির জন্য আপনার একাধিক সাব টাইপ থাকতে পারে। আমি প্রায় 1 টি কাজ করতে ট্রিগার ব্যবহার করি তবে 2 এবং 3 খুব কঠিন সমস্যা। প্রকৃতপক্ষে 3 কোনও সমস্যা নয় যদি আপনি রচনা মডেল করেন তবে এটি কঠোর উত্তরাধিকারের জন্য।

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

18
@ টিবিও, প্রায় 3 পয়েন্ট সম্পর্কে, আপনি এখানে বর্ণিত পদ্ধতিটি ব্যবহার করতে পারেন: sqlteam.com/article/… , মডেলিংয়ের এক থেকে কোনও সীমাবদ্ধতা বিভাগটি দেখুন।
অ্যান্ড্রু

4
@ ড্যানিয়েলভ্যাসালো প্রথমত অত্যাশ্চর্য উত্তরের জন্য ধন্যবাদ, একজন ব্যক্তির যদি পলিসি থাকে তবে সন্দেহ হয় 1 তার নীতি_মোটার বা নীতি_পোষকতা কীভাবে তা জানতে হবে? একটি উপায় হ'ল নীতি সন্ধান করা সমস্ত সাব টেবিলগুলিতে তবে আমার ধারণা এটি খারাপ উপায় এটি নয়, সঠিক পদ্ধতির কী হওয়া উচিত?
থমাসবেকার

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

14

তৃতীয় বিকল্পটি হ'ল "পলিসি" টেবিল তৈরি করা, তারপরে একটি "সেকশনস মেইন" টেবিল যা বিভাগগুলির ধরণের জুড়ে প্রচলিত ক্ষেত্রগুলিকে সংরক্ষণ করে। তারপরে প্রতিটি ধরণের বিভাগের জন্য অন্যান্য সারণী তৈরি করুন যার মধ্যে কেবল ক্ষেত্রগুলি সাধারণ নেই।

কোনটি সবচেয়ে ভাল তা নির্ভর করে আপনার কতগুলি ক্ষেত্র রয়েছে এবং কীভাবে আপনি আপনার এসকিউএল লিখতে চান তার উপর নির্ভর করে depends তারা সব কাজ করবে। আপনার যদি মাত্র কয়েকটি ক্ষেত্র থাকে তবে আমি সম্ভবত # 1 দিয়ে যাব। "প্রচুর" ক্ষেত্রের সাথে আমি # 2 বা # 3 এর দিকে ঝুঁকতে চাই।


+1: তৃতীয় বিকল্পটি উত্তরাধিকারের মডেলের নিকটতম, এবং সর্বাধিক
সাধারণীকৃত

আপনার বিকল্প # 3 সত্যিই ঠিক আমি বিকল্প 2 2 দ্বারা বোঝাতে চাইছি। অনেকগুলি ক্ষেত্র রয়েছে এবং কিছু বিভাগে শিশু সত্তাও থাকতে পারে।
স্টিভ জোন্স

9

সরবরাহিত তথ্যের সাথে, আমি নিম্নলিখিতটি ডাটাবেসটি মডেল করব:

নীতি

  • POLICY_ID (প্রাথমিক কী)

দায়

  • LIABILITY_ID (প্রাথমিক কী)
  • POLICY_ID (বিদেশী কী)

বৈশিষ্ট্য

  • PROPERTY_ID (প্রাথমিক কী)
  • POLICY_ID (বিদেশী কী)

... এবং তাই, কারণ আমি নীতিমালা প্রতিটি বিভাগের সাথে যুক্ত বিভিন্ন গুণাবলী থাকতে পারে আশা করি। অন্যথায়, একটি একক SECTIONSটেবিল থাকতে পারে এবং এটি ছাড়াও policy_id, সেখানে একটি section_type_code...

যে কোনও উপায়ে, এটি আপনাকে নীতি প্রতি perচ্ছিক বিভাগগুলিকে সমর্থন করার অনুমতি দেবে ...

আপনি এই পদ্ধতির বিষয়ে কী অসন্তুষ্ট হন তা আমি বুঝতে পারি না - রেফারেন্সিয়াল অখণ্ডতা বজায় রেখে এবং ডুপ্লিকেট না করে ডেটা সংরক্ষণ করার সময় আপনি এইভাবে ডেটা সঞ্চয় করেন। শব্দটি "নরমালাইজড" ...

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


হ্যাঁ, আমি স্বাভাবিককরণের জিনিসটি পেয়েছি ;-) এই জাতীয় জটিল কাঠামোর জন্য, কিছু বিভাগ সহজ এবং কিছুগুলির নিজস্ব জটিল উপ-কাঠামো রয়েছে, এটি একটি ওআরএম কাজ করবে এমনটি অসম্ভব বলে মনে হচ্ছে, যদিও এটি দুর্দান্ত হবে।
স্টিভ জোনস

6

ড্যানিয়েল ভ্যাসালো সমাধান ছাড়াও, আপনি যদি এসকিউএল সার্ভার 2016+ ব্যবহার করেন তবে এমন আরও একটি সমাধান রয়েছে যা আমি কিছু ক্ষেত্রে যথেষ্ট পরিমাণ পারফরম্যান্স ছাড়াই ব্যবহার করেছি।

আপনি কেবলমাত্র সাধারণ ক্ষেত্র সহ কেবল একটি টেবিল তৈরি করতে পারেন এবং JSON স্ট্রিং সহ একটি একক কলাম যুক্ত করতে পারেন যাতে সমস্ত উপ-টাইপ নির্দিষ্ট ক্ষেত্র রয়েছে।

উত্তরাধিকার পরিচালনার জন্য আমি এই নকশাটি পরীক্ষা করেছি এবং আপেক্ষিক প্রয়োগে আমি যে নমনীয়তাটি ব্যবহার করতে পারি তার জন্য আমি খুব খুশি happy


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

5

এটি করার আর একটি উপায়, INHERITSউপাদানটি ব্যবহার করা । উদাহরণ স্বরূপ:

CREATE TABLE person (
    id int ,
    name varchar(20),
    CONSTRAINT pessoa_pkey PRIMARY KEY (id)
);

CREATE TABLE natural_person (
    social_security_number varchar(11),
    CONSTRAINT pessoaf_pkey PRIMARY KEY (id)
) INHERITS (person);


CREATE TABLE juridical_person (
    tin_number varchar(14),
    CONSTRAINT pessoaj_pkey PRIMARY KEY (id)
) INHERITS (person);

সুতরাং টেবিলগুলির মধ্যে উত্তরাধিকার সংজ্ঞা দেওয়া সম্ভব।


পোস্টগ্র্রেএসকিউএলINHERITS ছাড়াও অন্যান্য ডিবি সমর্থন করে ? উদাহরণস্বরূপ মাইএসকিউএল ?
জিয়ানিস ক্রিস্টোফাকিস

1
@ গেয়নিশ্রিস্টোফাকিস: মাইএসকিউএল কেবলমাত্র একটি সম্পর্কিত ডেটাবেস, যেখানে পোস্টগ্রিস একটি অবজেক্ট-রিলেশনাল ডাটাবেস। সুতরাং, কোনও মাইএসকিউএল এটি সমর্থন করে না। আসলে, আমি মনে করি পোস্টগ্রিসই হ'ল বর্তমান ডিবিএমএস যা এই ধরণের উত্তরাধিকারকে সমর্থন করে।
a_horse_with_no_name

2
@ মার্কো-পাওলো-অলিভিয়ার, ওপির প্রশ্নটি এসকিউএল সার্ভার সম্পর্কে, সুতরাং আপনি কেন একটি সমাধান প্রদান করেন যা কেবল পোস্টগ্রিসের সাথে কাজ করে তা আমি বুঝতে পারি না। স্পষ্টতই, সমস্যার সমাধান না।
মানচিত্র

@ ম্যাপ্টো এই প্রশ্নটি "একটি ডেটাবেজে কীভাবে ওও স্টাইলের উত্তরাধিকারী করবে" এর একটি বিষয় হয়ে দাঁড়িয়েছে; এটি মূলত যে স্কেল সার্ভার সম্পর্কে ছিল সম্ভবত এখন অপ্রাসঙ্গিক
কায়ুস জার্ড

0

আমি সমস্ত পদ্ধতিতে দক্ষতার সাথে পুরো পলিসিগুলি দক্ষতার সাথে পুনরুদ্ধার করার জন্য পদ্ধতিটি # 1 (একটি ইউনিফাইড বিভাগ টেবিল) এর দিকে ঝুঁকছি (যা আমি মনে করি যে আপনার সিস্টেম অনেক কিছু করবে)।

আরও, আপনি কী এসকিউএল সার্ভারটি ব্যবহার করছেন তা আমি জানি না, তবে ২০০৮+ স্পার্স কলামগুলি এমন পরিস্থিতিতে পারফরম্যান্স অনুকূল করতে সহায়তা করে যেখানে কোনও কলামের মানগুলি নাল হবে।

শেষ পর্যন্ত, আপনাকে ঠিক করতে হবে যে নীতি বিভাগগুলি কীভাবে "অনুরূপ"। যদি এগুলির যথেষ্ট পরিমাণে পার্থক্য না হয় তবে আমি মনে করি যে আরও সাধারণ সমাধান সমাধানের চেয়ে বেশি সমস্যা হতে পারে ... তবে কেবল আপনি এই কলটি করতে পারবেন। :)


একসাথে পুরো নীতি উপস্থাপন করার জন্য অনেক বেশি তথ্য থাকবে, সুতরাং পুরো রেকর্ডটি পুনরুদ্ধার করার প্রয়োজন হবে না। আমি মনে করি এটি 2005 সালের, যদিও আমি অন্যান্য প্রকল্পগুলিতে ২০০৮ এর বিরল ব্যবহার করেছি।
স্টিভ জোন্স

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

-1

বিকল্পভাবে, এমন একটি দস্তাবেজ ডেটাবেস (যেমন মোংগোডিবি) ব্যবহার করে বিবেচনা করুন যা সমৃদ্ধ ডেটা স্ট্রাকচার এবং নেস্টিং সমর্থন করে।


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