PDA

View Full Version : سوال: فرمول تولید id برای محصولات



crafcrab
سه شنبه 03 آذر 1394, 13:54 عصر
سلام

من یه نظر خواهی میخوام

فکر کنید یک سایت حراجی با زبان php نوشتم

صاحب آن کالا در سایت ما ثبت نام میکنه

مشخصات و عکس کالای خودش رو در سایت ما ثبت میکنه و یک id به آن اختصاص دادخ میشه

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



اما (اینجاست که کمک میخوام یه راه اصولی معرفی کنید)

id این محصول چطور تولید کنم؟



راه اول:

تولید id توسط ویژگیAUTO_INCREMENT جدول

در یک table به نام temp محصولاتی که هنور به تایید مدیر نرسیده رو ذخیره کنم و بعد از تایید توسط مدیر سایت اطلاعات بیاد در table اصلی ذخیره بشه و ستون id در table اصلی با کمک ویژگیAUTO_INCREMENT خودکار id تولید کنه



معایب:

در این روش مثلا اگر در table اصلی ما 10 تا سطر وجود داشته باشد

کاربر یکی از کالا های خودش از سایت حذف کنه مثلا سطر 3

در جدول عملا id شماره 3 بلا استفاده میمونه و برای کالای جدید id شماره 11 تولید میکنه

پس بدون دلیل دیتابیس حجمش بالا میره





راه دوم:

تولید id توسط خودمون

چه محصولات تایید شده توسط مدیر چه محصولات تایید نشده در یک table ذخیره کنیم

به این صورت که یک ستون در table وجود دارد به نام flag

اگر flag=0 تایید نشده

اگر flag=1 تایید شده



فرمول تولید id برای محصولات تایید نشده:

زمانی که یه محصول در سایت ثبت میشه در دیتابیس چک کنه

کوئری بگیر تعداد سطرهایی که flag=0 هست پیدا کن

id جدید = تعداد سطرها +1



فرمول تولید id برای محصولات تایید شده:

زمانی که یه محصول تایید شده در دیتابیس چک کنه

کوئری بگیر تعداد سطرهایی که flag=1 هست پیدا کن

id جدید = تعداد سطرها +1



معایب:

پیچیدگی کد نویسی و احتمال بروز خطا







شما پیشنهادی دارین ؟

Unique
سه شنبه 03 آذر 1394, 15:01 عصر
شما از همون flag استفاده کنید ولی نیاز نیست خودتون ID را تولید کنید ! ID را بگذارین Auto Increment ایجاد بشه.


در این روش مثلا اگر در table اصلی ما 10 تا سطر وجود داشته باشد
کاربر یکی از کالا های خودش از سایت حذف کنه مثلا سطر 3
در جدول عملا id شماره 3 بلا استفاده میمونه و برای کالای جدید id شماره 11 تولید میکنه
پس بدون دلیل دیتابیس حجمش بالا میره

داشتم میخوندم گفتم نکنه میخوای نبگین ID شماره ۳ بلا استفاده مونده و این حرفا (کلا اهمیتی نداره و مهم نیست id چی باشه و چند باشه) اما حرف شما عجیب تر شد و میگین حجم database میره بالا. دوست عزیز وقتی شما نوع داده را مثلا int میگیرین حالا چه ۳ ذخیره کنید و چه ۱۱ بالاخره database ۴ بایت از شما میگیره . تفاوتی در حجم نداره ! کلا نگران این خجم نباشین چون اون شکلی که شما نگرانش هستین جای نگرانی نداره !

crafcrab
سه شنبه 03 آذر 1394, 16:34 عصر
شما از همون flag استفاده کنید ولی نیاز نیست خودتون ID را تولید کنید ! ID را بگذارین Auto Increment ایجاد بشه.


داشتم میخوندم گفتم نکنه میخوای نبگین ID شماره ۳ بلا استفاده مونده و این حرفا (کلا اهمیتی نداره و مهم نیست id چی باشه و چند باشه) اما حرف شما عجیب تر شد و میگین حجم database میره بالا. دوست عزیز وقتی شما نوع داده را مثلا int میگیرین حالا چه ۳ ذخیره کنید و چه ۱۱ بالاخره database ۴ بایت از شما میگیره . تفاوتی در حجم نداره ! کلا نگران این خجم نباشین چون اون شکلی که شما نگرانش هستین جای نگرانی نداره !

به نظر شما int بزارم یا big int برای id خیالم راحت باشه

Unique
سه شنبه 03 آذر 1394, 16:54 عصر
موضوع خیال راحت بودن نیست ،‌موضوع اینه که باید کمترین نوع داده از نظر حجم را بگذارین. اگه ببشتر از ۲ میلیارد رکورد دارین بگذارین bigint وگرنه همون Int کفایت میکنه.
میتونین اینجا ببینین هر کدوم تا چه عددی پشتیبانی میکنن. (http://dev.mysql.com/doc/refman/5.7/en/integer-types.html)