سلام دوستان
برای ذخیره شماره موبایل و کد ملی از چه تایپی در دیتابیس و سی شارپ استفاده کنم
دوستان دمتون گرم دلیل انتخاب اون تایپ هم بگید
با تشکر از همه شما
سلام دوستان
برای ذخیره شماره موبایل و کد ملی از چه تایپی در دیتابیس و سی شارپ استفاده کنم
دوستان دمتون گرم دلیل انتخاب اون تایپ هم بگید
با تشکر از همه شما
سلام
نوع String بهترین هست
چون این ها اعداد بزرگی هستن و متغیر عددی نمیتونه اون ها رو نگه داری کنه و تنها راه شما متغیر های رشته ای هستن
با سپاس Spaceman
تایپ Decimal من امتحان کردم می تونه
این شماره ها را توخودش نگه داره که ؟
سلام
اگر حجم اطلاعات زیاد نیست String راحت است در غیر اینصورت اشتباه است (بعلت حجم داده ها / حجم ایندکسهای مرتبط / سایز Packet ها در شبکه / ... ) و بهترین انتخاب int است چون 4 بایت است به شکل نگاه کنید اختلاف را متوجه می شوید در ضمن چون طول شماره موبایل و کد ملی ثابت است (هردو 10 رقم هستند) در هنگام دریافت با دستور Select خودتان با صفر پشت عدد موضوع را هندل کنید
با احترام به نظر دوستان به نظر منvarchar(10)بهتر هست چون اگه مقداری در اونها ذخیره نشه حجمی که اون فیلد اشغال میکنه صفر میشه و حجم دیتابیس رو بی خودی زیاد نمیکنه.
باز هم مسئله اینه که اگر اطلاعات ذخیره بشه کدوم بهینه تر هست. توی عکسی که ASKaffash گذاشتن Length رو مقایسه کنید متوجه میشید کدوم حجم کمتری اشغال میکنه.
اگه از SqlServer استفاده میکنید بهتره از نوع داده ی bigint استفاده کنید (تنها 8 بایت از حافظه رو مصرف میکنه) در حالیکه با توجه به طول شماره موبایل (10 کارکتر بدون احتساب 0 ابتدا) در صورت ذخیره بصورت String ما نیاز به 22 بایت فضا داریم (هر کارکتر 2 بایت رو اشغال میکنه).
از نوع داده ی int هم نمیتونید استفاده کنید چون نهایت مقداری که میتونه بگیره 2,147,483,647 است.
با توجه به شروع شدن شماره ها از 9 لذا بهترین انتخاب نوع داده ی biginit است.
برای انتخاب نوع داده فیلد، حجمی که اشغال میکنه در اولویت آخر هست. مخصوصا اینکه اختلاف در حد چند بایت باشه.
ماهیت کد ملی و شماره موبایل عددی نیست (مثلا قرار نیست ضرب و تقیستمشون کنید) که بخواین به صورت عدد ذخیره کنید.هر دو رشته هایی هستن که کاراکترها عددی دارن.برای جستجو هم رشته باشن احتمالا سریعتر هست.
کلید های اصلی رو هم اگه بدون توجه به ماهیت و فیلدهای جدول، یک نوع شمارشی تعیین میکنید اشتباه میکنید.زمانی که فیلد یا فیلدهای مناسبی برای انتخاب به عنوان کلید اصلی نباشه ناچارا یک فیلد ID اضافه میشه که عددی انتخاب میشه چون معمولا قراره Auto Increment باشه و البته در پیاده سازی هم کار کردن با کلید عددی میتونه راحتتر باشه.این قضیه ربطی به سرعت نداره.
----
شما میتونی از تایپ varchar با طول 10 یا هرچقدر که فکر میکنید مقدار مورد نظر داره (کد ملی 10 هست ولی خوب موبایل بستگی داره...) و در #C هم string.
سلام
درست است Bigint بهتر است ولی اگر عدد مثبت باشد 2,147,483,647 دو برابر می شود
پس حتما با نوشتن یک کوئری برای هر دو نوع ذکر شده نتیجه رو ببینید!!!
http://ask.sqlservercentral.com/ques...vs-bigint.html
آخرین ویرایش به وسیله alireza_s_84 : شنبه 17 خرداد 1393 در 11:22 صبح
جدولی با 10،000،000 رکورد داریم:برای انتخاب نوع داده فیلد، حجمی که اشغال میکنه در اولویت آخر هست. مخصوصا اینکه اختلاف در حد چند بایت باشه.
یک فیلد خواهیم داشت از نوع bigint که تنها 4 بایت رو اشغال میکنه حجم دیتابیس ما == چیزی حدود 38 مگابایت
اگر فیلد از نوع varchar10 باشد فضای اشغالی 22 بایت خواهد بود حجم دیتابیس ما == حدود 210 مگابایت
این تنها و تنها فقط برای یک ستون بود پس یادتون باشه خیلی خیلی مهمه که حجم اشغالی رو توی الویت آخر قرار ندین.
دوستان با این گفته های شما باید نوع داده ای انتخاب بشه که تمامی ویژگی ها رو داشته باشه. یعنی اینکه هم سرعت دستیابی در اون بالا باشه. حجم کمی رو اشغال کنه. برای عملیاتی که میخواهیم انجام بدهیم کارایی داشته باشه. نباید تنها یک ویژگی رو درنظر گرفت. دوستان لطفا نظر بدن تا به یک نتیجه ی خوبی برسیم.
انتخاب نوع بستگی به میزان داده های شما داره ، هیچ اصراری وجود نداره که شما از نوع شمارشی استفاده کنید بلکه مهم اینه که شما با دید باز و آگاهی نوع داده رو انتخاب کنید. برای مثال من اگه سیستمی داشته باشم که نهایتا 1 میلیون کاربر رو جذب میکنه چرا باید نوع داده رو bigint بگیرم؟؟؟
در اینمورد هم بستگی به سناریو و کاربر سیستم شما داره. توصیه غالب اینه که برای فیلدهایی که نیاز به انجام کارهای محاسباتی ندارن (مثل شماره موبایل و کدپستی و یا شماره تلفن) بهتره از نوع varchar استفاده بشه. ولی اگر قرار باشه شما فیلترگذاری روی این فیلدها داشته باشین (مثلا کاربرد در یک سایت ارسال پیام کوتاه یا یک شبکه اجتماعی مثل وایبر یا واتس آپ) و این فیلترگذاری و جستجو زیاد صورت میگیره خب طبیعیه باید از نوع شمارشی استفاده کنید تا سریعتر به نتایج جستجو دست پیدا کنید.
فکر میکنم با بحث هایی که توی این تاپیک شد دیگه باید نوع مورد نیاز شما مشخص شده باشه.
موفق باشید
من یک جدول دارم که هرکاربر یک Username منحصر به فرد داره.کلید های اصلی رو هم اگه بدون توجه به ماهیت و فیلدهای جدول، یک نوع شمارشی تعیین میکنید اشتباه میکنی
آیا برای کلید اصلی باید username رو قرار بدم؟؟؟ دلیل اینکه یک فیلد شمارشی به عنوان UserId قرار میدیم چیه؟؟؟
مهمترین دلیل: چون جستجو و اندیس گذاری روی نوع شمارشی به مراتب سریعتر از نوع رشته ای است.
صحبت ها تون رو متوجه میشم. ولی یک چیز که خیلی برام روشن نیست یا اینجوری بگم دلیلش برام مشخص نیست این هست که چرا چرا جستجو در نوع شمارشی سریعتر از نوع رشته ای هست؟ لطفا با دلیل بفرمایید تا قانع بشیم. با تشکر
دقیقا توی این پست شما میتونید هم مقایسه رو ببینید و هم دلیل قانع کننده بدست:
http://stackoverflow.com/questions/8...paring-strings
مشابهت زیادی به سوال شما داره
این هم یک مقایسه بین نوع رشته ای و نوع شمارشی در SQl Server:
http://sqlinthewild.co.za/index.php/...tring-joins-2/
ضمنا شما توی زبان ماشین دو عدد رو باهم راحتتر مقایشه میکنید یا دو رشته رو؟؟؟
مقایسه ی دو عدد فقط نیاز به یک دستورالعمل CMP داره ولی مقایسه رشته ها چندین دستورالعمل