বর্ণের () কলামটি নির্দিষ্ট মানগুলিতে সীমাবদ্ধ করবেন?


96

এমএস এসকিউএল সার্ভার ২০০৮-তে বর্ণা কলামের জন্য 4 স্বতন্ত্র মান উদাহরণের জন্য নির্দিষ্ট করার কোনও উপায় আছে?

উদাহরণস্বরূপ, আমার ফ্রিকোয়েন্সি (ভারচার) নামে একটি কলাম দরকার যা কেবলমাত্র 'দৈনিক', 'সাপ্তাহিক', 'মাসিক', 'বার্ষিক' সম্ভাব্য মান হিসাবে গ্রহণ করে

টেবিলটি তৈরি করার সময় কি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওর মধ্যে সেট করা সম্ভব?


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

উত্তর:


129

আপনি কি ইতিমধ্যে check constraintসেই কলামটিতে একটি যোগ করার দিকে তাকিয়েছেন যা মানগুলিকে সীমাবদ্ধ করে? কিছুটা এইরকম:

CREATE TABLE SomeTable
(
   Id int NOT NULL,
   Frequency varchar(200),
   CONSTRAINT chk_Frequency CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
)

4
আপনাকে ধন্যবাদ - এটি দুর্দান্ত কাজ করেছে। যদিও আমাকে একটি ছোট পরিবর্তন করতে হয়েছিল তা হ'ল "ফ্রিকোয়েন্সি IN ...." বন্ধনীতেও আবদ্ধ থাকতে হয়েছিল। এসকিউএল সার্ভার স্টুডিওর কোনও কারণ ছাড়াই এটি পছন্দ হয়নি।
আদম

4
এই সীমাবদ্ধতা চেক কেস সংবেদনশীল?
RWendi

4
আমি মনে করি আপনি চতুর্থ লাইনের পরে কোমা মিস করেছেনFrequency varchar(200)
বিল ওভারফ্লো

আরওয়েন্দি - ডিফল্ট এসকিউএল সার্ভারের কোলেশন হ'ল কেস-সংবেদনশীল, যা ডাটাবেস স্তরে প্রযোজ্য। আরও তথ্য এখানে stackoverflow.com/questions/1439485/...
jwoe

57

আপনি একটি চেক সীমাবদ্ধতা চান ।

চেক সীমাবদ্ধতাগুলি লজিক্যাল এক্সপ্রেশন থেকে বৈধ মানগুলি নির্ধারণ করে যা অন্য কলামের ডেটার ভিত্তিতে নয়। উদাহরণস্বরূপ, বেতন কলামের মানগুলির সীমা একটি চেক সীমাবদ্ধতা তৈরি করে সীমাবদ্ধ করা যেতে পারে যা কেবলমাত্র data 15,000 থেকে ,000 100,000 এর মধ্যে থাকা ডেটাগুলির জন্য অনুমতি দেয়। এটি বেতনগুলি নিয়মিত বেতনের সীমা ছাড়িয়ে .োকা থেকে বাধা দেয়।

আপনি যেমন কিছু চান:

ALTER TABLE dbo.Table ADD CONSTRAINT CK_Table_Frequency
    CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))

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


4
এই উত্তরটিও ভাল ছিল .. কেন আমরা একের বেশি গ্রহণ করতে পারি না !! :)
আদম

4
হ্যাঁ, এটি এর চেয়ে ভাল :), +1
ওয়েস কুরেশি

12

ব্যক্তিগতভাবে, আমি এটিকে ক্ষুদ্রতম হিসাবে কোড করব এবং:

  • হয়: ক্লায়েন্টের পাঠ্যে এটি পরিবর্তন করুন, 1 থেকে 4 এর মধ্যে সীমাবদ্ধতা পরীক্ষা করুন
  • বা: একটি বিদেশী কী সহ একটি সারণী ব্যবহার করুন use

কারণ:

  • টেক্সিন্ট সংরক্ষণ করতে এটি গড়ে 8 বাইট লাগবে, টিনিনেন্টের জন্য 1 বাইট কয়েক মিলিয়ন সারিতে এটি একটি পার্থক্য আনবে।

  • কোলেশন সম্পর্কে কী? "ডেইলি" কি "ডেইলি" এর মতো? এই ধরণের তুলনা করতে এটি সংস্থান গ্রহণ করে।

  • অবশেষে, আপনি যদি "দ্বিপক্ষীয়" বা "আওয়ারলি" যুক্ত করতে চান? এটির জন্য একটি স্কিমা পরিবর্তন প্রয়োজন যখন আপনি কেবল সন্ধানের সারণিতে নতুন সারি যুক্ত করতে পারতেন।


5

আপনি যখন কোনও সারণি সম্পাদনা করছেন
-> সীমাবদ্ধতাগুলি পরীক্ষা করুন -> যুক্ত করুন -> মত Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly')প্রকাশের ক্ষেত্রের মতো এবং (নাম) ক্ষেত্রে একটি ভাল বাধা নাম লিখুন।
তুমি পেরেছ.

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