PDA

View Full Version : سوال: انتخاب تایپ مناسب برای ذخبره شماره موبایل و کد ملی



aroshanzamir
جمعه 16 خرداد 1393, 00:11 صبح
سلام دوستان

برای ذخیره شماره موبایل و کد ملی از چه تایپی در دیتابیس و سی شارپ استفاده کنم

دوستان دمتون گرم دلیل انتخاب اون تایپ هم بگید

با تشکر از همه شما

NASA's Spaceman
جمعه 16 خرداد 1393, 09:54 صبح
سلام
نوع String بهترین هست
چون این ها اعداد بزرگی هستن و متغیر عددی نمیتونه اون ها رو نگه داری کنه و تنها راه شما متغیر های رشته ای هستن
با سپاس Spaceman

aroshanzamir
جمعه 16 خرداد 1393, 10:13 صبح
تایپ Decimal من امتحان کردم می تونه
این شماره ها را توخودش نگه داره که ؟

us1234
جمعه 16 خرداد 1393, 10:45 صبح
تایپ Decimal من امتحان کردم می تونه
این شماره ها را توخودش نگه داره که ؟

امکانش هست ولی با 0 اول شماره تلفن ها به مشکل میخورد بهترین راه همونه که دوستمون بالا تر گفتن .

ASKaffash
جمعه 16 خرداد 1393, 20:07 عصر
سلام
اگر حجم اطلاعات زیاد نیست String راحت است در غیر اینصورت اشتباه است (بعلت حجم داده ها / حجم ایندکسهای مرتبط / سایز Packet ها در شبکه / ... ) و بهترین انتخاب int است چون 4 بایت است به شکل نگاه کنید اختلاف را متوجه می شوید در ضمن چون طول شماره موبایل و کد ملی ثابت است (هردو 10 رقم هستند) در هنگام دریافت با دستور Select خودتان با صفر پشت عدد موضوع را هندل کنید

gjmkdyttyhujk
جمعه 16 خرداد 1393, 20:37 عصر
با احترام به نظر دوستان به نظر من varchar(10) بهتر هست چون اگه مقداری در اونها ذخیره نشه حجمی که اون فیلد اشغال میکنه صفر میشه و حجم دیتابیس رو بی خودی زیاد نمیکنه.

Mahmoud.Afrad
جمعه 16 خرداد 1393, 21:14 عصر
باز هم مسئله اینه که اگر اطلاعات ذخیره بشه کدوم بهینه تر هست. توی عکسی که ASKaffash (http://barnamenevis.org/member.php?63973-ASKaffash) گذاشتن Length رو مقایسه کنید متوجه میشید کدوم حجم کمتری اشغال میکنه.

alireza_s_84
جمعه 16 خرداد 1393, 22:02 عصر
سلام دوستان

برای ذخیره شماره موبایل و کد ملی از چه تایپی در دیتابیس و سی شارپ استفاده کنم

دوستان دمتون گرم دلیل انتخاب اون تایپ هم بگید

با تشکر از همه شما

اگه از SqlServer استفاده میکنید بهتره از نوع داده ی bigint استفاده کنید (تنها 8 بایت از حافظه رو مصرف میکنه) در حالیکه با توجه به طول شماره موبایل (10 کارکتر بدون احتساب 0 ابتدا) در صورت ذخیره بصورت String ما نیاز به 22 بایت فضا داریم (هر کارکتر 2 بایت رو اشغال میکنه).
از نوع داده ی int هم نمیتونید استفاده کنید چون نهایت مقداری که میتونه بگیره 2,147,483,647 است.
با توجه به شروع شدن شماره ها از 9 لذا بهترین انتخاب نوع داده ی biginit است.

gjmkdyttyhujk
جمعه 16 خرداد 1393, 23:36 عصر
باز هم مسئله اینه که اگر اطلاعات ذخیره بشه کدوم بهینه تر هست. توی عکسی که ASKaffash (http://barnamenevis.org/member.php?63973-ASKaffash) گذاشتن Length رو مقایسه کنید متوجه میشید کدوم حجم کمتری اشغال میکنه.

درست می فرمایید ولی برای جستجو یکی از اساتید من میگفتند که varchar بهتر عمل میکنه. نظر شما چیه؟

alireza_s_84
جمعه 16 خرداد 1393, 23:56 عصر
درست می فرمایید ولی برای جستجو یکی از اساتید من میگفتند که varchar بهتر عمل میکنه. نظر شما چیه؟

مطمئنا هرچی طول یک فیلد کوتاهتر باشه توی جستجو سریعتر به جواب میرسید. بین داده های عددی و الفبایی همیشه داده های عددی سریعتر توی جستجو ظاهر میشن اگر قرار بود varchar بهتر عمل کنه پس چرا کلید اصلی جدول رو از نوعهای شمارشی تعیین میکنیم؟؟؟!!!

gjmkdyttyhujk
شنبه 17 خرداد 1393, 00:13 صبح
مطمئنا هرچی طول یک فیلد کوتاهتر باشه توی جستجو سریعتر به جواب میرسید. بین داده های عددی و الفبایی همیشه داده های عددی سریعتر توی جستجو ظاهر میشن اگر قرار بود varchar بهتر عمل کنه پس چرا کلید اصلی جدول رو از نوعهای شمارشی تعیین میکنیم؟؟؟!!!

اینی که من گفتم صرفا یه چیزی بود که من شنیده بودم، تاکیدی روش ندارم، صرفا خواستم کمکی کرده باشم.

plus
شنبه 17 خرداد 1393, 06:13 صبح
مطمئنا هرچی طول یک فیلد کوتاهتر باشه توی جستجو سریعتر به جواب میرسید. بین داده های عددی و الفبایی همیشه داده های عددی سریعتر توی جستجو ظاهر میشن اگر قرار بود varchar بهتر عمل کنه پس چرا کلید اصلی جدول رو از نوعهای شمارشی تعیین میکنیم؟؟؟!!!

برای انتخاب نوع داده فیلد، حجمی که اشغال میکنه در اولویت آخر هست. مخصوصا اینکه اختلاف در حد چند بایت باشه.
ماهیت کد ملی و شماره موبایل عددی نیست (مثلا قرار نیست ضرب و تقیستمشون کنید) که بخواین به صورت عدد ذخیره کنید.هر دو رشته هایی هستن که کاراکترها عددی دارن.برای جستجو هم رشته باشن احتمالا سریعتر هست.
کلید های اصلی رو هم اگه بدون توجه به ماهیت و فیلدهای جدول، یک نوع شمارشی تعیین میکنید اشتباه میکنید.زمانی که فیلد یا فیلدهای مناسبی برای انتخاب به عنوان کلید اصلی نباشه ناچارا یک فیلد ID اضافه میشه که عددی انتخاب میشه چون معمولا قراره Auto Increment باشه و البته در پیاده سازی هم کار کردن با کلید عددی میتونه راحتتر باشه.این قضیه ربطی به سرعت نداره.
----
شما میتونی از تایپ varchar با طول 10 یا هرچقدر که فکر میکنید مقدار مورد نظر داره (کد ملی 10 هست ولی خوب موبایل بستگی داره...) و در #C هم string.

ASKaffash
شنبه 17 خرداد 1393, 08:58 صبح
سلام
درست است Bigint بهتر است ولی اگر عدد مثبت باشد 2,147,483,647 دو برابر می شود

alireza_s_84
شنبه 17 خرداد 1393, 11:10 صبح
برای انتخاب نوع داده فیلد، حجمی که اشغال میکنه در اولویت آخر هست. مخصوصا اینکه اختلاف در حد چند بایت باشه.
ماهیت کد ملی و شماره موبایل عددی نیست (مثلا قرار نیست ضرب و تقیستمشون کنید) که بخواین به صورت عدد ذخیره کنید.هر دو رشته هایی هستن که کاراکترها عددی دارن.برای جستجو هم رشته باشن احتمالا سریعتر هست.
کلید های اصلی رو هم اگه بدون توجه به ماهیت و فیلدهای جدول، یک نوع شمارشی تعیین میکنید اشتباه میکنید.زمانی که فیلد یا فیلدهای مناسبی برای انتخاب به عنوان کلید اصلی نباشه ناچارا یک فیلد ID اضافه میشه که عددی انتخاب میشه چون معمولا قراره Auto Increment باشه و البته در پیاده سازی هم کار کردن با کلید عددی میتونه راحتتر باشه.این قضیه ربطی به سرعت نداره.
----
شما میتونی از تایپ varchar با طول 10 یا هرچقدر که فکر میکنید مقدار مورد نظر داره (کد ملی 10 هست ولی خوب موبایل بستگی داره...) و در #C هم string.

پس حتما با نوشتن یک کوئری برای هر دو نوع ذکر شده نتیجه رو ببینید!!!
http://ask.sqlservercentral.com/questions/1796/indexing-varchar-vs-bigint.html

alireza_s_84
شنبه 17 خرداد 1393, 11:20 صبح
برای انتخاب نوع داده فیلد، حجمی که اشغال میکنه در اولویت آخر هست. مخصوصا اینکه اختلاف در حد چند بایت باشه.

جدولی با 10،000،000 رکورد داریم:
یک فیلد خواهیم داشت از نوع bigint که تنها 4 بایت رو اشغال میکنه حجم دیتابیس ما == چیزی حدود 38 مگابایت
اگر فیلد از نوع varchar10 باشد فضای اشغالی 22 بایت خواهد بود حجم دیتابیس ما == حدود 210 مگابایت
این تنها و تنها فقط برای یک ستون بود پس یادتون باشه خیلی خیلی مهمه که حجم اشغالی رو توی الویت آخر قرار ندین.

gjmkdyttyhujk
شنبه 17 خرداد 1393, 13:36 عصر
دوستان با این گفته های شما باید نوع داده ای انتخاب بشه که تمامی ویژگی ها رو داشته باشه. یعنی اینکه هم سرعت دستیابی در اون بالا باشه. حجم کمی رو اشغال کنه. برای عملیاتی که میخواهیم انجام بدهیم کارایی داشته باشه. نباید تنها یک ویژگی رو درنظر گرفت. دوستان لطفا نظر بدن تا به یک نتیجه ی خوبی برسیم.

alireza_s_84
شنبه 17 خرداد 1393, 13:50 عصر
دوستان با این گفته های شما باید نوع داده ای انتخاب بشه که تمامی ویژگی ها رو داشته باشه. یعنی اینکه هم سرعت دستیابی در اون بالا باشه. حجم کمی رو اشغال کنه. برای عملیاتی که میخواهیم انجام بدهیم کارایی داشته باشه. نباید تنها یک ویژگی رو درنظر گرفت. دوستان لطفا نظر بدن تا به یک نتیجه ی خوبی برسیم.

انتخاب نوع بستگی به میزان داده های شما داره ، هیچ اصراری وجود نداره که شما از نوع شمارشی استفاده کنید بلکه مهم اینه که شما با دید باز و آگاهی نوع داده رو انتخاب کنید. برای مثال من اگه سیستمی داشته باشم که نهایتا 1 میلیون کاربر رو جذب میکنه چرا باید نوع داده رو bigint بگیرم؟؟؟
در اینمورد هم بستگی به سناریو و کاربر سیستم شما داره. توصیه غالب اینه که برای فیلدهایی که نیاز به انجام کارهای محاسباتی ندارن (مثل شماره موبایل و کدپستی و یا شماره تلفن) بهتره از نوع varchar استفاده بشه. ولی اگر قرار باشه شما فیلترگذاری روی این فیلدها داشته باشین (مثلا کاربرد در یک سایت ارسال پیام کوتاه یا یک شبکه اجتماعی مثل وایبر یا واتس آپ) و این فیلترگذاری و جستجو زیاد صورت میگیره خب طبیعیه باید از نوع شمارشی استفاده کنید تا سریعتر به نتایج جستجو دست پیدا کنید.
فکر میکنم با بحث هایی که توی این تاپیک شد دیگه باید نوع مورد نیاز شما مشخص شده باشه.
موفق باشید

alireza_s_84
شنبه 17 خرداد 1393, 13:53 عصر
کلید های اصلی رو هم اگه بدون توجه به ماهیت و فیلدهای جدول، یک نوع شمارشی تعیین میکنید اشتباه میکنی
من یک جدول دارم که هرکاربر یک Username منحصر به فرد داره.
آیا برای کلید اصلی باید username رو قرار بدم؟؟؟ دلیل اینکه یک فیلد شمارشی به عنوان UserId قرار میدیم چیه؟؟؟
مهمترین دلیل: چون جستجو و اندیس گذاری روی نوع شمارشی به مراتب سریعتر از نوع رشته ای است.

gjmkdyttyhujk
شنبه 17 خرداد 1393, 14:25 عصر
صحبت ها تون رو متوجه میشم. ولی یک چیز که خیلی برام روشن نیست یا اینجوری بگم دلیلش برام مشخص نیست این هست که چرا چرا جستجو در نوع شمارشی سریعتر از نوع رشته ای هست؟ لطفا با دلیل بفرمایید تا قانع بشیم. با تشکر

alireza_s_84
شنبه 17 خرداد 1393, 14:53 عصر
صحبت ها تون رو متوجه میشم. ولی یک چیز که خیلی برام روشن نیست یا اینجوری بگم دلیلش برام مشخص نیست این هست که چرا چرا جستجو در نوع شمارشی سریعتر از نوع رشته ای هست؟ لطفا با دلیل بفرمایید تا قانع بشیم. با تشکر
دقیقا توی این پست شما میتونید هم مقایسه رو ببینید و هم دلیل قانع کننده بدست:
http://stackoverflow.com/questions/8124448/performance-difference-in-comparing-integers-and-comparing-strings

مشابهت زیادی به سوال شما داره

این هم یک مقایسه بین نوع رشته ای و نوع شمارشی در SQl Server:
http://sqlinthewild.co.za/index.php/2011/02/15/are-int-joins-faster-than-string-joins-2/

ضمنا شما توی زبان ماشین دو عدد رو باهم راحتتر مقایشه میکنید یا دو رشته رو؟؟؟
مقایسه ی دو عدد فقط نیاز به یک دستورالعمل CMP داره ولی مقایسه رشته ها چندین دستورالعمل