PDA

نسخه کامل مشاهده نسخه کامل : جدول users .یکی یا چند تا ؟



rostamiani
23-08-2009, 03:59
سلام
برای طراحی بانک اطلاعاتی دانشگاه چند نوع کاربر داریم.استاد و دانشجو و مسئولین
یک سری از فیلد ها مشترک هست ولی خیلی های دیگه ممکنه فقط برای ااتید یا فقط برای دانشجویان باشه.
اگه همه کاربر ها رو در یک جدول تعریف کنیم، کوئری ها خیلی ساده تر می شن.ولی ولی مقدار زیادی از جدول خالی می مونه :13:

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

کلا روش معمول برای این کارها چیه؟ :5:

متشکرم :31:

mamadfelfel1988
23-08-2009, 14:35
این روش شما یک جدول میسازی به اسم user چند تا فیلد داره مثل id,name یا هرچیزه دیگری حالا شما میای یک فیلد به اسم access یا permission اضافه میکنی که بوسیله عدد نوع کاربر رو مشخص میکنی مثلا 1 استاد این روش استاندار هست

rostamiani
23-08-2009, 14:46
این روش شما یک جدول میسازی به اسم user چند تا فیلد داره مثل id,name یا هرچیزه دیگری حالا شما میای یک فیلد به اسم access یا permission اضافه میکنی که بوسیله عدد نوع کاربر رو مشخص میکنی مثلا 1 استاد این روش استاندار هست
متشکرم
یعنی به نظر شما فیلد های خالی زیاد مشکلی نداره ؟

mamadfelfel1988
23-08-2009, 14:57
این شکل که من منظورم هست
Table Users
----------------------------
id=1 , name = ali , permission = 1
-----
id=2 , name = mohammad , permission = 3
به این شکل استاندارد

rostamiani
23-08-2009, 16:51
این شکل که من منظورم هست
Table Users
----------------------------
id=1 , name = ali , permission = 1
-----
id=2 , name = mohammad , permission = 3
به این شکل استاندارد
متشکرم
ولی مشکل فقط پرمیشن نیست.
دانشجویان فیلد هایی دارند مثل شماره دانشجویی و ترم تحصیلی و ... ولی اساتید فیلد هایی دی گه ای دارند

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

peyman1987
23-08-2009, 20:39
فکر کنم اول بهتر باشه زبانی که استفاده میکنین رو مشخص کنین. اگر PHP و MySQL استفاده میکنین میتونین فیلدهایی رو که قرار نیست بر اساسشون کوئری خاصی زده بشه رو یه آرایه کنین و بصورت سریال شده داخل یه فیلد مثل other_info از نوع text ذخیره کنین اینجوری فقط یه فیلد خواهین داشت برای اطلاعات متغیر.

rostamiani
24-08-2009, 03:35
فکر کنم اول بهتر باشه زبانی که استفاده میکنین رو مشخص کنین. اگر PHP و MySQL استفاده میکنین میتونین فیلدهایی رو که قرار نیست بر اساسشون کوئری خاصی زده بشه رو یه آرایه کنین و بصورت سریال شده داخل یه فیلد مثل other_info از نوع text ذخیره کنین اینجوری فقط یه فیلد خواهین داشت برای اطلاعات متغیر.
متشکرم
بله، با PHP و MySQL می نویسم
ولی تعداد فیلد های مشترک کمه.اینجوری هم همیشه باید یک آرایه رو بیخودی ویرایش کنم. اگه فیلد های مشترک زیاد تر بودن ، روشخوبی بود

rostamiani
24-08-2009, 18:09
توی سایت مجید آنلاین پیشنهاد کردند که :

روش معمول ساخت یک جدول برای همه می باشد ، خوب جدول رو با تمام بخش هایی که نیاز دارید می سازید و برای کاربرانی که یه سری اطلاعات به اونها مربوط نمیشه اون مقدارها رو NULL و یا خالی و یا صفر قرار می دهید ، توجه داشته باشید مواردی که قراره Null مقدار دهی بشن می بایست قبلا مشخص بشن
و با خالی موندن جدول هیچ مشکلی پیش نمیاد و فضا هم به هدر نمیره ، در کل بهترین روش و عاقلانه ترین روش همین روش میباشد که در اکثر سیستم های مدیریت محتوایی که نوشته شده مشاهده میشود.

اگه این روش استاندارد هست و فضای اضافه مصرف نمی کنه، خیلی بهتر به نظر میاد. بزرگ شدن جدول نکته دیگه ای هم داره ؟
می خواستم نظر شما رو هم بدونم
متشکرم

peyman1987
24-08-2009, 19:17
توی سایت مجید آنلاین پیشنهاد کردند که :


اگه این روش استاندارد هست و فضای اضافه مصرف نمی کنه، خیلی بهتر به نظر میاد. بزرگ شدن جدول نکته دیگه ای هم داره ؟
می خواستم نظر شما رو هم بدونم
متشکرم

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

کار دیگه ای هم که میشد انجام داد این بود که اطلاعات مشترک داخل جدول کاربرا باشن و یه جدول دیگه که با فیلد خارجی آی دی به جدول کاربرا وصل میشه بسازیم که اینجوری باشه ساختارش:

user_id
property_title
property_value

که مثالش هم میشه مثلا

10 - آدرس - تهران طبقه دوم
14 - شغل - کارمند
10 - شغل - دکتر

اینجا مثلا کاربر آی دی 10 دو تا خصوصیت داره و کاربر شماره 14 یکی. با ارتباط دادن این دو تا جدول هم میشه اطلاعاتشو بدست آورد.

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