ডেটাবেসে আমার কোনও ইমেল ঠিকানা সঞ্চয় করা উচিত?


44

আমি বুঝতে পারি যে একটি 254 অক্ষরের ইমেল ঠিকানাটি বৈধ, তবে আমি যেগুলি প্রয়োগ করেছি সেগুলি ভার্চর (60) থেকে ভারচর (80) বা সমমানের ব্যবহার করে tend উদাহরণস্বরূপ: এই এসকিউএল সার্ভারের সুপারিশটিতে ভারচর (80) বা এই ওরাকল উদাহরণ ব্যবহার করা হয়

সর্বোচ্চ 254 চরিত্রটি সর্বোচ্চ ব্যবহার না করার কোনও কারণ আছে কি? সংজ্ঞা অনুসারে কোনও বার্চার কি ডেটা ধরে রাখতে প্রয়োজনীয় স্টোরেজটি ব্যবহার করে না?

সেখানে কি উল্লেখযোগ্য পারফরম্যান্সের প্রভাব / বাণিজ্য বন্ধ রয়েছে যার ফলে এতগুলি বাস্তবায়ন সম্পূর্ণ 254 সম্ভাব্য অক্ষরের চেয়ে কম ব্যবহার করতে পারে?

উত্তর:


45

আমি সবসময় ব্যবহার করেছি VARCHAR(320)। কারণটা এখানে. মানটি নিম্নলিখিত সীমাবদ্ধতাগুলি নির্দেশ করে:

  • "স্থানীয় অংশ" (ব্যবহারকারীর নাম) এর জন্য 64 টি অক্ষর।
  • @প্রতীকটির জন্য 1 টি অক্ষর ।
  • ডোমেন নামের 255 টি অক্ষর।

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

এটি বলেছিল, আপনি এখন সবচেয়ে খারাপের জন্য প্রস্তুত করতে পারেন, যদি আপনি চান (এবং যদি আপনি এসকিউএল সার্ভার ২০০৮ আর 2 বা আরও ভাল ডেটা সংক্ষেপণ ব্যবহার করেন তবে আপনি ইউনিকোড সংকোচনের মাধ্যমে উপকৃত হবেন, যার অর্থ আপনি কেবলমাত্র অক্ষরের জন্য কেবলমাত্র 2 বাইট জরিমানা প্রদান করবেন) এটা)। এইভাবে আপনি নিজের কলামটি নিজের ইচ্ছাকে আরও প্রশস্ত করতে পারবেন এবং লোকেরা যাতে চান সেখানে যে কোনও দীর্ঘ-জঞ্জাল স্টাফ করতে দিতে পারেন - তারা আপনাকে যেমন কোনও জাঙ্ক দেয় ঠিক তেমন কোনও ই-মেইল পাবেন না sertোকানো ব্যর্থ হলে একটি ইমেল পান। সমস্যাটি হ'ল যদি আপনি অবৈধ জঞ্জাল প্রবেশ করতে দেন, আপনিএটি মোকাবেলা করতে হবে। এবং আপনি এটি আকারটি তৈরি করুন তা বিবেচনা করে না - কেউ যদি 320-অক্ষর কলামে 400 টি অক্ষর স্টাফ করার চেষ্টা করে তবে কেউ 1025 অক্ষরকে 1024-অক্ষর কলামে স্টাফ করার চেষ্টা করবে। কোনও বুদ্ধিমান ব্যক্তির কোনও ই-মেইল ঠিকানা> 320 টি অক্ষর থাকার কোনও কারণ নেই যদি না তারা এটিকে সিস্টেমের সীমানা স্পষ্টভাবে পরীক্ষা করতে ব্যবহার করে।

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


আড্ডায় পিংয়ের জন্য @ সাইপারকিউকে ধন্যবাদ সম্পাদনা করুন

একদিকে যেমন, সম্ভবত আপনি পুরো ঠিকানাটি প্রথম একক কলামে ডাম্প করতে চান না। সাধারণকরণ প্রস্তাব দিতে পারে যে আপনি @hotmail.comযখন 15 মিলিয়ন বার সঞ্চয় করতে চান না তখন যখন খুব বেশি স্কিনিয়ার এফ কে ইন্ট ঠিকঠাক কাজ করে এবং পরিবর্তনশীল দৈর্ঘ্যের কলামগুলির অতিরিক্ত ওভারহেড না থাকে। আপনি ব্যবহারকারীর নামটি সাধারণ হিসাবে ব্যবহার করতে পারেন john.smith@hotmail.comএবং john.smith@gmail.comএকটি সাধারণ ব্যবহারকারীর নাম হিসাবে ভাগ করে নিতে পারেন - তারা একে অপরকে চেনে না তবে আপনার ডাটাবেসটি সেটির কোনও চিন্তা করে না।

আমি এর কয়েকটি সম্পর্কে এখানে বলেছি:

http://www.mssqltips.com/sqlservertip/2657/storing-email-addresses-more-efficiently-in-sql-server/

http://www.mssqltips.com/sqlservertip/2671/storing-email-addresses-more-efficiently-in-sql-server--part-2/

এটি উপরের 254-চরিত্রের সীমাতে চ্যালেঞ্জগুলির পরিচয় দেয়, যেহেতু কোনও বৈধ 255-অক্ষর ডোমেনটি একটি বৈধ 1-অক্ষর লোকালপার্টের সাথে একত্রিত হলে কী ঘটে তা নিয়ে sensক্যমত্য বলে মনে হয় না। এটি বিশ্বব্যাপী বেশিরভাগ সার্ভারদের দ্বারা গ্রহণ করা উচিত তবে এই 254-চরিত্রের সীমাটি লঙ্ঘন করে বলে মনে হচ্ছে। Domainsইমেল ঠিকানাগুলির জন্য দৈর্ঘ্যের উপর কৃত্রিমভাবে কম সীমাবদ্ধতা রয়েছে এমন কোনও টেবিলটি তৈরি করেন , যখন ডোমেনটি বৈধ 255-অক্ষরের URL হিসাবে পুনরায় ব্যবহার করা যেতে পারে?


আমি এই পদ্ধতির পছন্দ করি তবে ইমেলের স্বতন্ত্রতা সম্পর্কে কী? এটি কিভাবে পরিচালিত হয়?
রবার্তো রিজ্জি

2
@ রুবার্তোরিজি ডোমেনআইডি + লোকালপার্ট বা তদ্বিপরীত সংমিশ্রণে একটি অনন্য বাধা বা প্রাথমিক কী।
অ্যারন বারট্র্যান্ড

5

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

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

যা আমাকে আমার পরবর্তী পয়েন্টে নিয়ে যায়। ডাটাবেস সম্ভবত ডেটা স্তর হয়। অ্যাপ্লিকেশন স্তরটি কী ব্যবহার করে? উদাহরণস্বরূপ, আপনার যদি এমন কোনও অ্যাপ্লিকেশন থাকে যেখানে আপনি কেবল ইমেল ঠিকানার জন্য ৮০ টি অক্ষর লিখতে পারেন তবে আপনি কেন ডেটা টাইপটিকে আরও বড় হতে চান? ব্যবসায়ের দুটি প্রশ্নের উত্তর দেওয়া দরকার:

  1. এটা কি হতে পারে?
  2. এটা কি হওয়া উচিত ?

তবেই আপনার উত্তর হবে।

সংজ্ঞা অনুসারে কোনও বার্চার কি ডেটা ধরে রাখতে প্রয়োজনীয় স্টোরেজটি ব্যবহার করে না?

হ্যা এবং না. পরিবর্তনশীল দৈর্ঘ্যের ডেটার দৈর্ঘ্য রেকর্ড করার জন্য এটি এক ধরণের অফসেট হতে চলেছে।


3

আরএফসি 5321 (বর্তমান এসএমটিপি স্পেক, আরএফসি 2821 কে আবদ্ধ করে) বলেছেন:

ব্যবহারকারীর নাম বা অন্যান্য স্থানীয় অংশের সর্বাধিক মোট দৈর্ঘ্য 64৪ অক্টেট। একটি ডোমেন নাম বা সংখ্যার সর্বোচ্চ মোট দৈর্ঘ্য 255 অক্টেট

সুতরাং 64 + 255 + @ সাইনটি ভ্রচার (320) বোঝায়। আপনার সম্ভবত এটির কখনই প্রয়োজন হবে না তবে এটি পাওয়া নিরাপদ case


4
সঠিক সীমা 254. হয় rfc-editor.org/errata_search.php?rfc=3696&eid=1690
নিল McGuigan

1

VARCHAR এর যে কোনও প্রকারের পরিবর্তন প্রয়োজন হিসাবে ডেটা ব্লকে কেবলমাত্র তত স্থান ব্যবহার করে। দৈর্ঘ্য সংরক্ষণের জন্য অতিরিক্ত বাইটগুলি স্থানের তুলনায় তুচ্ছ হয় যা পরিবর্তে একটি নির্দিষ্ট দৈর্ঘ্যের CHAR ব্যবহার করে নষ্ট হবে।

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

একটি ডাটাবেস ডিজাইন একটি দৈহিক টুকরো কাগজের মতো যাতে এটি আকার হিসাবে কঠোর সীমা নির্ধারণ করে। একটি কাগজের পৃষ্ঠা বড় করা যায় না। এই সাদৃশ্যগুলিতে, অ্যাপ্লিকেশন প্রোগ্রামটি পৃষ্ঠায় মুদ্রিত ফর্মের মতো। ফর্মটিতে আমরা কতটা ডেটা ধরে রাখতে পারি তা সামঞ্জস্য করার জন্য অনেক কিছু করা যায়।

যদিও একটি ভিআচআরএআরআরের আকার বাড়ানোর কমান্ডটি সহজ দেখাচ্ছে এবং তাত্ক্ষণিকভাবে একটি ছোট টেবিলের উপর চালানো যেতে পারে তবে হাজার টেবিলে বা তারও বেশি সংখ্যক টেবিলের উপর এমনটি করার ফলে সমস্ত ডেটা এবং সূচক ব্লকগুলি পুনরায় তৈরি করার সময় কিছুটা ডাটাবেস নিরবতার প্রয়োজন হতে পারে। একটি উপায় হ'ল বৃহত্তর কলামগুলির সাহায্যে সবকিছুকে একটি নতুন টেবিলের অনুলিপি করা। যে কৌশলই ব্যবহার করা হোক না কেন, এটি একটি বড়-লোমশ-লেনদেন। এইভাবে, একবার প্রোডাকশন টেবিলটি লোড হয়ে যাওয়ার পরে আপনার ভিআরচএআরএআর কলামের আকারটি বড় আকারে পরিবর্তনযোগ্য consider


1

ইতিমধ্যে এখানে দুর্দান্ত উত্তরের একটি মন্তব্য হিসাবে:

প্রথমত, আপনি যদি ক্ষেত্রটি তৈরি করেছেন varchar(240)এবং আপনি পরে এটি আরও দীর্ঘ ক্ষেত্রে পরিবর্তন করতে চান, বলুন varchar(320), এই পরিবর্তনটি অবশ্যই ডাটাবেস সার্ভারে একটি তুচ্ছ ক্রিয়াকলাপ হওয়া উচিত - অবশ্যই আপনার ডেটাবেস পণ্যের উপর নির্ভর করে।

alter table Schema.Object alter column EmailAddress varchar(320) ;

দ্বিতীয়ত, গড় সারি আকার এবং পৃষ্ঠার আকারের উপর নির্ভর করে varchar(320)পরিবর্তে ব্যবহার করা varchar(240)বরাদ্দকৃত পৃষ্ঠাগুলির সংখ্যা পরিবর্তন করতে পারে না (ডিস্কের স্থানটি আসলে টেবিলের সাহায্যে নেওয়া হয়েছে)।

তৃতীয়ত, উপরে কেউ ইমেল ঠিকানা যাচাই করার বিষয়ে কথা বলেছেন। আমি দাবী করছি যে কোনও ইমেল ঠিকানা যাচাই করার একমাত্র নিশ্চিত উপায় এবং এটিতে একটি ইমেল প্রেরণ। :-)


0

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

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


0

এসকিউএল ব্যবহার করা DOMAIN

আপনি যদি কোনও এন্টারপ্রাইজ ডাটাবেস সার্ভার ব্যবহার করে থাকেন তবে DOMAINকিছুটা বৈধতার স্তর হিসাবে কোনও ইমেল ঠিকানা সঞ্চয় করতে হবে । ডোমেনগুলি এসকিউএল স্পেসিফিকেশনে নির্দিষ্ট করা হয়

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

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

  • DOMAINএইচটিএমএল 5 টি ইমেলের উপর একটি কাস্টম তৈরি করুন ।
  • অথবা, আরএফসি 822 এর উপরে, আরএফসি 2822, আরএফসি5322 ইমেলের নির্দিষ্ট বৈশিষ্ট্য।
  • একটি কাস্টম তৈরি করুন DOMAINযা পরীক্ষার সময় একটি এমএক্স-রেকর্ডের জন্য সার্ভারটি পরীক্ষা করে।

আমি এই উত্তরে এই বিকল্পগুলি মূল্যায়ন করি যা পোস্টগ্রিজ এসকিউএল-এর জন্য নির্দিষ্ট

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