xoogle.ir
پنج شنبه 11 شهریور 1389, 00:08 صبح
سلام دوستان و اساتید عزیز
میخام دیتابیس سیستمی رو تعریف کنم که اگر خدا بخاد در آینده ممکنه دهها میلیون رکورد داشته باشه.
تا اونجایی که من میدونم برای اینکه دیتابیس درست تعریف شده باشه باید حتی الامکان سعی کنیم که اطلاعات کوچک بشه و کمتر از فیلدهای varchar و text و کلا فیلدهایی که طول متغیر دارن استفاده بشه.
حالا من در همین رابطه چند سوال دارم که ممنون میشم اساتید راهنماییم کنن :
1- فرض کنید که فیلدی داریم برای جنسیت کاربر برای تعریف کردن این فیلد 3 راه منطقی داریم :
a- یک فیلد با محتوی enum درست کنیم که 2 مقدار male و female رو بگیره.
b- یک فیلد char یک کاراکتری ایجاد کنیم که m یا f بگیره.
c- یک فیلد char یک کاراکتری ایجاد کنیم که 0 و 1 بگیره.
استفاده از کدوم یکی از این روش ها بهینه تر است ؟
2- فیلدی برای ذخیره زمان به صورت برچسب زمان داریم برای تعریف کردن این فیلد هم 2 راه منطقی داریم :
a- یک فیلد با نوع int ده کاراکتری ایجاد کنیم.
b- یک فیلد از نوع char ده کاراکتری ایجاد کنیم.
با توجه به اینکه گفته شده حتی الامکان از فیلدهای با طول ثابت استفاده بشه استفاده از کدوم فیلد برای ذخیره تاریخ مناسب تر است (با فرض اینکه عدد تاریخ ما همیشه 10 رقمی است)
3- در جایی خوندم که encoding utf-8 سرعت دیتابیس رو کمی کاهش میده خب با توجه به اینکه من encoding پیش فرض دیتابیس رو موقع ساخت دیتابیس روی utf8_unicode_ci تنظیم میکنم به طور خودکار encoding تمام فیلدهای varchar و char و text و ... در دیتابیس یونیکد میشه حتی فیلدهایی که یک مقدار لاتین یا یک عدد رو نگه داری میکنن. میخاستم بدونم که تغییر دادن encoding این فیلدها تاثیری در بهبود سرعت دیتابیس داره و اگر داره روی چه انکودینگی باید تنظیم بشه ؟
4- فرض کنید فیلدی داریم مثل آدرس یا شماره تلفن که وارد کردنش اختیاری هست یعنی میتونه خالی باشه. برای این فیلدها اگر مقدار پیش فرضشون رو NULL بذاریم بهتر هست یا مقدار بهشون ندیم ؟ یعنی کدوم مورد کمک میکنه تا دیتابیس کوچکتر باشه.
خیلی متشکرم
میخام دیتابیس سیستمی رو تعریف کنم که اگر خدا بخاد در آینده ممکنه دهها میلیون رکورد داشته باشه.
تا اونجایی که من میدونم برای اینکه دیتابیس درست تعریف شده باشه باید حتی الامکان سعی کنیم که اطلاعات کوچک بشه و کمتر از فیلدهای varchar و text و کلا فیلدهایی که طول متغیر دارن استفاده بشه.
حالا من در همین رابطه چند سوال دارم که ممنون میشم اساتید راهنماییم کنن :
1- فرض کنید که فیلدی داریم برای جنسیت کاربر برای تعریف کردن این فیلد 3 راه منطقی داریم :
a- یک فیلد با محتوی enum درست کنیم که 2 مقدار male و female رو بگیره.
b- یک فیلد char یک کاراکتری ایجاد کنیم که m یا f بگیره.
c- یک فیلد char یک کاراکتری ایجاد کنیم که 0 و 1 بگیره.
استفاده از کدوم یکی از این روش ها بهینه تر است ؟
2- فیلدی برای ذخیره زمان به صورت برچسب زمان داریم برای تعریف کردن این فیلد هم 2 راه منطقی داریم :
a- یک فیلد با نوع int ده کاراکتری ایجاد کنیم.
b- یک فیلد از نوع char ده کاراکتری ایجاد کنیم.
با توجه به اینکه گفته شده حتی الامکان از فیلدهای با طول ثابت استفاده بشه استفاده از کدوم فیلد برای ذخیره تاریخ مناسب تر است (با فرض اینکه عدد تاریخ ما همیشه 10 رقمی است)
3- در جایی خوندم که encoding utf-8 سرعت دیتابیس رو کمی کاهش میده خب با توجه به اینکه من encoding پیش فرض دیتابیس رو موقع ساخت دیتابیس روی utf8_unicode_ci تنظیم میکنم به طور خودکار encoding تمام فیلدهای varchar و char و text و ... در دیتابیس یونیکد میشه حتی فیلدهایی که یک مقدار لاتین یا یک عدد رو نگه داری میکنن. میخاستم بدونم که تغییر دادن encoding این فیلدها تاثیری در بهبود سرعت دیتابیس داره و اگر داره روی چه انکودینگی باید تنظیم بشه ؟
4- فرض کنید فیلدی داریم مثل آدرس یا شماره تلفن که وارد کردنش اختیاری هست یعنی میتونه خالی باشه. برای این فیلدها اگر مقدار پیش فرضشون رو NULL بذاریم بهتر هست یا مقدار بهشون ندیم ؟ یعنی کدوم مورد کمک میکنه تا دیتابیس کوچکتر باشه.
خیلی متشکرم