ম্যাচ ফুল, ম্যাচ সিম্পল এবং ম্যাচ পার্টিয়ালের মধ্যে পার্থক্য?


29

আমি একটি লক্ষ্য করেছি MATCH SIMPLEএবং MATCH FULLতারা কী করে তা আমি বুঝতে পারি না। আমি ডিফল্ট হয় দেখতে MATCH SIMPLE; কিন্তু, অন্যান্য MATCHধারাগুলি কীভাবে FOREIGN KEYসীমাবদ্ধতার কাজ করবে?

উত্তর:


38

CREATE TABLEম্যানুয়ালটির পৃষ্ঠাটি দেখুন :

তিনটি ম্যাচ ধরনের হয়: MATCH FULL, MATCH PARTIAL, এবং MATCH SIMPLE (যা ডিফল্ট)। MATCH FULLসমস্ত বিদেশী কী কলামগুলি বাতিল না হলে মাল্টিকালম বিদেশী কী এর একটি কলাম বাতিল হতে দেয় না; যদি সেগুলি সমস্ত নাল হয় তবে রেফারেন্স সারণিতে সারিটির কোনও মিল থাকার দরকার নেই। MATCH SIMPLEবিদেশী কী কলামগুলির যে কোনওটি শূন্য হতে দেয়; যদি তাদের মধ্যে কোনওটি শূন্য হয়, তবে সারিটির রেফারেন্স সারণীতে কোনও মিল থাকতে হবে না। MATCH PARTIALএখনও প্রয়োগ করা হয়নি। (অবশ্যই, NOT NULLএই কেসগুলি উত্থাপন থেকে রোধ করতে রেফারেন্সিং কলামে গুলি সীমাবদ্ধতা প্রয়োগ করা যেতে পারে))

এছাড়াও, বিদেশী কীগুলির অধ্যায়ে :

সাধারণত, কোনও রেফারেন্সিং সারি বিদেশী কী সীমাবদ্ধতা পূরণ করতে হবে না যদি এর কোনও রেফারেন্সিং কলাম শূন্য থাকে। যদি MATCH FULL বিদেশী কী ঘোষণার সাথে যুক্ত করা হয় তবে কেবলমাত্র তার সমস্ত রেফারেন্সিং কলামগুলি শূন্য হলেই একটি রেফারেন্সিং সারিটি সীমাবদ্ধতা পূরণ করে পালিয়ে যায় (সুতরাং নাল এবং নন-নাল মানগুলির সংমিশ্রণ একটি MATCH FULL সীমাবদ্ধতা ব্যর্থ হওয়ার গ্যারান্টিযুক্ত )। আপনি যদি না চান তবে রেফারেন্সিং সারিগুলি বিদেশী কী সীমাবদ্ধতা সন্তুষ্ট করতে এড়াতে সক্ষম হবে, রেফারেন্সিং কলাম (গুলি) হিসাবে হিসাবে ঘোষণা করুন NOT NULL

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


7

FULLবনাম SIMPLEবনামPARTIAL

নির্বাচিত উত্তরটি সঠিক হলেও, যদি এটি আপনার কাছে নতুন হয় তবে আপনি কোড সহ এটি দেখতে চাইতে পারেন - আমার মনে হয় এইভাবে আঁকানো আরও সহজ।

-- one row with (1,1)
CREATE TABLE foo ( a int, b int,
  PRIMARY KEY (a,b)
);
INSERT INTO foo (a,b) VALUES (1,1);

--
-- two child tables to reference it
-- 
CREATE TABLE t_full ( a int, b int,
  FOREIGN KEY (a,b) REFERENCES foo MATCH FULL
);
CREATE TABLE t_simple ( a int, b int,
  FOREIGN KEY (a,b) REFERENCES foo MATCH SIMPLE
);

যৌক্তিকভাবে FULLএবং এর সাথে SIMPLE, আমরা একটি সম্পূর্ণ ম্যাচ inোকাতে পারি।

-- works
INSERT INTO t_full (a,b) VALUES (1,1);
INSERT INTO t_simple (a,b) VALUES (1,1);

সমস্যাটি আসে যখন একটি কলাম হয় NULL

-- works
INSERT INTO t_simple (a,b) VALUES (1,NULL);

-- fails
INSERT INTO t_full (a,b) VALUES (1,NULL);

Into t_fullোকানো নিম্নলিখিত ত্রুটি উত্পন্ন করে,

ERROR:  insert or update on table "t_full" violates foreign key constraint "t_full_a_fkey"
DETAIL:  MATCH FULL does not allow mixing of null and nonnull key values.
INSERT 0 1

ঠিক আছে, তবে কি সম্পর্কে (42,NULL)- এটি এমনই অংশ যা আমি সবসময় বিভ্রান্তি পেয়েছিলাম MATCH SIMPLE,

-- works
INSERT INTO t_simple (a,b) VALUES (42,NULL);

উপরের আচরণটি প্রয়োগহীনদের সাথে কাজ করবে নাMATCH PARTIAL , যা সম্ভবত আপনি একটি যৌগিক সূচকের জন্য যা করতে চান যেখানে ডান-সর্বাধিক কলামটি NULLসম্পাদিত হয় does তবে কিছু লোক দেখেন যে প্যান্ডোরার বাক্সটি খারাপ ডিজাইনে খোলার পদ্ধতি হিসাবে।

সাধারণ সংজ্ঞা এবং স্মৃতিবিজ্ঞান

  • MATCH FULLসমস্ত কিছু অবশ্যই পুরোপুরি মিলবে, বা সমস্ত কলাম অবশ্যই হওয়া উচিতNULL
  • MATCH SIMPLEযদি একটি বিষয় NULLসীমাবদ্ধ থাকে তবে কেবল তা উপেক্ষা করা হবে।
  • MATCH PARTIALযদি এক জিনিস NULLসত্য যে সবকিছু NULLহয় আংশিকভাবে কিছু বাধ্যতা উদ্দেশ্যে যুক্তিসম্মত করে উদ্ধার।

এসকিউএল স্পেস নোট

উত্তরোত্তর জন্য, এখানে এসকিউএল স্পেক থেকে সংজ্ঞা দেওয়া আছে <match type>

  • MATCH SIMPLEযদি কমপক্ষে একটি রেফারেন্সিং কলামটি শূন্য হয়, তবে রেফারেন্সিং সারণির সারিটি সীমাবদ্ধতা পরীক্ষা করে। যদি সমস্ত রেফারেন্সিং কলামগুলি নাল না থাকে, তবে সারিটি সীমাবদ্ধতা যাচাই করে এবং কেবলমাত্র যদি রেফারেন্সিং সারণীর সারি থাকে যা সমস্ত রেফারেন্সিং কলামগুলির সাথে মেলে।
  • MATCH PARTIAL: যদি সমস্ত রেফারেন্সিং কলামগুলি শূন্য হয়, তবে রেফারেন্সিং সারণির সারিটি সীমাবদ্ধতা পরীক্ষা করে। যদি কমপক্ষে একটি রেফারেন্সিং কলামগুলি শূন্য না হয়, তবে সারিটি সীমাবদ্ধ চেকটি পাস করে যদি এবং কেবলমাত্র রেফারেন্স টেবিলের সারি থাকে যা সমস্ত নন-রেফারেন্সিং কলামগুলির সাথে মেলে।
  • MATCH FULL: যদি সমস্ত রেফারেন্সিং কলামগুলি শূন্য হয়, তবে রেফারেন্সিং সারণির সারিটি সীমাবদ্ধতা পরীক্ষা করে। যদি সমস্ত রেফারেন্সিং কলামগুলি নাল না থাকে, তবে সারিটি সীমাবদ্ধতা যাচাই করে এবং কেবলমাত্র যদি রেফারেন্সিং সারণীর সারি থাকে যা সমস্ত রেফারেন্সিং কলামগুলির সাথে মেলে। কিছু রেফারেন্সিং কলাম যদি নাল হয় এবং অন্য রেফারেন্সিং কলামটি শূন্য হয় তবে রেফারেন্সিং সারণির সারিটি সীমাবদ্ধতা চেকটিকে লঙ্ঘন করে।

এটি পোস্টগ্র্রেএসকিউএল নির্দিষ্ট না হলেও এই উদাহরণগুলি পোস্টগ্রেএসকিউএল দিয়ে প্রদর্শিত হয়

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