محمد
3 سال پیش توسط محمد مطرح شد
8 پاسخ

دیتابیس برای صندوق ورودی

سلام خسته نباشید
یک جدول بنام صندوق ورودی داریم. چند نوع هم فرم هم دارم مثل تماس با ما، گزارش تخلف، خبرنامه که هر کدوم از این فرم ها فیلد های مختلفی داره.
کاری که میخوام بکنم این هستش که واسه همه ی اینا یه جدول بسازم با نام صندوق ورودی و ستون هایی که داشته باشه: 1- نوع صندوق ورودی، 2- مقدار صندوق ورودی 3- تاریخ ثبت
دیتای صندوق هارو میخوام بصورت آرایه و پشت سر هم مقدارشو توی ستون مقدار صندوق وارد کنم.

بنظرتون اوکی و کار بهنیه ای هستش؟


ثبت پرسش جدید
حسن حکمتی
تخصص : برنامه نویس وب و بلاکچین
@hekmati 3 سال پیش آپدیت شد
1

سلام
شما به یک سیستم تیکتینگ نیاز دارید.
ابتدا یک جدول ایجاد کنید مثلا به نام departements که محل نگهداری نام و آی دی و توضیحات دیپارتمان مربوطه باشه.
شامل:

'id','part','description','status'

ای دی که مشخصه، پارت برای نام، دیسکریپشن برای مشخصات یا توضیحات و استاتوس برای وضعیت فعال یا غیر فعال بودن بخش موربوطه.
حالا یک تیبل دیگه لازم دارید برای نگهداری پیامهای ورودی مثلا messages که به شکل زیر می تونید انجامش بدید.

'id','departement_id','user_id','message','image','status'

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


محمد
تخصص : همیشه در حال یادگیری ...
@Mohammad79 3 سال پیش مطرح شد
0

@hekmati
سلام ممنون از توضیحاتتون
بله این برای تیکت هستش اما موردی که دارم این هست توی 3 یا چهار تا صندوق ورودی 50 درصد اطلاعات مشترک هستش ولی بقیش مشترک نیست. اگه بیایم برای هر کدوم یه جدول بزنم که خود تعداد جداول میره بالا و مثلا بعدا که ورودی هارو زیاد کردم باز مجبور خواهم بود که تعداد جداول افزایش بدم و بنظرم کار بهینه ای نیستش.

ولی اگه بیام یه جدول به اسم ورودی ها درست بکنم که ستون هاش شامل 1) آیدی - 2)نوع ورودی - 3) مقدار ورودی - 4)تاریخ ثبت باشه اینطوری هیچ محدودی هم نخواهم داشت.
سوالی که دارم این هستش که اون مقادیر غیرمشترک اگه بیام مقدار ورودی بصورت آرایه مثلا با یه خط جداشون کنم و توی ستون ذخیره کنم یا کار درست و بهینه ای هستش؟


حسن حکمتی
تخصص : برنامه نویس وب و بلاکچین
@hekmati 3 سال پیش مطرح شد
1

سلام @Mohammad79
تعداد جداول بالا نیست، در این شرایط فقط دو تیبل داریم یکی نوع رو مشخص میکنه یکی دیتا رو.
در واقع همه دیتای مورد نظر شما در جدول شماره دو که به نام messages معرفی کردم قرار میگیره حالا چطور تفکیک میشن؟ از طریق departement_id که مشخص کننده نوع صندوق وردی هست.
این روش یک نوع رابطه یک به چند هست (one to many) که چون شما فقط تگ php رو اشاره کرده بودید در نظر گرفتم شاید با مبحث Eloquent ORM آشنا نباشید سعی کردم به صورت پیور توضیح بدم.
اصلا نیازی به آرایه ندارید، اگر خودتون رو در گیر آرایه کنید توی ویرایش و آپدیت اطلاعات و گزارش گیری توی دردسر می ندازید.


محمد
تخصص : همیشه در حال یادگیری ...
@Mohammad79 3 سال پیش مطرح شد
0

@hekmati
الان توی جدول پیام ها باید چه ستون هایی باشه؟ همه ی ستون های فرم ها؟ خوب اگه اینجا ایدی دپارتمان - تاریخ - ایدی کاربر و پیام باشه باز اون پیام ها توی ستون پیام ثبت میشه! اینطوری باز مثل چیزی که شما گفتید توی گزارش مشکل دار خواهد شد


woz
تخصص : fan of open source world
@wozniak 3 سال پیش آپدیت شد
0

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

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

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


حسن حکمتی
تخصص : برنامه نویس وب و بلاکچین
@hekmati 3 سال پیش آپدیت شد
0

@Mohammad79
چجور مشکلی پیدا میشه؟
یک مورد رو با هم بررسی کنیم.
ابتدا روش پیشنهادی خودتون @Mohammad79 رو بررسی کنیم:
فرض کنید سیستم رو با روش اول فعال کردید، سیستم داری سه صندوق ورودی است، پس از مدتی کارفرما تصمیم میگیره بر حسب نیاز چند صندوق دیگه به ورودی ها اضافه کنه، سیستم باید منتظر شما و توسعه بمونه تا شما ستون های جدید رو اضافه کنید. اینکه شما در دیتابیس و هسته سیستم مجبور هستید هاردکد کنید کاملا مشهوده!
روش دوم:
کارفرما هر زمان که نیاز به افزودن دپارتمان یا صندوق ورودی باشد به راحتی از پنل مدیریت میتواند بخش ها را فعال یا غیر فعال یا حذف و اضافه کند بدون اینکه نیاز باشد با شما تماس بگیرد!
در روش دوم کراد (CURD) به سادگی انجام پذیره اما در روش دوم برای کراد نیازمند استفاده از آرایه ها و سریالایز کردن دیتا و ... خواهید بود، این روش خیلی مرسوم و مطلوب نیست.
دوست گرامی پیش فرضی تحت عنوان پرفورمنس به طرح اضافه کردند که از پرسش شما قابل استنباط نیست با این حال در نظر میگیریم که این پیش فرض درست باشد. حال میخواهیم کار را ساده تر انجام دهیم چون توسعه سیستم دور از انتظار است، بهتر نیست روش استانداردتر و ساده تر رو انجام بدیم تا خودمون رو در گیر هارد کد کردن و آرایه و سریال کنیم؟
در نهایت چیزی که لازم دارید مثلا زمان ثبت یا آپدیت یا ... مطابق با نیاز سیستم به این دو تیبل اضافه کنید.


محمد
تخصص : همیشه در حال یادگیری ...
@Mohammad79 3 سال پیش مطرح شد
0

@hekmati
چیزی که پیشنهاد شما ساخت جدول براساس سیستم تیکت هستش. موردی که برای من پیش میاد اطلاعات اضافی چی کار کنم؟ باز مجبورم برای هر کدومش یه ستون بزنم.!×


حسن حکمتی
تخصص : برنامه نویس وب و بلاکچین
@hekmati 3 سال پیش مطرح شد
0

@Mohammad79
چیزی که در پرسش مطرح کردید رو پاسخ دادم، چیزی هم کم نمیارید حالا اطلاعات اضافی رو نام ببرید تا برسیش کنیم


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام