ওরাকলে বুলিয়ান ফিল্ড


145

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

  1. একটি পূর্ণসংখ্যা ব্যবহার করুন এবং এটিতে 0 বা 1 ব্যতীত অন্য কোনও কিছু বরাদ্দ দেওয়ার জন্য বিরক্ত করবেন না।

  2. 'ওয়াই' বা 'এন' দিয়ে একটি মাত্র দুটি মান হিসাবে একটি চর ক্ষেত্র ব্যবহার করুন।

  3. চেক সীমাবদ্ধতার সাথে একটি এনাম ব্যবহার করুন।

অভিজ্ঞ ওরাকল বিকাশকারীরা কি জানেন যে কোন পদ্ধতির পছন্দ / নীতিগত?


195
আমি আশা করি ওরাকেলের কোনও wallডেটা টাইপ থাকে যাতে আমি বুলিয়ান ব্যবহার করার সময় এর বিরুদ্ধে আমার মাথাটি ছিন্ন করতে পারি।
গ্রেগ

উত্তর:


82

আমি এই লিঙ্কটি দরকারী বলে মনে করি।

এখানে প্রতিটি অনুচ্ছেদের কিছু উপকার / বিভক্তি হাইলাইট করা অনুচ্ছেদ রয়েছে।

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

মূলত তারা দক্ষতার জন্য, ব্যবহারের জন্য 2 নম্বর পদ্ধতিটির পক্ষে কথা বলে

  • 0/1 এর মান (জেডিবিসি এর সাথে আন্তঃব্যবহারের কারণে getBoolean()ইত্যাদি) একটি চেক সীমাবদ্ধতার সাথে
  • এক ধরণের CHAR (কারণ এটি NUMBER এর চেয়ে কম স্থান ব্যবহার করে)।

তাদের উদাহরণ:

create table tbool (bool char check (bool in (0,1));
insert into tbool values(0);
insert into tbool values(1);`

31
ভাষা নির্ভরতা হওয়ায় আমি 'এন' এবং 'ওয়াই' ব্যবহারের বিরুদ্ধে পরামর্শ দিই। অ্যাংলোফোনরা কখনও কখনও ভুলে যায় যে পৃথিবীর বেশিরভাগ অংশই ওয়াই অক্ষর দিয়ে সত্যের ধারণাকে প্রতিনিধিত্ব করে না contrast বিপরীতে, 0 এবং 1 এর অর্থ ভাষার বাধা অতিক্রম করে ধ্রুবক।
অ্যান্ড্রু স্পেন্সার

7
বুলিয়ান মান হিসাবে 0 এবং 1 কম্পিউটার বিজ্ঞানের সাথে সামঞ্জস্যপূর্ণ নয় - শেল স্ক্রিপ্ট টাইপের ভাষাগুলিতে সাফল্যের হিসাবে 0 থাকে এবং ব্যর্থতার হিসাবে শূন্য হয় না, আর সি টাইপের ভাষাগুলিতে ব্যর্থতা হিসাবে 0 থাকে এবং সাফল্যের হিসাবে শূন্য থাকে না।
ফিল

41
বুলিয়ান মান হিসাবে , তারা দ্ব্যর্থহীন। প্রক্রিয়া রিটার্ন কোডগুলি বুলিয়ান মান হয় না।
অ্যান্ড্রু স্পেন্সার

13
প্রদত্ত লিঙ্ক থেকে এই পুরো অনুচ্ছেদটি কেন এই উত্তরে উপেক্ষা করা হয়েছিল? "সর্বাধিক দেখা যায় ডিজাইনটি হ'ল বহু বুলিয়ান-জাতীয় পতাকা ব্যবহার করুন যা ওরাকল-এর ডেটা ডিকশনারি দেখায়, সত্যের জন্য 'Y' এবং মিথ্যা জন্য 'এন' নির্বাচন করে। তবে, জেডিবিসি, ওসিসিআইয়ের মতো হোস্ট পরিবেশের সাথে সঠিকভাবে ইন্টারেক্ট করার জন্য, এবং অন্যান্য প্রোগ্রামিং এনভায়রনমেন্টের জন্য, মিথ্যাটির জন্য 0 এবং সত্যের জন্য 1 টি নির্বাচন করা ভাল, যাতে এটি getBoolean এবং setBoolean ফাংশনগুলির সাথে সঠিকভাবে কাজ করতে পারে। " তারা বলে যে 'ওয়াই / এন' সাধারণ থাকলেও হোস্ট এনভায়রনমেন্টের সাথে সামঞ্জস্যতা বাড়াতে '0/1' ব্যবহার করার পরামর্শ দেওয়া হয়।
justin.hughey

28

ওরাকল নিজেই বুলিয়ান মানগুলির জন্য Y / N ব্যবহার করে। সম্পূর্ণতার জন্য এটি লক্ষ করা উচিত যে pl / sql এর একটি বুলিয়ান টাইপ রয়েছে, এটি কেবলমাত্র টেবিলগুলি নয়।

আপনি যদি ক্ষেত্রটি ব্যবহার করে রেকর্ডটি প্রক্রিয়া করা প্রয়োজন কিনা তা নির্দেশ করতে আপনি Y এবং NULL কে মান হিসাবে বিবেচনা করতে পারেন। এটি একটি খুব ছোট (দ্রুত পড়ুন) সূচক তৈরি করে যা খুব কম স্থান নেয়।


7
+1 ওয়াই / এন ব্যবহার করে ওরাকল অভ্যন্তরীণ ভিউ এবং সারণী সম্পর্কে ভাল বক্তব্য point ওরাকল যদি সেভাবে করে তবে তা অবশ্যই ঠিক হবে! :)
জেফ্রি কেম্প

আপনি কী ব্যাখ্যা করতে পারেন যে ওয়াই এবং এনএলএল কীভাবে ওয়াই এবং এন এর তুলনায় একটি ছোট সূচক তৈরি করে?
স্টাইল স্টাইল

6
অরাকলগুলিতে NULL সূচিযুক্ত নয়, সুতরাং যদি আপনার সূচকে কয়েকটি Y অক্ষর থাকে তবে বেশিরভাগ NULL থাকে তবে আপনার খুব ছোট সূচক হবে।
লেইফ রিফেল

25

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


19

সর্বোত্তম বিকল্পটি 0 এবং 1 (সংখ্যা হিসাবে - অন্য উত্তরটি স্থান এবং দক্ষতার জন্য 0 এবং 1 টি CHAR হিসাবে প্রস্তাব দেয় তবে এটি আমার পক্ষে কিছুটা বাঁকানো), এই মানগুলিতে বিষয়বস্তু সীমাবদ্ধ করার জন্য নন নুল এবং একটি চেক সীমাবদ্ধতা ব্যবহার করে। (আপনার যদি কলামটি অবিচ্ছেদ্য হওয়ার প্রয়োজন হয় তবে এটি আপনি যে বুলিয়ান ব্যবহার করছেন তা নয়, তবে তিনটি মানের একটি গণনা রয়েছে ...)

0/1 এর সুবিধা:

  • ভাষা স্বাধীন। 'ওয়াই' এবং 'এন' সবাই যদি এটি ব্যবহার করে তবে তা ঠিক থাকবে। তবে তারা তা করে না। ফ্রান্সে তারা 'ও' এবং 'এন' ব্যবহার করে (আমি এটি নিজের চোখে দেখেছি)। তারা সেখানে 'ই' এবং 'কে' ব্যবহার করে কিনা তা দেখার জন্য আমি ফিনল্যান্ডে কোনও প্রোগ্রাম করি নি - সন্দেহ নেই যে তারা এর চেয়ে বেশি স্মার্ট, তবে আপনি নিশ্চিত হতে পারবেন না।
  • ব্যাপকভাবে ব্যবহৃত প্রোগ্রামিং ভাষাগুলিতে অনুশীলনের সাথে একমত (সি, সি ++, পার্ল, জাভাস্ক্রিপ্ট)
  • অ্যাপ্লিকেশন স্তর যেমন হাইবারনেট সহ আরও ভাল খেলে
  • আরও সাফল্যযুক্ত এসকিউএল বাড়ে, উদাহরণস্বরূপ, কতগুলি কলা তার select sum(is_ripe) from bananasপরিবর্তে select count(*) from bananas where is_ripe = 'Y'বা এমনকি (ইউক) খেতে প্রস্তুত তা নির্ধারণ করতেselect sum(case is_ripe when 'Y' then 1 else 0) from bananas

'Y' / 'N' এর সুবিধা:

  • 0/1 এর চেয়ে কম জায়গা নেয়
  • এটি ওরাকল পরামর্শ দেয়, তাই কিছু লোকের অভ্যস্ত হতে পারে

পারফরম্যান্স লাভের জন্য অন্য পোস্টারটি 'ওয়াই' / নালার পরামর্শ দিয়েছে। যদি আপনি প্রমাণ করেছেন যে আপনার পারফরম্যান্সের দরকার আছে তবে যথেষ্ট ন্যায্য, তবে অন্যথায় এড়াতে হবে কারণ এটি কম প্রাকৃতিক ( some_column is nullপরিবর্তে some_column = 0) অনুসন্ধান করা এবং বাম জোয়ারে আপনি অস্তিত্ব রেকর্ডের সাথে মিথ্যাবাদকে আবদ্ধ করবেন।


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

1
হ্যাঁ, সত্য-মিথ্যা-অজানা প্রয়োজন হতে পারে, যদিও আমি যদি পিক (আমি যা) থাকতাম তবে আমি বলতাম এটি সত্যই বুলিয়ান হিসাবে বর্ণনা করা উচিত নয়, কারণ এটি তা নয়।
অ্যান্ড্রু স্পেন্সার

2
যদি আপনার সেই বাছাই হয়ে যায় তবে আপনি প্রতিটি ডেটা টাইপের জন্য একই যুক্তি তৈরি করতে পারেন। কঠোর সংজ্ঞা সংজ্ঞা অনুসারে, দ্বিগুণ (আমার মনে হয় দ্বিগুণ দৈর্ঘ্যের দ্বিগুণ পরিপূর্ণ ভাসমান পয়েন্ট বলতে হবে), বাইনারি, স্ট্রিং ইত্যাদি সমস্ত মান অনুমান করা হয় তবে ডাটাবেস বাস্তবায়ন সর্বদা নাল মান বিকল্প যুক্ত করে বুলিয়ান কোনও আলাদা নয়
মাইক

1
সত্য, আপনার পদ্ধতির প্লাস নোটে যদি আপনি নিজের নম্বরটি সঠিকভাবে কনফিগার করেন তবে এটি একটি চর ক্ষেত্রের মতো একই একক বাইটেও সংরক্ষণ করা যেতে পারে, যা 0/1 ব্যবহারের বিরুদ্ধে আকারের যুক্তি বাতিল করে দেয়, আমি বর্তমানে লিঙ্কটি খুঁজে পাই না তবে কনফিগারেশনের উপর নির্ভর করে এক নম্বর থেকে 22 বাইটের মধ্যে স্টোরেজ রয়েছে
মাইকটি

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

5

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

যদি আপনি ওরাকলিসের অন্যতম প্রধান হঞ্চোসের সাথে এই প্রশ্নের গভীরভাবে আলোচনা করতে চান, তবে টম কিতে এ সম্পর্কে কী বলছেন তা দেখুন Here


1/0 কে "কম স্মৃতি দক্ষ" বলা হয় তবে ... আমি এটি আরও বেশি পছন্দ করি (এবং হাইবারনেট সম্ভবত একটি বুলিয়ান জন্য 1/0 প্রয়োজন)
রজারডপ্যাক

1/0 হ'ল হাইবারনেট একটি বুলিয়ান জন্য ডিফল্ট তবে আপনি নিজের পছন্দমত যে কোনও কাস্টম ম্যাপিং সংজ্ঞায়িত করতে পারেন।
অ্যান্ড্রু স্পেন্সার

@ আরগারডপ্যাক হ'ল কারণ চার্চ ক্ষেত্রটি 1 বাইট, বা এনসিআর এর জন্য 2 বাইট, যেখানে এটি সংখ্যার সংজ্ঞা দেওয়া হয় তার উপর নির্ভর করে 1 থেকে 22 বাইট হতে পারে
মাইকটি

4

আমি বুলিয়ান হিসাবে 'Y' / 'N' ব্যবহারের ক্ষেত্রে আমার বেশিরভাগ কাজ করেছি। সেই প্রয়োগের সাথে সাথে আপনি কিছু কৌশল অবলম্বন করতে পারেন:

  1. সত্য সারিগুলি গণনা
    করুন : নির্বাচন করুন সুম (ক্যাসেন বুলিয়ান_এফএলজি = 'ওয়াই' তারপর 1 টি এলএস 0) এক্স থেকে

  2. সারিগুলিকে
    গোষ্ঠীকরণ করার সময়, "যদি এক সারিটি সত্য হয় তবে সমস্তই সত্য" যুক্তি প্রয়োগ করুন :
    বিপরীতভাবে Y থেকে ম্যাক্স (BOOLEAN_FLAG) নির্বাচন করুন , এক সারিটি মিথ্যা হলে গ্রুপিং মিথ্যা বল প্রয়োগ করতে MIN ব্যবহার করুন।


4
প্রকৃতপক্ষে দেখানো উদাহরণগুলি 0/1 পদ্ধতির জন্যও দরকারী - এবং, আইএমএইচও, আরও দ্রুত।
igorsantos07

2

ওরাকল ডাটাবেসের একটি বিদ্যমান টেবিলটিতে "বুলিয়ান" কলাম যুক্ত করে ( numberপ্রকার ব্যবহার করে ) স্বীকৃত উত্তরটি বাস্তবায়নের একটি কার্যকারী উদাহরণ :

ALTER TABLE my_table_name ADD (
my_new_boolean_column number(1) DEFAULT 0 NOT NULL
CONSTRAINT my_new_boolean_column CHECK (my_new_boolean_column in (1,0))
);

এই একটি নতুন কলাম তৈরি করে my_table_nameবলা my_new_boolean_column0. ডিফল্ট মান কলাম গ্রহণ করবে না NULLমূল্যবোধ ও উভয় গৃহীত মান সীমিত 0বা 1


1

আমাদের ডাটাবেসে আমরা এমন এনাম ব্যবহার করি যা নিশ্চিত করে যে আমরা এটি সত্য বা মিথ্যা পাস করেছি। আপনি যদি প্রথম দুটি উপায়ে এটি করেন তবে উপযুক্ত ডিজাইন না দিয়ে পূর্ণসংখ্যার সাথে নতুন অর্থ যুক্ত করা শুরু করা, বা Y, y, N, n, T, t, এবং চারটির ক্ষেত্রটি সমাপ্ত করে শেষ করা খুব সহজ এফ, এফ মান এবং কোডটির কোন বিভাগটি কোন টেবিলটি ব্যবহার করে এবং কোনটি সত্যের সংস্করণ ব্যবহার করছে তা মনে রাখতে হবে।

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