মুছে ফেলা ব্যবহারকারীদের পরিচালনা - পৃথক বা একই টেবিল?


19

দৃশ্যটি হ'ল আমি ব্যবহারকারীর একটি বিস্তৃত সেট পেয়েছি এবং সময়ের সাথে সাথে ব্যবহারকারীরা তাদের অ্যাকাউন্টগুলি বাতিল করবেন যা বর্তমানে আমরা একই টেবিলে 'মুছে ফেলা' (একটি পতাকা সহ) হিসাবে চিহ্নিত করেছি।

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

আমি যা লক্ষ্য করেছি তা হ'ল আমাদের সমস্ত সিস্টেম জুড়ে, আমরা সাধারণ ক্রিয়াকলাপে ব্যবহারকারীদের টেবিলটি ক্রমাগত জিজ্ঞাসা করি যা ব্যবহারকারীকে পরীক্ষা করে মুছে ফেলা হয় না, আমি যা ভাবছি তা হ'ল আমাদের এগুলি করার দরকার নেই ... ! [স্পেসিফিকেশন 1: 'ক্রমাগত জিজ্ঞাসাবাদ' করার মাধ্যমে, আমার অর্থ হ'ল আমাদের কাছে এমন কোয়েরি রয়েছে: '... ব্যবহারকারীদের যেখানে' = '0 "এবং ...' কে সরিয়ে দেওয়া হয়েছে। উদাহরণস্বরূপ, আমরা যে প্রশ্নের সাথে যাতে একটি নির্দিষ্ট তারিখে সকল সভায় জন্য নিবন্ধিত সকল ব্যবহারকারীর আনা করার প্রয়োজন হতে পারে, আমরা আরো ব্যবহারকারীদের কোথায় isdeleted = "0" থেকে আছে - এই আমার পয়েন্ট পরিষ্কার করতে না]?

(1) continue keeping deleted users in the 'main' users table
(2) keep deleted users in a separate table (mostly required for historical
    book-keeping)

উভয় পদ্ধতির সুবিধা এবং কনস কি?


কোন কারণে আপনি ব্যবহারকারীদের রাখেন?
কেপলা

2
একে বলা হয় সফট-ডিলিট। আরও দেখুন ডাটাবেসের রেকর্ড unpermenantley (নরম-মোছা) মোছা
Sjoerd

@ কেপ্পলা - তিনি উল্লেখ করেছেন যে: "historicalতিহাসিক বই রাখা"।
ChrisF

@ ক্রিসএফ: আমি স্কোপটিতে আগ্রহী ছিলাম: তিনি কি কেবল ব্যবহারকারীদের বই রাখতে চান, বা এখনও কিছু তথ্য সংযুক্ত রয়েছে (ইজি মন্তব্য, অর্থ প্রদান ইত্যাদি)
কেপলা

এটি হয়তো মুছে ফেলা তাদের চিন্তা বন্ধ করতে এবং সাহায্য করতে পারে (যা সত্য নয়) হিসেবে বাতিল করা হয়েছে তাদের অ্যাকাউন্ট চিন্তা শুরু (যা হল সত্য)।
মাইক শেরিল 'ক্যাট রিক্যাল'

উত্তর:


13

(1) মুছে ফেলা ব্যবহারকারীদের 'প্রধান' ব্যবহারকারীদের সারণীতে রেখে দেওয়া চালিয়ে যান

  • পেশাদাররা: সব ক্ষেত্রেই সহজ প্রশ্ন
  • কনস: ব্যবহারকারীর সংখ্যা বেশি থাকলে সময়ের সাথে সাথে কর্মক্ষমতা হ্রাস করতে পারে

(২) মোছা ব্যবহারকারীদের একটি পৃথক সারণীতে রাখুন (বেশিরভাগ historicalতিহাসিক বইয়ের জন্য প্রয়োজনীয়)

আপনি মুছে ফেলা ব্যবহারকারীদের স্বয়ংক্রিয়ভাবে ইতিহাসের টেবিলে স্থানান্তর করতে একটি ট্রিগার ব্যবহার করতে পারেন।

  • পেশাদাররা: সক্রিয় ব্যবহারকারীদের টেবিলের জন্য সহজ রক্ষণাবেক্ষণ, স্থিতিশীল কর্মক্ষমতা
  • কনস: ইতিহাসের সারণির জন্য বিভিন্ন প্রশ্নের প্রয়োজন; তবে যেহেতু অ্যাপ্লিকেশনটির বেশিরভাগই এতে আগ্রহী হওয়ার কথা নয়, এই নেতিবাচক প্রভাব সম্ভবত সীমিত

11
একটি পার্টিশন টেবিল (ইসডিলটেডে) একক টেবিল ব্যবহার করে পারফরম্যান্সের সমস্যাগুলি সরিয়ে ফেলবে।
ইয়ান

1
@ যদি প্রতিটি কোয়েরি কোয়েডের মানদণ্ড (যা মূল প্রশ্নে মনে হয় না) হিসাবে আইসডিলেটেড সরবরাহ করা না হয়, বিভাজন এমনকি কর্মক্ষমতা হ্রাস পেতে পারে।
অ্যাড্রিয়ান শাম

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

1
যদি এটি কোনও পারফরম্যান্সের সমস্যা হয়ে যায় এবং আপনি একটি একক টেবিলের সুবিধা চান তবে এটিএলডেটেডে একটি সূচক দৃষ্টিভঙ্গি ব্যবহার করুন।
জেফো

10

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


7

"আমি যা লক্ষ্য করেছি তা হ'ল আমাদের সমস্ত সিস্টেম জুড়ে, নিয়মিত যে বিষয়গুলিতে আমরা ব্যবহারকারীদের টেবিলটি ক্রমাগত জিজ্ঞাসা করি তা ব্যবহারকারী মুছে ফেলা হয় না"

এটি আমাকে ডিজাইনের দুর্গন্ধযুক্ত করে। আপনার এই জাতীয় যুক্তি লুকানো উচিত। উদাহরণস্বরূপ, আপনার এমন কিছু করার পরিবর্তে "আপনার সিস্টেম জুড়ে" ব্যবহারের জন্য UserServiceএকটি পদ্ধতি সরবরাহ করা উচিত isValidUser(userId):

"ব্যবহারকারীর রেকর্ড পান, ব্যবহারকারীকে মুছে ফেলা হিসাবে পতাকাঙ্কিত করা হয়েছে কিনা তা পরীক্ষা করুন"।

মুছে ফেলা ব্যবহারকারীকে সঞ্চয় করার আপনার উপায়টি ব্যবসার যুক্তিগুলিকে প্রভাবিত করবে না।

এই জাতীয় ধরণের encapsulation দিয়ে উপরের যুক্তিটি আর আপনার অধ্যবসায়ের পদ্ধতির উপর প্রভাব ফেলবে না। তারপরে আপনি অধ্যবসায়ের সাথে সম্পর্কিত নীতিগুলি এবং ফোকাসগুলিতে আরও ফোকাস করতে পারেন।

বিবেচ্য বিষয়গুলির মধ্যে রয়েছে:

  • মুছে ফেলা রেকর্ডটি আর কতক্ষণ মুছে ফেলা উচিত?
  • মোছা রেকর্ডের অনুপাত কত?
  • যদি আপনি প্রকৃতপক্ষে টেবিল থেকে সরান তবে রেফারেন্টাল অখণ্ডতার (যেমন ব্যবহারকারীকে অন্য টেবিল থেকে উল্লেখ করা হয়) কোন সমস্যা হবে?
  • আপনি কি ব্যবহারকারীকে পুনরায় খোলার বিষয়ে বিবেচনা করছেন?

সাধারণত আমি সম্মিলিত উপায় গ্রহণ করতাম:

  1. মুছে ফেলা হিসাবে রেকর্ডটিকে পতাকাঙ্কিত করুন (এটি কার্যকরী প্রয়োজনের জন্য যেমন এসি পুনরায় খোলা রাখা, বা সম্প্রতি বন্ধ হওয়া এসি চেক করার মতো) Flag
  2. পূর্বনির্ধারিত সময়ের পরে, মুছে ফেলা রেকর্ডটি সংরক্ষণাগার সারণীতে (বুককিপিংয়ের উদ্দেশ্যে) সরিয়ে দিন।
  3. কিছু পূর্বনির্ধারিত সংরক্ষণাগার সময়ের পরে এটিকে সাফ করুন।

1
[স্পেসিফিকেশন 1: 'ক্রমাগত জিজ্ঞাসাবাদ' করার মাধ্যমে, আমার অর্থ হ'ল আমাদের কাছে এমন কোয়েরি রয়েছে: '... ব্যবহারকারীদের যেখানে' = '0 "এবং ...' কে সরিয়ে দেওয়া হয়েছে। উদাহরণস্বরূপ, আমরা যে প্রশ্নের সাথে যাতে একটি নির্দিষ্ট তারিখে সকল সভায় জন্য নিবন্ধিত সকল ব্যবহারকারীর আনা করার প্রয়োজন হতে পারে, আমরা আরো ব্যবহারকারীদের কোথায় isdeleted = "0" কাছ থেকে পেয়েছ - এই আমার পয়েন্ট পরিষ্কার করতে না] @Adrian
অ্যালান Beats

হ্যাঁ আরও পরিষ্কার। :) যদি আমি এটি করছি তবে আমি এটির পরিবর্তে শারীরিক / যৌক্তিক মোছার পরিবর্তে এটি ব্যবহারকারীর স্থিতি পরিবর্তন হিসাবে তৈরি করব। যদিও কোডের পরিমাণ হ্রাস পাবে না ("এবং isDeleted = '0'" vs "এবং" state <> 'TERMINATED' ") তবে সবকিছু অনেক বেশি যুক্তিসঙ্গত দেখায়, এবং পৃথক ব্যবহারকারীর রাষ্ট্র হওয়াও স্বাভাবিক। TERMINATED ব্যবহারকারীদের পর্যায়ক্রমিক-শুদ্ধিও সম্পাদন করা যেতে পারে, যেমনটি আমার আগের উত্তরে বলা হয়েছে)
অ্যাড্রিয়ান শাম

5

এই প্রশ্নের যথাযথ উত্তর দেওয়ার জন্য আপনাকে প্রথমে সিদ্ধান্ত নিতে হবে: "মুছে ফেলা" এর অর্থ এই সিস্টেম / অ্যাপ্লিকেশনটির প্রসঙ্গে কী?

উত্তর দেওয়ার জন্য যে প্রশ্ন, আপনি এখনও অন্য প্রশ্নের উত্তর করা প্রয়োজন: কেন রেকর্ড মুছে হচ্ছে?

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

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

হার্ড-মুছে ফেলার কয়েকটি খুব দুর্বল কারণও রয়েছে (পরবর্তী কারণগুলির জন্য আরও):

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

কেন, আপনি জিজ্ঞাসা করছেন, এটি সত্যিই এত বড় ব্যাপার? ভাল ওলে কি দোষ DELETE?

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

সুতরাং, নরম মোছা ভাল, তাই না? না সত্যিই না:

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

সত্যটি এই যে উভয় পদ্ধতিরই ভুল। মুছে ফেলা ভুল। যদি আপনি আসলে এই প্রশ্নটি জিজ্ঞাসা করছেন তবে এর অর্থ আপনি লেনদেনের পরিবর্তে বর্তমান অবস্থার মডেলিং করছেন। এটি ডাটাবেস-জমিতে একটি খারাপ, খারাপ অভ্যাস।

উদি দহন এটি মুছুন না - লিখে ফেলুন - এ সম্পর্কে লিখেছেন । নেই সবসময় কিছু বাছাই কাজটি লেনদেন, কার্যকলাপ , অথবা (আমার পছন্দের শব্দ) ঘটনা যা আসলে "ডিলিট" প্রতিনিধিত্ব করে। যদি আপনি পরবর্তীকালে পারফরম্যান্সের জন্য একটি "বর্তমান অবস্থা" টেবিলের মধ্যে অস্বীকৃতি জানাতে চান তবে এটি ঠিক আছে, তবে আপনি ট্রানজেকশনাল মডেলটিকে পেরেক দেওয়ার পরে করুন , আগে নয়।

এই ক্ষেত্রে আপনার "ব্যবহারকারী" রয়েছে। ব্যবহারকারীরা মূলত গ্রাহক। গ্রাহকদের আপনার সাথে একটি ব্যবসায়িক সম্পর্ক রয়েছে। এই সম্পর্কটি কেবল পাতলা বাতাসে বিলুপ্ত হয় না কারণ তারা তাদের অ্যাকাউন্ট বাতিল করে দেয়। আসলে কী হচ্ছে তা হ'ল:

  • গ্রাহক অ্যাকাউন্ট তৈরি করে
  • গ্রাহক অ্যাকাউন্ট বাতিল করে
  • গ্রাহক অ্যাকাউন্ট পুনর্নবীকরণ করে
  • গ্রাহক অ্যাকাউন্ট বাতিল করে
  • ...

প্রতিটি ক্ষেত্রে, এটি একই গ্রাহক এবং সম্ভবত একই অ্যাকাউন্ট (যেমন প্রতিটি অ্যাকাউন্ট পুনর্নবীকরণ একটি নতুন পরিষেবার চুক্তি)। তাহলে আপনি সারিগুলি মুছছেন কেন? এটি মডেল করা খুব সহজ:

+-----------+       +-------------+       +-----------------+
| Account   | --->* | Agreement   | --->* | AgreementStatus |
+-----------+       +-------------+       +----------------+
| Id        |       | Id          |       | AgreementId     |
| Name      |       | AccountId   |       | EffectiveDate   |
| Email     |       | ...         |       | StatusCode      |
+-----------+       +-------------+       +-----------------+

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

যদি আপনার আবেদনের ঘন ঘন প্রয়োজন সক্রিয় চুক্তি / অ্যাকাউন্টগুলির একটি তালিকা পেতে হয় তবে এটি একটি (সামান্য) কৌশলযুক্ত ক্যোয়ারী, তবে এর জন্য মতামতগুলি কী:

CREATE VIEW ActiveAgreements AS
SELECT agg.Id, agg.AccountId, acc.Name, acc.Email, s.EffectiveDate, ...
FROM AgreementStatus s
INNER JOIN Agreement agg
    ON agg.Id = s.AgreementId
INNER JOIN Account acc
    ON acc.Id = agg.AccountId
WHERE s.StatusCode = 'ACTIVE'
AND NOT EXISTS
(
    SELECT 1
    FROM AgreementStatus so
    WHERE so.AgreementId = s.AgreementId
    AND so.EffectiveDate > s.EffectiveDate
)

এবং তুমি করে ফেলেছ. এখন আপনার কাছে নরম মোছার সমস্ত সুবিধা সহ কিছু আছে তবে কোনও ত্রুটি নেই:

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

মোকাবেলা করার একমাত্র ইস্যুটি হল পারফরম্যান্স ইস্যু। বেশিরভাগ ক্ষেত্রেই এটি ক্লাস্টারড ইনডেক্সের কারণেই একটি অ-ইস্যু হিসাবে প্রমাণিত হয়েছে AgreementStatus (AgreementId, EffectiveDate)- সেখানে খুব কম আই / ও রয়েছে seeking তবে এটি যদি কোনও সমস্যা হয় তবে তা সমাধানের উপায় রয়েছে, ট্রিগারগুলি, সূচকযুক্ত / উপাদানযুক্ত দর্শনগুলি, অ্যাপ্লিকেশন-স্তরের ইভেন্টগুলি ইত্যাদি ব্যবহার করে solve

পারফরম্যান্স সম্পর্কে খুব তাড়াতাড়ি চিন্তা করবেন না - যদিও নকশাটি সঠিকভাবে পাওয়া আরও গুরুত্বপূর্ণ, এবং এই ক্ষেত্রে "ডান" মানে ডাটাবেসটিকে যেভাবে একটি ডাটাবেস ব্যবহার করা হয় তা ট্রানজেকশনাল সিস্টেম হিসাবে ব্যবহার করা ।


1

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

সুতরাং, আমি পৃথক ইতিহাসের সারণিগুলির প্রস্তাব দিই।


অবশ্যই ক্যাসকেড হিস্ট্রি-শিফট ব্যতীত আপনার ঠিক একই সমস্যা আছে?
গ্লেনাট্রন

আপনার সক্রিয় রেকর্ড সারণীতে নেই, না।
জেসি সি স্লিকার

তাহলে চাইল্ড রেকর্ডগুলির সাথে কী ঘটবে যারা এফকে ব্যবহারকারী সারণীর সাথে ব্যবহারের পরে ব্যবহারকারী সারণীটি বন্ধ করে দেয়?
glenatron

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

3
আপনার নরম মোছার প্রকৃত অর্থ কী তা নির্ভর করে। যদি এগুলিকে নিষ্ক্রিয় করার কেবল একটি উপায় হয় তবে একটি নিষ্ক্রিয় অ্যাকাউন্ট সম্পর্কিত রেকর্ডগুলি সামঞ্জস্য করার দরকার নেই। আমার কাছে কেবল ডেটা বলে মনে হচ্ছে। এবং হ্যাঁ, আমি এমন একটি সিস্টেমেও ডিজাইন করতে পারি নি, এটির মোকাবেলা করতে হবে। এর অর্থ এই নয় যে আপনার এটি পছন্দ করতে হবে।
JeffO

1

টেবিল দুটি ভাঙ্গা কল্পনা কল্পনা করা হবে।

এখানে দুটি খুব সাধারণ পদক্ষেপ যা আমি সুপারিশ করব:

  1. 'ব্যবহারকারীদের' টেবিলটির নাম 'এলিউসার্স' করুন।
  2. 'ব্যবহারকারীদের' হিসাবে একটি ভিউ তৈরি করুন 'মুছে ফেলা = মিথ্যা' এমন allusers থেকে * নির্বাচন করুন।

উত্তর দিতে বেশ কয়েক মাস-দেরির জন্য পিএস দুঃখিত!


0

আপনি যদি মুছে ফেলা অ্যাকাউন্টগুলি পুনরুদ্ধার করতে চান তবে কেউ যদি একই ইমেল ঠিকানাটি নিয়ে ফিরে আসে তবে আমি সমস্ত ব্যবহারকারীকে একই টেবিলে রেখে যেতে চাইতাম। এটি অ্যাকাউন্ট পুনরুদ্ধার প্রক্রিয়াটিকে তুচ্ছ করে তুলবে।

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


0

আপনি ব্যবহারে DBMS উল্লেখ করবেন না। আপনার যদি যথাযথ লাইসেন্স সহ অরাকল থাকে তবে আপনি ব্যবহারকারীর টেবিলটিকে দুটি বিভাজনে বিভক্ত করতে পারেন: সক্রিয় এবং মুছে ফেলা ব্যবহারকারীরা।


তারপরে ব্যবহারকারীদের মুছে ফেলার সময় আপনার অবশ্যই সারিগুলি একটি পার্টিশন থেকে অন্য বিভাগে সরিয়ে নিতে হবে, যা অবশ্যই পার্টিশনগুলি ব্যবহারের উদ্দেশ্যে নয় are
পিটার তারেক

@ পিটার: হাহ? আপনি মুছে ফেলা পতাকা সহ আপনার যে কোনও মানদণ্ডে বিভাজন করতে পারেন।
অ্যারোনআউট

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