نمایش نتایج 1 تا 2 از 2

نام تاپیک: نوع داده فیلد ها در mysql یا phpmyadmin

  1. #1

    Thumbs down نوع داده فیلد ها در mysql یا phpmyadmin

    با سلام و احترام

    درون انجمن جستجویی هم انجام دادم اما نتیجه ای نگرفتم چون سوالم مبهم و جوابی مبهم دارد. اینجا ذکر می کنم. با تشکر از مدیران انجمن و دوستانی که در این تاپیک به حقیر کمک می کنند.

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

    فرض کنید قصد دارید دیتابیسی تولید کنید با جداول و فیلد های زیر




    users
    -------------
    user_id
    user_login
    user_password

    -------------
    courses
    -------------
    course_id
    course_name
    -------------
    user_courses
    -------------
    user_course_id
    user_course_singup_date
    -------------
    files
    -------------
    file_id
    orginal_file_name
    fake_file_name
    course_id
    course_part_file
    orginal_file_created_date
    fake_file_crated_date
    expire_time_for_fake_file_name






    اولین عبارت بین هر ---------- نام جدول و عبارت بعدی فیلد های آن جدول می باشد فرض مثال جدول کاربران سه فیلد داریم با نام های




    user_id
    user_login
    user_password



    حالا سوال اینجاست که برای فیلد اول از چه نوع داده ای با چه اندازه ای باید استفاده شود برای فیلد دوم که قرار هست کاراکتر های عددی آندرلاین و عبارات حروفی بزرگ و کوچک لاتین بگیرد از چه نوعی باید استفاده شود برای این فیلد از مقدار صحبتی نمی کنم که در خطوط پایین توضیح بیشتری میدهم.
    برای فیلد پسورد از چه نوع داده ای باید استفاده شود ؟ این فیلد قرار هست مقادیری که درون برنامه به صورت عدد حروف و کاراکتر های غیر مجاز توسط کاربر به عنوان پسورد درج می شود را به صورت md5 یا هش شده دریافت کند برای این فیلد از چه نوع داده ای و با چه مقداری باید استفاده شود با شرط بر اینکه قرار باشد مقدار درون فیلد به صورت هش شده md5 باشد .


    چیزی که هست بچه های رشته کامپیوتر بیشتر با انواع حافظه در رایانه آشنایی داشته و حتی شاید انواع داده ها را از حفظ باشند اما مسئله اینجاست که برای حقیر هیچ وقت این طور نبوده و پاره ای از ابهامات باعث میشده تا در هنگام ایجاد دیتابیس این موارد را به علت نداشتن دانش کافی رعایت نکنم.

    همانطور که میدانید هر ییت کوچک‌ترین واحد حافظه ‌است که فقط دو مقدار صفر (۰) یا یک (۱) را می‌توان در آن ذخیره کرد.
    و هر 8 بیت برار هست با یک بایت
    هر کاراکتر 1 بایت از حافظه رایانه ما یا رایانه سروری که برنامه ما در آن اجرا شده را اشغال می کند که اگر حافظه رم رایانه ما یا سرور 1024 مگابایت باشد یعنی مقدار فوق العاده زیاد هنوز آزاد و در دسترس و قابل بهره برداری و استفاده می باشد.

    با این حساب اگر قرار باشد در فیلد user_id جدول کاربران مقدار عددی قرار بگیرد چون ما از تعداد کاربران خود در آینده مطلع نیستیم :
    از چه مقداری به عنوان طول کاراکتر های این فیلد باید استفاده شود ؟
    در انتخاب نوع داده چه نوع داده ای برای پردازش بهتر و پاسخگویی سریع تر مناسب می باشد ؟
    انتخاب نوع داده چه تاثیری در مصرف فضای دیتابیس دارد ؟

    بیشتر که خواسته باشم بپرسم یا درواقع باعث توضیحات بیشتر شوم برای اینکه این مطلب به عنوان یک منبع مفید برای انتخاب نوع داده در طراحی دیتابیس باشد :

    در بعضی از اسکریپت ها و برنامه ها مشاهده می شود که از نوعی داده برای فیلد خاصی استفاده شده و مقدار آن را براربر با 255 قرار داده اند آیا این 255 یعنی 255 کاراکتر امکان درج در این فیلد وجود دارد ؟

    و اگر این طور می باشد وقتی که کاربر مقداری را درج می کند که کمتر از 255 کاراکتر می باشد و ما در تنظیمات مقدار آن فیلد از عدد 255 استفاده کرده باشیم مقدار فضای اشغال شده به واسطه تنظیمی که ما انجام دادیم ولو اینکه کاربر 10 کاراکتر وارد کرده باشد باز هم به اندازه 255 کاراکتر فضا را اشغال خواهد کرد و این مقدار را از حافظه رم دستگاه استفاده خواهد کرد ؟

    یعنی 255 بایت از حافظه اشغال شده در صورتی که کاربر ما به اندازه 10 بایت نیاز داشته و به اندازه همون 10 بایت مصرف کرده و اگر ما این روال را رعایت نکنیم باعث می شود که میزان فشار به منابع سرور در برنامه های بزرگتر بیشتر شده و این مسئله نیازمند هزینه های بیشتری خواهد شد که توجیه اقتصادی ندارد.


    در رابطه با فیلد user_login و user_password مشاهده می شود افرادی این فیلد ها را برابر با نوع varchar یا text قرار میدهند فرضا ما قصد داریم کاربر ما عددی برای عضویت نام کاربری که وارد می کند دارای کاراکتر های حروف بزرگ و کوچک لاتین عدد و آندرلاین بوده و نهایت 8 عبارت یا کاراکتر بیشتر نباشد :
    اگر در انتخاب نوع داده از varchar استفاده شود برای اینکه قصد داریم بیشتر از 8 کاراکتر درون دیتابیس استفاده نشود مقدار این فیلد به چه شکلی باید تنظیم شود
    اگر نوع فیلد را text قرار دادیم مقدار باید به چه شکلی تنظیم شود چون قصد ما دریافت فقط 8 کاراکتر از کاربر به عنوان نام کاربری وی می باشد ؟
    اگر نوع فیلد به صورت char قرار گرفت مقدار به چه شکلی تنظیم می شود ؟



    فرضا نوع داده برای فیلد نام کاربری char قرار گرفت و مقدار آن 8 به این شکل چه مقدار از حافظه رم اشغال می شود ؟
    فرضا نوع داده برای فیلد نام کاربری varchar قرار گرفت و مقدار آن 8 به این شکل چه مقدار از حافظه رم اشغال می شود ؟
    فرضا نوع داده برای فیلد نام کاربری text قرار گرفت و مقدار آن 8 به این شکل چه مقدار از حافظه رم اشغال می شود ؟

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

    در رابطه با تاریخ چه نوع داده ای باید انتخاب شود ؟ فکر کنید مطلبی را توسط برنامه ای که نوشته ایم درج می کنیم قصد داریم تاریخ فقط تاریخ را در لحضه درج برنامه در فیلدی درون دیتابیس ذخیره کنیم و بعد درون نوشته های وب سایتمان آن تاریخ را نمایش دهیم اینجا از چه نوع داده ای باید استفاده شود؟
    آیا در نوع داده ای که به تاریخ ارتباط دارد باید مقدار Length درج شود ؟

    اگر قصد داشته باشیم هم ساعت و هم تاریخ درون فیلد درج شود چه نوعی کاربرد دارد ؟ و آیا باید Length درج شود ؟


    اگر فیلد ID یک جدول نوعش INT باشد و مقدارش فرضا 11 یعنی طول این فیلد تا 11 کاراکتر یا در واقع 11 عدد مجاز می باشد درسته یعنی این مقدار میتواند داخل فیلد درج شود: 99999999999

    اگر BiGINT باشد و عبارت 11 درون طول قرار بگیرد به چه شکل خواهد بود ؟ چه تعداد کاراکتر درون این فیلد قابلیت ذخیره سازی دارد ؟


    در مورد فیلد password چون قرار هست 32 کاراکتر درون فیلد درج شود آن هم صرفا این 32 کاراکتر ، کاراکتر هایی می باشد که توسط تابع md5 تولید شده نوع جدول char با طول 32 باشد مشکل ساز خواهد بود ؟ اگر خیر چرا افراد از varchar با طول های متفاوت استفاده می کنند یا از انواع دیگر داده.


    درون phpmyadmin برای نمونه جدولی درست کردم و برای آن جدول یک فیلد با نام ID ایجاد کردم نوع داده INT و با طول 10 بعد از تولید فیلد رفتم برای درج اولین مقدار داخل این فیلد زمانی که عبارت عددی 99999999999 را وارد کردم که ببینم این تعداد کاراکتر را میگیرد یعنی 11 کاراکتر چه خطایی میگیرم خطایی مبنی بر پیام زیر را دریافت کردم
    Please enter a value less than or equal to 2147483647 حال مسئله ای که وجود دارد این می باشد که اگر ما تا 10 کاراکتر توانایی درج مقدار درون این فیلد را داریم و نوع این فیلد عددی می باشد و فقط عدد دریافت خواهد کرد این درخواستی که کرده دقیقا چه مفهومی دارد ؟ Please enter a value less than or equal to 2147483647 درک این مسئله برای من سخت می باشد.

    برای نمونه این فیلد را مورد اصلاح قرار داده و طول ID را برابر با 1 و حتی0 قرار دادم که خودش اتوماتیک به11 تبدیلش کرد !!!!!!! و نوع آن را برابر با INT قرار دادم این آزمایش را درون phpmyadmin انجام میدادم پس از ذخیره اقدام به درج مقدار جدیدی کردم و مقدار وارد شده عددی 10 رقمی بود مگر این جا این 10 رقم به منزله 10 کاراکتر محسوب نمی شود چرا بدون هیچ مشکلی رقم به این طولانی 2147483647 بدون مشکل درج شد.
    اگر واقعا هیچ فرقی بین وارد کردن 1 یا 10 یا 100 نیست چرا باید مثل دیتابیس سایر برنامه ها که معمولا برای فیلد ID از نوع int و طول 11 استفاده می کنند ما نیز از 11 استفاده کنیم برای طول این فیلد ؟؟؟؟؟







    درون دیتابیس مدیریت محتوای وردپرس جدولی وجود دارد با نام users که فیلد های این جدول و ساختار کلی فیلد های این جدول به شکل زیر می باشد







    users
    ==============
    Name Type Collation Attributes Null Default

    ID bigint(20) UNSIGNED No None
    user_login varchar(60) utf8mb4_unicode_ci No
    user_pass varchar(255) utf8mb4_unicode_ci No
    user_nicename varchar(50) utf8mb4_unicode_ci No
    user_email varchar(100) utf8mb4_unicode_ci No
    user_url varchar(100) utf8mb4_unicode_ci No
    user_registered datetime No 0000-00-00 00:00:00
    user_activation_key varchar(255) utf8mb4_unicode_ci No
    user_status int(11) No 0
    display_name varchar(250) utf8mb4_unicode_ci No







    با توجه به اینکه برای id از نوع bigint و طول 20 استفاده شده دلیل استفاده از این نوع داده و این طول چیست ؟
    برای سایر فیلد ها به غیر از user_registered و user_status از varchar استفاده کرده است و با طول های متفاوت که به عنوان نمونه اگر عبارت زیر

    varchar(255) که برای user_pass در نظر گرفته شده به معنای درج 255 کاراکتر درون این فیلد باشد در صورتی که کاربر ما نهایت 10 کاراکتر بیشتر وارد نخواهد کرد یا نهایت بیشتر از 20 کاراکتر وارد نخواهد کرد چرا باید 255 کاراکتر در نظر گرفته شود ؟
    اگر این مقدار در نظر گرفته شود و این عبارت 255 به منزله قبول 255 کاراکتر برای این فیلد باشد و کاربر فقط 10 کاراکتر استفاده کرده باشد 245 کاراکتری که استفاده نکرده آیا باعث اشغال فضا و فشار مضاعف به سرور نخواهد شد ؟

    در رابطه با user_status از نوع int با طول 11 استفاده شده که باز هم اگر 11 به منزله 11 کاراکتر قابل استفاده در این فیلد باشد باتوجه به اینکه
    user_status – در نسخه های قبل وردپرس ۳.۰ برای مشخص کردن یک کاربر به عنوان اسپمر استفاده می شد و یا عدد 0 و یا 1 خواهد بود که 0 به منزله اسپمر نبودن و 1 به منزله اسپمر بودن بود چرا باید از طول 11 و نوع int استفاده شود ؟ باز هم اگر 11 به منزله تعداد کاراکتر مجاز باشد چرا باید برای یک مقدار تک کاراکتری 0 وشاید 1 - 11 تنظیم شود که باعث شویم 10 بایت بیشتر از مقدار رم سرور را استفاده کنیم ؟


    کاربرد UNSIGNED در بخش اتریبیوت چیست ؟

    در فیلد user_registered از نوع datetime استفاده شده این نوع به چه شکلی عمل می کند ؟




    در پایان همه صحبت هایی که کردم و هی تکرار کردم مقدار رم سرور منظورم این می باشد که فرضا همین user_status که یک عبارت تک کاراکتری بیشتر نیست وقتی 11 درج می شود حالا چه از فضای هارد استفاده کند برای ذخیره داده ها و چه از فضای رم استفاده کند برای ارائه پاسخ به کوئری های اجرا شده آیا به این شکل مقدار دهی به طول فیلد ها باعث نمی شود مصرف منابع بیشتر شود ؟ و در صورتی که منابع نا کافی باشد فشار بیشتری در برنامه های بزرگی مثل وردپرس به سرور وارد شود ؟

    تمام سوالاتی که مطرح شد و حساسیتی که بنده روی این مسئله دارم رفع نواقصی که به علت نداشتن تجربه داریم در زمان طراحی دیتابیس آیا باعث بهبود سرعت اجرای کوئری ها و بازدهی بهتر و افزایش سرعت سایت نخواهد شد ؟

    در پایان سوالات و توضیحات از تمام عزیزانی که در این تاپیک به حقیر کمکی هر چند اندازه ارزن کنند تشکر می کنم.

  2. #2
    کاربر دائمی
    تاریخ عضویت
    مهر 1394
    محل زندگی
    ایران
    پست
    357

    نقل قول: نوع داده فیلد ها در mysql یا phpmyadmin

    طراحی جدول چیزی نیست که با یکی دوتا تاپیک بشه راحت یاد گرفت پیشنهاد میدم به منابع خارجی مراجعه نمایید و شروع به کار عملی کنید یعنی بایست شروع به طراحی جدول کنید تا یواش یواش ککار دستتون بیاد

تاپیک های مشابه

  1. سوال: مشکل در تغییر دادن نوع دیتای فیلد ها در دیتابیس.
    نوشته شده توسط mjzsoft25 در بخش C#‎‎
    پاسخ: 3
    آخرین پست: سه شنبه 24 مرداد 1391, 13:04 عصر
  2. مبتدی: بروز رسانی داده ها در MySQL
    نوشته شده توسط ostad_ccna در بخش PHP
    پاسخ: 3
    آخرین پست: سه شنبه 10 مرداد 1391, 13:55 عصر
  3. آیا از trigger ها در mysql استفاده کنیم یا خیر
    نوشته شده توسط zoghal در بخش MySQL
    پاسخ: 0
    آخرین پست: جمعه 22 بهمن 1389, 23:39 عصر
  4. مبتدی: مشکل در ارسال داده ها در MySQL لطفا کمک کنید.
    نوشته شده توسط ostad_ccna در بخش PHP
    پاسخ: 6
    آخرین پست: پنج شنبه 13 خرداد 1389, 01:09 صبح
  5. ترتیب داده ها در mysql منهای اولی
    نوشته شده توسط sepideh2 در بخش MySQL
    پاسخ: 11
    آخرین پست: پنج شنبه 12 مهر 1386, 19:54 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •