বিদেশী কী বাধা চক্র বা একাধিক ক্যাসকেড পাথের কারণ হতে পারে?


176

আমি যখন আমার টেবিলগুলিতে বাধা যুক্ত করার চেষ্টা করি তখন আমার একটি সমস্যা হয়। আমি ত্রুটি পেয়েছি:

'কর্মচারী' টেবিলের জন্য বিদেশী কী বাধা 'FK74988DB24B3C886' উপস্থাপনের ফলে চক্র বা একাধিক ক্যাসকেড পাথ হতে পারে। কোনও পদক্ষেপ মুছে ফেলুন বা কোনও অ্যাকশন আপডেট করুন বা অন্যান্য বিদেশী কী বাধাগুলি সংশোধন করুন।

আমার সীমাবদ্ধতা একটি Codeটেবিল এবং একটি employeeটেবিলের মধ্যে। Codeটেবিল ধারন Id, Name, FriendlyName, Typeএবং Valueemployeeক্ষেত্র রেফারেন্স কোড, তাই কোডের প্রতিটি টাইপ জন্য একটি রেফারেন্স হতে পারে একটি নম্বর আছে।

রেফারেন্সযুক্ত কোডটি যদি মুছে ফেলা হয় তবে আমার ক্ষেত্রগুলি বাতিল করতে হবে।

কোনও ধারণা কীভাবে আমি এটি করতে পারি?


সমাধান এক এখানে
IsmailS

উত্তর:


180

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

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

মাইক্রোসফ্ট নিজে এফকে সীমাবদ্ধতার পরিবর্তে ট্রিগার ব্যবহারের পরামর্শ দেয়


2
একটি জিনিস যা আমি এখনও বুঝতে পারি না তা হ'ল, যদি এই "সমস্যা "টি ট্রিগার ব্যবহার করে সমাধান করা যায় তবে কীভাবে আসে যে একটি ট্রিগার" চক্র বা একাধিক ক্যাসকেড পাথ ... "সৃষ্টি করে না?
আর্মেন

5
@ আরমেন: কারণ আপনার ট্রিগার স্পষ্টভাবে এই যুক্তি সরবরাহ করবে যে সিস্টেমটি নিজের মতো করে স্পষ্টভাবে চিত্রিত করতে পারে না যদি একটি মুছা রেফারেন্সিয়াল ক্রিয়াটির জন্য যদি একাধিক পাথ থাকে তবে আপনার ট্রিগার কোডটি কোন সারণীগুলি মুছে ফেলা হয়েছে এবং কোন ক্রমে সংজ্ঞায়িত করবে।
onedaywhen

6
ট্রিগারটি প্রথম অপারেশন সম্পূর্ণ হওয়ার পরে কার্যকর করে যাতে কোনও রেস চলছে না।
বন

2
@ ডাম্বলড্যাড: মানে, যখন সীমাবদ্ধতা (সম্ভবত সংমিশ্রণে) কাজটি করতে না পারে কেবল তখনই ট্রিগার ব্যবহার করুন। সীমাবদ্ধতা ঘোষণামূলক এবং তাদের বাস্তবায়ন ব্যবস্থাটির দায়িত্ব। ট্রিগারগুলি হ'ল পদ্ধতিগত কোড এবং আপনার অবশ্যই প্রয়োগটি কোড (এবং ডিবাগ) করতে হবে এবং তাদের অসুবিধাগুলি সহ্য করতে হবে (খারাপ কর্মক্ষমতা ইত্যাদি)।
onedaywhen

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

99

একাধিক ক্যাসকেসিং পাথগুলির সাথে একটি সাধারণ পরিস্থিতি হ'ল দুটি বিবরণ সহ একটি মাস্টার টেবিল, আসুন "মাস্টার" এবং "বিশদ 1" এবং "বিশদ 2" বলি। উভয় বিশদ হ'ল ক্যাসকেড মোছা। এখনও পর্যন্ত কোনও সমস্যা নেই। তবে যদি উভয় বিশদটির কোনও অন্য টেবিলের সাথে এক থেকে একাধিক সম্পর্ক থাকে (তবে "সামোথার টেবিল" বলুন) what সামোথার টেবিলটিতে একটি বিশদ 1ID- কলাম এবং একটি বিশদ 2ID- কলাম রয়েছে।

Master { ID, masterfields }

Detail1 { ID, MasterID, detail1fields }

Detail2 { ID, MasterID, detail2fields }

SomeOtherTable {ID, Detail1ID, Detail2ID, someothertablefields }

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

Master { ID, masterfields }

DetailMain { ID, MasterID }

Detail1 { DetailMainID, detail1fields }

Detail2 { DetailMainID, detail2fields }

SomeOtherTable {ID, DetailMainID, someothertablefields }

সমস্ত আইডি ক্ষেত্রগুলি কী-ক্ষেত্র এবং স্বতঃবৃদ্ধি। ক্রুক্সটি ডিটেল টেবিলগুলির ডিটেলমেনআইডি ফিল্ডগুলিতে রয়েছে। এই ক্ষেত্রগুলি উভয়ই মূল এবং রেফারেন্সিয়াল কনট্রেন্ট। কেবলমাত্র মাস্টার-রেকর্ডগুলি মুছে ফেলে সবকিছু মুছে ফেলা এখন ক্যাসকেড করা সম্ভব। ক্ষতিটি হ'ল প্রতিটি বিশদ 1-রেকর্ডের জন্য এবং প্রতিটি বিশদ 2 রেকর্ডের জন্য অবশ্যই একটি বিশদ বিবরণ রেকর্ড থাকতে হবে (যা আসলে সঠিক এবং অনন্য আইডি পাওয়ার জন্য প্রথমে তৈরি করা হয়েছিল)।


1
আপনার মন্তব্য আমাকে যে সমস্যার মুখোমুখি হচ্ছে তা বোঝার জন্য আমাকে অনেক সহায়তা করেছে। ধন্যবাদ! আমি কোনও একটি পথের জন্য ক্যাসকেড মুছা বন্ধ করে দেওয়া পছন্দ করব, তারপরে অন্য রেকর্ডগুলি মুছতে অন্য কয়েকটি উপায়ে পরিচালনা করতে হবে (সঞ্চিত পদ্ধতি; ট্রিগার; কোড ইত্যাদির মাধ্যমে)। তবে আমি একই সমস্যার সম্ভাব্য বিভিন্ন অ্যাপ্লিকেশনগুলির জন্য আপনার সমাধানটিকে (এক পথে গোষ্ঠীকরণ) মাথায় রাখছি ...
ফ্রিউইল

1
ক্রুজ শব্দটি ব্যবহারের জন্য এক সাথে (এবং তা বোঝানোর জন্যও)
মাস্টারভোক

এটি ট্রিগার লেখার চেয়ে ভাল? কেবল ক্যাসকেডটি কাজ করতে অতিরিক্ত টেবিল যুক্ত করা বিজোড় বলে মনে হচ্ছে।
ডাম্বলডেড

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

12

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

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

আমি সন্দেহ করি যে মাল্টিপ্যাথ সমস্যাটি একই রকম; উদাহরণস্বরূপ, স্কিমাতে একাধিক পাথ অগত্যা ডেটাতে একাধিক পাথ বোঝায় না, তবে মাল্টিপাথ সমস্যা নিয়ে আমার কম অভিজ্ঞতা আছে।

অবশ্যই যদি SQL সার্ভার হয়নি চক্র এটি এখনও 32 গভীরতায় সাপেক্ষে হতে চাই অনুমতি, কিন্তু যে সম্ভবত অধিকাংশ ক্ষেত্রে জন্য পর্যাপ্ত নয়। (খুব খারাপ যে এটি কোনও ডাটাবেস সেটিং নয়!)

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

সেলকো অনুক্রমের প্রতিনিধিত্ব করার একটি "আরও ভাল" উপায় প্রস্তাব করে যা চক্রগুলি প্রবর্তন করে না, তবে সেখানে বাণিজ্যও রয়েছে।


"আপনি যদি আর আই সীমাবদ্ধতাগুলি ব্যবহার করেন তবে আপনি আসলে ডেটাতে একটি চক্র তৈরি করতে পারবেন না!" -- ভাল যুক্তি!
onedaywhen

আপনি ডেটা বিজ্ঞপ্তি তৈরি করতে পারবেন তা নিশ্চিত, তবে কেবলমাত্র আপডেট আপডেট ব্যবহার করে এমএসএসকিউএল দিয়ে। অন্যান্য আরডিবিএমগুলি স্থগিত প্রতিবন্ধকতাগুলি সমর্থন করে (প্রতিশ্রুতি দেওয়ার সময় সততা নিশ্চিত করা হয়, সন্নিবেশ / আপডেট / মোছার সময় নয়)।
কার্ল ক্রিগ

7

এখানে একটি নিবন্ধ উপলব্ধ রয়েছে যা ট্রিগারগুলি ব্যবহার করে কীভাবে একাধিক মোছার পথগুলি সম্পাদন করবে তা ব্যাখ্যা করে। জটিল পরিস্থিতিগুলির জন্য এটি দরকারী Maybe

http://www.mssqltips.com/sqlservertip/2733/solving-the-sql-server-multiple-cascade-path-issue-with-a-trigger/


3

এর শব্দগুলির দ্বারা আপনার বিদ্যমান বিদেশী কীগুলির মধ্যে একটিতে একটি অনডিলিট / অনআপডেট ক্রিয়া রয়েছে যা আপনার কোড সারণিকে পরিবর্তন করবে।

সুতরাং এই বিদেশী কী তৈরি করে আপনি একটি চক্র সমস্যা তৈরি করবেন,

উদাহরণস্বরূপ কর্মচারীদের আপডেট করা, কোনও আপডেট আপডেট অ্যাকশন দ্বারা কোডগুলি পরিবর্তন করার কারণ হয়ে যায়, কর্মচারীদের একটি আপডেট আপডেট অ্যাকশন ... ইত্যাদি দ্বারা পরিবর্তিত করে তোলে ...

আপনি যদি উভয় টেবিলের জন্য আপনার সারণী সংজ্ঞা পোস্ট করেন, এবং আপনার বিদেশী কী / সীমাবদ্ধ সংজ্ঞা আমাদের জানাতে সক্ষম হবে যে সমস্যাটি কোথায় ...


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

যাইহোক সেগুলি পোস্ট করুন ... আমি মনে করি না যে এখানে কারও মন আসবে, এবং কোড উইন্ডো এগুলিকে একটি স্ক্রলিং ব্লকে সঠিকভাবে ফর্ম্যাট করবে :)
ইয়ন ক্যাম্পবেল

2

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

public class Employee{
public virtual ICollection<Qualification> Qualifications {get;set;}

}

public class Qualification{

public Employee Employee {get;set;}

public virtual ICollection<University> Universities {get;set;}

}

public class University{

public Qualification Qualification {get;set;}

}

ডেটা কনটেক্সটে এটি নীচের মতো হতে পারে

protected override void OnModelCreating(DbModelBuilder modelBuilder){

modelBuilder.Entity<Qualification>().HasRequired(x=> x.Employee).WithMany(e => e.Qualifications);
modelBuilder.Entity<University>.HasRequired(x => x.Qualification).WithMany(e => e.Universities);

}

এই ক্ষেত্রে কর্মচারী থেকে যোগ্যতা এবং যোগ্যতা থেকে বিশ্ববিদ্যালয়গুলিতে চেইন রয়েছে। সুতরাং এটি আমার কাছে একই ব্যতিক্রম ছোঁড়াচ্ছিল।

আমি যখন পাল্টেছিলাম তখন এটি আমার পক্ষে কাজ করেছিল

    modelBuilder.Entity<Qualification>().**HasRequired**(x=> x.Employee).WithMany(e => e.Qualifications); 

প্রতি

    modelBuilder.Entity<Qualification>().**HasOptional**(x=> x.Employee).WithMany(e => e.Qualifications);

1

ট্রিগার এই সমস্যার সমাধান:

IF OBJECT_ID('dbo.fktest2', 'U') IS NOT NULL
    drop table fktest2
IF OBJECT_ID('dbo.fktest1', 'U') IS NOT NULL
    drop table fktest1
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fkTest1Trigger' AND type = 'TR')
    DROP TRIGGER dbo.fkTest1Trigger
go
create table fktest1 (id int primary key, anQId int identity)
go  
    create table fktest2 (id1 int, id2 int, anQId int identity,
        FOREIGN KEY (id1) REFERENCES fktest1 (id)
            ON DELETE CASCADE
            ON UPDATE CASCADE/*,    
        FOREIGN KEY (id2) REFERENCES fktest1 (id) this causes compile error so we have to use triggers
            ON DELETE CASCADE
            ON UPDATE CASCADE*/ 
            )
go

CREATE TRIGGER fkTest1Trigger
ON fkTest1
AFTER INSERT, UPDATE, DELETE
AS
    if @@ROWCOUNT = 0
        return
    set nocount on

    -- This code is replacement for foreign key cascade (auto update of field in destination table when its referenced primary key in source table changes.
    -- Compiler complains only when you use multiple cascased. It throws this compile error:
    -- Rrigger Introducing FOREIGN KEY constraint on table may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, 
    -- or modify other FOREIGN KEY constraints.
    IF ((UPDATE (id) and exists(select 1 from fktest1 A join deleted B on B.anqid = A.anqid where B.id <> A.id)))
    begin       
        update fktest2 set id2 = i.id
            from deleted d
            join fktest2 on d.id = fktest2.id2
            join inserted i on i.anqid = d.anqid        
    end         
    if exists (select 1 from deleted)       
        DELETE one FROM fktest2 one LEFT JOIN fktest1 two ON two.id = one.id2 where two.id is null -- drop all from dest table which are not in source table
GO

insert into fktest1 (id) values (1)
insert into fktest1 (id) values (2)
insert into fktest1 (id) values (3)

insert into fktest2 (id1, id2) values (1,1)
insert into fktest2 (id1, id2) values (2,2)
insert into fktest2 (id1, id2) values (1,3)

select * from fktest1
select * from fktest2

update fktest1 set id=11 where id=1
update fktest1 set id=22 where id=2
update fktest1 set id=33 where id=3
delete from fktest1 where id > 22

select * from fktest1
select * from fktest2

0

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

protected override void OnModelCreating( DbModelBuilder modelBuilder )
{
    modelBuilder.Entity<TableName>().HasMany(i => i.Member).WithRequired().WillCascadeOnDelete(false);
}

অথবা এই বৈশিষ্ট্যটি সম্পূর্ণভাবে বন্ধ করুন:

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

-2

ASP.NET কোর 2.0 এবং EF কোর 2.0 ব্যবহার করে এই সমস্যার সমাধান করার জন্য আমার সমাধানটি নিম্নলিখিত ক্রিয়াকলাপটি সম্পাদন করছিল:

  1. update-databaseডাটাবেস তৈরি করতে প্যাকেজ ম্যানেজমেন্ট কনসোলে (পিএমসি) কমান্ড রান করুন (এটি "বিদেশী মূল সীমাবদ্ধতার ফলে ফলাফল ... চক্র বা একাধিক ক্যাসকেড পাথের কারণ হতে পারে error" ত্রুটি)

  2. script-migration -Idempotentবিদ্যমান সারণী / সীমাবদ্ধতা নির্বিশেষে চালানো যেতে পারে এমন একটি স্ক্রিপ্ট তৈরি করতে পিএমসিতে রান কমান্ড

  3. ফলস্বরূপ স্ক্রিপ্ট নিন ON DELETE CASCADEএবং এটির সাথে প্রতিস্থাপন করুনON DELETE NO ACTION

  4. ডেটাবেসের বিপরীতে পরিবর্তিত এসকিউএল সম্পাদন করুন

এখন, আপনার স্থানান্তরগুলি আপ-টু-ডেট হওয়া উচিত এবং ক্যাসকেডিং মোছা হওয়া উচিত নয়।

খুব খারাপ আমি সত্তা ফ্রেমওয়ার্ক কোর 2.0 তে এটি করার কোনও উপায় খুঁজে পাচ্ছিলাম না।

শুভকামনা!


আপনি এটি করার জন্য আপনার মাইগ্রেশন ফাইলটি পরিবর্তন করতে পারেন (এসকিউএল স্ক্রিপ্ট পরিবর্তন না করে), অর্থাত্ আপনার মাইগ্রেশন ফাইলে আপনি ক্যাসকেড থেকে সীমাবদ্ধ করতে ডিলিট অ্যাকশন সেট করতে পারেন
সনি

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

আমার অভিজ্ঞতায় সাবলীল টীকাগুলি ব্যবহার করা যেতে পারে এবং ব্যবহার করা উচিত (আমি সেগুলি ব্যবহার করি) তবে সেগুলি প্রায়শই বগিযুক্ত হয়। কোডগুলিতে কেবল তাদের উল্লেখ করা প্রত্যাশিত ফলাফল তৈরি করে না।
ব্যবহারকারী 1477388
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.