পিএইচপিএমআইএডমিনে বিদেশী কী সেট আপ করছেন?


335

আমি phpMyAdmin ব্যবহার করে একটি ডাটাবেস সেট আপ করছি। আমার দুটি টেবিল ( fooএবং bar) রয়েছে, প্রাথমিক তাদের প্রাথমিক কীগুলিতে সূচিযুক্ত । আমি foo_barতাদের প্রাথমিক কীগুলি বিদেশী কী হিসাবে ব্যবহার করে তাদের মধ্যে একটি সম্পর্কিত টেবিল ( ) তৈরি করার চেষ্টা করছি ।

আমি এই সারণীগুলিকে মাইআইএসএএম হিসাবে তৈরি করেছি, তবে পরে তিনটিই ইনোডিবিতে পরিবর্তন করেছি, কারণ আমি পড়েছি যে মাইআইএসএএম বিদেশী কী সমর্থন করে না। সবid ক্ষেত্র হয় INT(11)

আমি যখন foo_barটেবিলটি বেছে নিই , "রিলেশন ভিউ" লিঙ্কটি ক্লিক করুন, এবং এফকে কলামগুলি সেট করার চেষ্টা করুন database.foo.idএবং database.bar.idএটিতে "কোনও সূচক সংজ্ঞায়িত করা হয়নি!" প্রতিটি কলামের পাশে

আমি কী মিস করছি?

ব্যাখ্যা / আপডেট

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

এছাড়াও, যদিও আমি এখনও সুস্পষ্ট বিদেশী কীগুলি সেট আপ করতে সক্ষম হইনি, আমার কাছে একটি সম্পর্কিত টেবিল রয়েছে এবং এতে যোগদান করতে পারেন:

SELECT * 
FROM foo 
INNER JOIN foo_bar 
ON foo.id = foo_bar.foo_id 
INNER JOIN bar
ON foo_bar.bar_id = bar.id;

এটি কেবল FK গুলি স্পষ্টভাবে ডেটাবেজে সংজ্ঞায়িত না করায় আমার অস্বস্তি বোধ করে।

উত্তর:


365

আপনি সম্পর্ক স্থাপন করতে যদি phpMyAdmin ব্যবহার করতে চান তবে আপনাকে 2 টি কাজ করতে হবে। প্রথমত, আপনাকে রেফারিং টেবিলের বিদেশী কী কলামে একটি সূচক নির্ধারণ করতে হবে (সুতরাং foo_bar.foo_id, আপনার ক্ষেত্রে)। তারপরে, রিলেশন ভিউতে যান (রেফারিং টেবিলের মধ্যে) এবং উল্লেখ করা কলামটি নির্বাচন করুন (সুতরাং আপনার ক্ষেত্রে foo.id) এবং আপডেট এবং আপডেটগুলি মুছে ফেলুন।

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

সম্পাদনা: দুটি টেবিলের ইনোডিবি ইঞ্জিন নির্বাচন করা আছে তা নিশ্চিত করুন।


93
টিপ: সম্পর্কের দৃষ্টিভঙ্গি আপনার টেবিলের নীচে সামান্য লিঙ্ক, এটি প্রথম স্থানে পাওয়া আমার পক্ষে কঠিন ছিল
ম্লাদেন জানজেটোভিক

14
লিঙ্কটি সেখানে না দেখানো না হলে, এক্ষেত্রে: আপনার টেবিলটি যাতে না ঘটে তার জন্য নিশ্চিত করুন যে আপনার টেবিলটি ইনোডিবি (পিএইচপিএমআইএডমিনে অপারেশনস ট্যাবের অধীনে) টাইপের রয়েছে।
muttley91

4
@ muttley91 আমার টেবিলটি InnoDB। আমি ডাবল চেক করেছি। লিঙ্কটি এখনও প্রদর্শিত হয় না।
আফিলিনা

6
@ আফিলিনা পিএইচপিএমএইডমিনের নতুন সংস্করণে এটি "স্ট্রাকচার" ট্যাবের অভ্যন্তরে শীর্ষে প্রদর্শিত হবে, এটি "ব্রাউজ", "কাঠামো" ইত্যাদি দেখায় এমন ট্যাব সারিটির নীচে
অস্তিতা শ্রীবাস্তব

225

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

একটি বিদেশী কী সেটআপ করতে যাতে CHILD নামের একটি টেবিলের পিআইডি কলামটি পেরেন্ট নামে একটি সারণীতে আইডি কলামের উল্লেখ করে, আপনি নিম্নলিখিতটি করতে পারেন:

  1. উভয় টেবিলের জন্য, অপারেশন ট্যাবে যান এবং তাদের ধরণটি "INNO DB" তে পরিবর্তন করুন
  2. নিশ্চিত হয়ে নিন যে ID হ'ল পার্ট টেবিলের প্রাথমিক কী (বা কমপক্ষে একটি সূচক কলাম)।
  3. শিশু ছকটিতে, পিআইডি কলামের জন্য একটি সূচক নির্ধারণ করুন।
  4. বাচ্চা টেবিলের কাঠামো ট্যাবটি দেখার সময়, "ক্ষেত্রগুলি যুক্ত করুন" বিভাগের ঠিক উপরে "সম্পর্ক দৃশ্য" লিঙ্কটি ক্লিক করুন।
  5. আপনাকে একটি সারণী দেওয়া হবে যেখানে প্রতিটি সারিটি আপনার ক্লায়েন্ট টেবিলের ইনডেক্সড কলামের সাথে সম্পর্কিত। প্রতিটি সারিতে প্রথম ড্রপডাউন আপনাকে চয়ন করতে পারে- কোন টেবিল-> ইনডেক্সড কলাম রেফারেন্সগুলিকে কলাম করুন। পিআইডি-র সারিতে, ড্রপডাউন থেকে প্যারেন্ট-> আইডি চয়ন করুন এবং যানটিতে ক্লিক করুন।

বাচ্চাদের টেবিলটিতে একটি রফতানি করে, আপনার দেখতে হবে পিআইডি কলামের জন্য একটি বিদেশী কী বাধা তৈরি করা হয়েছে।


2
বাহ, খুব গুরুত্বপূর্ণ জিনিস। বিদেশী কী যুক্ত করার জন্য সাহায্যের জন্য এই পৃষ্ঠায় প্রথম জিনিসটি খুঁজে পাওয়া যায় নি, আমি আশা করি এটি আরও প্রায়ই উল্লেখ করা হত mentioned
ব্যবহারকারী 1299656

86

এটি উইকিপিডিয়া নিবন্ধের সংক্ষিপ্তসার। এটি আপনাকে পিএইচপিএমইডমিনে বিভিন্ন ধরণের সম্পর্ক নির্দিষ্ট করতে পারে। আমি এটি এখানে রাখছি কারণ এটি "আপডেট / মুছুন" -এর জন্য বিদেশী কী বিকল্পগুলি সেট করার বিষয়ে @ নাথনের মন্তব্যের সাথে প্রাসঙ্গিক তবে একটি মন্তব্যের পক্ষে এটি বেশ বড় - আশা করি এটি সহায়তা করবে।

CASCADE

যখনই মাস্টার (রেফারেন্সযুক্ত) সারণির সারিগুলি মুছে ফেলা হয় (রেসপন্টেড আপডেট করা হয়), সন্তানের সাথে সম্পর্কিত রেফারেন্স (রেফারেন্সিং) সারণী মিলে যাওয়া বিদেশী কী কলামের সাথে মুছে ফেলা হবে (রেফারেন্সেড আপডেট করা )ও। একে ক্যাসকেড মোছা (রেফারেন্স আপডেট [2]) বলা হয়।

সীমিত

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

কোন কর্ম

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

নাল সেট করুন

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

ডিফল্ট সেট করুন

সেট নুলের অনুরূপ, রেফারেন্সিং সারিটিতে থাকা বিদেশী কী মানগুলি রেফারেন্সী সারিটি আপডেট বা মুছে ফেলা হলে কলাম ডিফল্টে সেট করা হয়।


1
আরও ভাল, সরাসরি মাইএসকিউএল উত্স ডকুমেন্টেশনে যান: dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html
কিমিওসার

62

Phpmyadmin এ, আপনি কেবল তার GUI দ্বারা বিদেশী কী বরাদ্দ করতে পারেন। টেবিলে ক্লিক করুন এবং স্ট্রাকচার ট্যাবে যান। কেবলমাত্র টেবিলের বেলোতে সম্পর্কিত চিত্র দেখুন (নীচের চিত্রে দেখানো হয়েছে)।

এখানে চিত্র বর্ণনা লিখুন

আপনি প্রাথমিক কী দ্বারা তালিকার বাক্স থেকে ফরজিং কী বরাদ্দ করতে পারেন ((নীচের চিত্রটি দেখুন) এবং সংরক্ষণ করুন

এখানে চিত্র বর্ণনা লিখুন

সম্পর্কিত এসকিউএল কোয়েরি স্বয়ংক্রিয়ভাবে উত্পন্ন এবং কার্যকর করা হয়েছে।


16

ডাটাবেসে নতুন এইগুলির জন্য .... এবং একটি বিদ্যমান সারণী পরিবর্তন করতে হবে need অনেকগুলি জিনিস বেশ সোজা মনে হয় তবে এ এবং বি এর মধ্যে সর্বদা কিছু না কিছু থাকে

অন্য কিছুর আগে এটিকে একবার দেখুন ।

  1. আপনার পি_আইডি (পিতা বা মাতা এবং সন্তানের উভয় টেবিলে প্যারেন্ট আইডি) রয়েছে তা নিশ্চিত করুন।
  2. অবশ্যই এটি ইতিমধ্যে পিতামাতায় পূরণ করা হবে। সত্যিকারের এবং চূড়ান্ত উপায়ে সন্তানের মধ্যে অগত্যা নয়। সুতরাং উদাহরণস্বরূপ P_ID # 3 (সন্তানের টেবিলে অনেক সময় প্যারেন্ট টেবিলের মূল P_ID এর দিকে নির্দেশ করা হবে)।
  3. এসকিউএল ট্যাবে যান (আমি পিএইচপিএমইএডমিন ব্যবহার করছি, অন্যগুলির মতো হওয়া উচিত) এবং এই আদেশটি করুন:

    ALTER TABLE child_table_name    
    ADD FOREIGN KEY (P_ID)   
    REFERENCES parent_table_name (P_ID)
  4. কাঠামোর চেয়ে চাইল্ড টেবিলে ক্লিক করুন, অবশেষে রিলেশনাল ভিউতে। সেখানে আপনার ডিবি পরিকল্পনা শেষ করুন। ক্যাসকেড, সীমাবদ্ধ ইত্যাদি সম্পর্কে এর আগে একটি সুন্দর উত্তর ছিল অবশ্যই এটি কমান্ড দ্বারা করা যেতে পারে ...


9

ফরেইন কী একটা টেবিল referes একটি অ মৌলিক বৈশিষ্ট্য অন্য প্রধান বৈশিষ্ট্য মানে * পিএইচপি মাই এডমিন মধ্যে * প্রথম কলামে আপনি একটি সূচক যেমন বিদেশী কী সেট করতে চান সেট

তারপরে রিলেশন ভিউতে ক্লিক করুন

সেখানে আপনি বিদেশী কী সেট করার বিকল্পগুলি খুঁজে পেতে পারেন


7

InnoDB আপনাকে একটি টেবিলের সাথে বিকল্প টেবিল ব্যবহার করে একটি নতুন বিদেশী কী বাধা যুক্ত করতে দেয়:

ALTER TABLE tbl_name
    ADD [CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

অন্যদিকে, মাইআইএসএএম এর যদি আপনার প্রসঙ্গে ইনোডিবি-র সুবিধাগুলি থাকে তবে আপনি কেন বিদেশী কী বাধা তৈরি করতে চান না create আপনি আপনার অ্যাপ্লিকেশনটির মডেল স্তরে এটি পরিচালনা করতে পারেন। আপনি যে কলামগুলি বিদেশী কী হিসাবে ব্যবহার করতে চান তা কেবল সূচিযুক্ত হয়েছে তা নিশ্চিত করুন!


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

1
@ নাথান: পোস্টে আমি এটাই বলছি। আপনি এটি মডেল স্তরেও পরিচালনা করতে পারেন। আপনি মডেল থেকে ক্যাসকেড মোছার উপর প্রয়োগ করতে পারেন।
মার্কাস

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

4

ভুলে যাবেন না যে দুটি কলামে একই ডেটা টাইপ থাকা উচিত।

উদাহরণস্বরূপ, যদি একটি কলামটি INT টাইপের হয় এবং অন্যটি টাইপ টাইন্টিন্টের হয় তবে আপনি নিম্নলিখিত ত্রুটিটি পাবেন:

[পিআইডি কলামে] বিদেশী কী তৈরি করার সময় ত্রুটি হয়েছে (ডেটা প্রকারগুলি পরীক্ষা করুন)


3

পদক্ষেপ 1: আপনাকে লাইনটি যুক্ত করতে হবে: ডিফল্ট-স্টোরেজ-ইঞ্জিন = InnoDB আপনার মাইএসকিএল কনফিগারেশন ফাইলের (মাই সিএনএফ বা মাইআইএনআই আপনার ওএসের উপর নির্ভর করে) বিভাগের অধীনে এবং মাইএসকিএলডিটি পুনরায় চালু করতে হবে। এখানে চিত্র বর্ণনা লিখুন

পদক্ষেপ 2: এখন আপনি টেবিলটি তৈরি করার সময় আপনি টেবিলের ধরণটি দেখতে পাবেন: InnoDB

এখানে চিত্র বর্ণনা লিখুন

পদক্ষেপ 3: পিতামাতা এবং শিশু উভয় সারণী তৈরি করুন। এখন চাইল্ড টেবিলটি খুলুন এবং ইউ কলামটি বিদেশী কী পছন্দ করতে বেছে নিন: নিচের মতো অ্যাকশন লেবেল থেকে সূচি কী নির্বাচন করুন।

এখানে চিত্র বর্ণনা লিখুন

পদক্ষেপ 4: এখন নীচের মত প্রিন্ট ভিউয়ের নিকট থেকে নীচে থেকে একই শিশু টেবিলের সাথে সম্পর্কিত ভিউটি খুলুন।

এখানে চিত্র বর্ণনা লিখুন পদক্ষেপ 5: ইউ কলামটি নির্বাচন করুন বিদেশী কী হিসাবে ড্রপ ডাউন থেকে পিতামাতার কলামটি নির্বাচন করুন। dbName.TableName.ColumnName

অপসারণ ও আপডেটের জন্য উপযুক্ত মান নির্বাচন করুন এখানে চিত্র বর্ণনা লিখুন


2

ইনোডিবি হিসাবে প্রথমে স্টোরেজ ইঞ্জিন সেট করুন

ইনোডিবি হিসাবে প্রথমে স্টোরেজ ইঞ্জিন সেট করুন

তারপরে রিলেশন ভিউ অপশনটি স্ট্রাকচার মেনুতে সক্ষম করে

তারপরে রিলেশন ভিউ অপশনটি সক্ষম করে


আপনার প্রথম পদক্ষেপটি সঠিক তবে পরবর্তী কী দয়া করে সমস্ত প্রক্রিয়াটি ধাপে ধাপে লিখুন।
কুণাল শাক্তওয়াত

2

এটি পুরানো থ্রেড তবে উত্তর কারণ কারও পক্ষে কার্যকর।

পদক্ষেপ 1 । তোমার ডেটাবেস সংগ্রহস্থল Engine এ সেট InnoDB

ধাপ ২ । প্রাথমিক সারণী তৈরি করুন

এখানে customerপ্রাথমিক সারণি এবং customer_idপ্রাথমিক কী

এখানে চিত্র বর্ণনা লিখুন

পদক্ষেপ 3 । বিদেশী কী সারণী তৈরি করুন এবং সূচক দিন

এখানে আমাদের customer_addressesসম্পর্কিত টেবিল এবং গ্রাহকের ঠিকানা হিসাবে রয়েছে, তাই এখানে টেবিলের customer_idসাথে সম্পর্ক customerরয়েছে

নীচের মত টেবিল তৈরি করার সময় আমরা সরাসরি সূচক নির্বাচন করতে পারি

এখানে চিত্র বর্ণনা লিখুন

আপনি যদি কোনও টেবিল তৈরি করার সময় সূচকটি দিতে ভুলে যান , তবে আপনি নীচের মতো সারণির কাঠামো ট্যাব থেকে সূচি দিতে পারেন ।

এখানে চিত্র বর্ণনা লিখুন

পদক্ষেপ 4 । সূচক ক্ষেত্রটিকে একবার দিলে, কাঠামো ট্যাবে যান এবং নীচের ছবিতে প্রদর্শিত রিলেশন ভিউতে ক্লিক করুন

এখানে চিত্র বর্ণনা লিখুন

পদক্ষেপ 5 । এখন আপনি কী করতে চান তা মুছে ফেলুন এবং আপডেট করুন নির্বাচন করুন, বর্তমান টেবিল থেকে কলাম নির্বাচন করুন, ডিবি (সেম ডিবি) নির্বাচন করুন, নীচের ছবিতে প্রদর্শিত টেবিল থেকে সম্পর্ক টেবিল এবং প্রাথমিক কী নির্বাচন করুন এবং এটি সংরক্ষণ করুন

এখানে চিত্র বর্ণনা লিখুন

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


0

Https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html এ অফিসিয়াল মাইএসকিউএল ডকুমেন্টেশন থেকে :

মাইএসকিউএলকে বিদেশী কী এবং রেফারেন্সকৃত কীগুলিতে সূচকের প্রয়োজন হয় যাতে বিদেশী কী চেকগুলি দ্রুততর হয় এবং কোনও টেবিল স্ক্যানের প্রয়োজন না হয়।


0

পিএইচপিএমআইএডমিনের নতুন সংস্করণগুলিতে " রিলেশন ভিউ " বিকল্পটি আর নেই, সেক্ষেত্রে আপনাকে একই জিনিস অর্জনের জন্য একটি বিবৃতি কার্যকর করতে হবে। উদাহরণ স্বরূপ

ALTER TABLE employees
    ADD CONSTRAINT fk_companyid FOREIGN KEY (companyid)
    REFERENCES companies (id)
    ON DELETE CASCADE;

এই উদাহরণস্বরূপ, যদি সংস্থাগুলি থেকে কোনও সারি মুছে ফেলা হয় তবে company কোম্পানীডের সমস্ত কর্মচারীও মুছে ফেলা হবে।

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