PDA

View Full Version : در خواست کمک برای طراحی جداول



kavoshgar63
سه شنبه 06 اسفند 1387, 20:30 عصر
سلام دوستان
من دارم برای یک موسسه آموزشی تحت نظر فنی و حرفه ای یک سایت می سازم.
توی طراحی جدولش کمی گیج شدم اگه شما راه حلی دارین پیشنهاد کنید.
از ابتدا شروع می کنم به تو ضیح دادن.
1- هنر جو مبلغی رو به حساب موسسه واریز می کنه و بعد میاد اینترنت برای ثبت نام.
2- در سایت ما ابتدا برای خودش یه نام کاربری می سازه که این فیلد ها رو داره:

UserTable(userid,username,userpass,useractive)
userid primarykey

3- بعد مشخصات خودش رو درج می کنه از قبیل نام ، نام خانوادگی ، شماره ملی و .... 20 تا فیلد دیگه .
نمونه ای از فیلدهای این جدول:

registertable(registerid,name,family, nationalid,birthday,city,address,tel,....)
registerid primary key

تذکر: قبل از این که سایت راه اندازی بشه مسئول سایت نام دوره ها و اساتید رو در جداول مربوطه درج می کنه.

lessontable(lessonid,lessonname,teacherid,lesson active,lessonAmount)
lessonid primary key
teacher id foriegn key
teachertable(teacheerid,teachername,teacheramily)
techerid primary key


4- این موسسه دوره های هفتگانه ICDL رو آموزش میده . من قبلا توی همین جدول فیلد lessonid که کلید اصلی دوره ها بود رو درج کردم که بعد متوجه شدم کارم اشتباه بوده.
تا اینجای کار مشکلی نیست.:متفکر:
از این به بعد رو توجه کنید
هر کاربر می تونه در آن واحد در چند دوره ثبت نام کنه و ما نمی خوایم برای هر بار ثبت نام بیاد 25 تا فیلد رو پر کنه یعنی این که کاربر باید یکبار نام کاربری تعریف کنه و یک بار هم مشخصاتش رو درج کنه و بتونه n بار در دوره ها ثبت نام کنه.
حالا من باید یه جدول جدید درست کنم که داخل اون شماره فیش بانکی درج بشه و تاریخ ثبت نام و کد دوره و کد کاربر و کد رجیستر که مشخصات این هنرجویه.
جدول من این شکلی میشه:

NewTable(id,shomarefish,lessonid,userid,registerid ,tarikh sabtnam,active)
id primarykey
lessonid F.K
UserID F.K
RegisterId F.K

نا گفته نماند وقتی این دوستان در سیستم ثبت نام کردن بعد از 48 ساعت مدیر سایت اگر صحت اطلاعات رو تایید کرد (فیش بانکی) تیک تایید رو میزنه و کاربر اکتیو میشه و میتونه بیاد توی سایت و از امکاناتی که ما بهش میدیم(دانلود فایل دروس) استفاده کنه.
حالا من چیزی که به ذهنم رسیده اینه که اون اکتیو کاربر اضافه است و باید پاک بشه و همین اکتیو روی جدول جدید کفایت می کنه این جدول اخیر اتصال دهنده جدول کاربر و دوره (درس) و مشخصات ثبت نامه .
سئوال من اینه :
1- آیا این که این سه تا فیلد رو کلید خارجی گرفتم خوبه یا بده؟
2- راه بهینه تری هست یا نه؟
3- بانک ما با این روش دچار افزونگی نمیشه یا میشه؟
4-برای ذخیره کردن داده ها در جدول آیا بهتره که با این روش برم جلو(روش : اول کاربر برای خودش نام کاربری بسازه توی بانک ثبت بشه بعد بیاد لاگین بشه مشخصات جدول رجیستر رو کامل کنه بعد توی بانک insert کنه بعد جدول جدید( که هنوز نمی دونم اسمش رو چی بزارم)
رو با درج شماره فیش بانکی و انتخاب دوره کامل کنه حالا باید مشخصات داخل بانک ثبت بشه )
5- اگر کاربر بخواد یک باره مثلا سه تا دوره رو ثبت نام کنه چی باید کرد ؟
چطور میشه تشخیص داد که کاربر اشتباها یک دوره رو دوباره ثبت نام نکنه؟

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

siamak-s
سه شنبه 06 اسفند 1387, 21:20 عصر
ببین واقعا داستان طولانی رو تعریف کردی ، من نسبت به چیزی که از کارت برداشت کردم می تونم کمکت کنم البته اگه درست برداشت کرده باشم .
ببین یه تیبل میزاری برای مشخصات فردی طرف ، همش ، هر چی که هست ، یه تیبل هم میزاری برای رشته های درسی طرف ، سه تا فیلد بیشتر نمی خواد ، یکی ID دانشجو ، دومی تعداد واحد هایی که انتخاب کرده و سومی هم فیلدی هست که LessonID ها رو در خودش ذخیره می کنه ، فقط توی اون فیلد یه خورده باید بیشتر کار کنی ، هرچی طرف انتخاب واحد می کنه ، با یه Delimeter به LessonID های قبلیش اضافه میشه ، اگرم بخواد دوباره اون واحد رو برداره میری نگاه می کنی اگر اون LessonID اون تو بود که نمی زاری اگر نه تهش اضافه می کنی ، فیلدت میشه چیزی شبیه این :

123#234#123#

حذف کردن واحد ها هم که چیزی نیست جز بازی کردن با توابع رشته ای .
این شیوه ای که من تو برنامه هام استفاده می کنم ، فشار روی بانک رو کم می کنه ولی البته یک مقدار فشار رو روی برنامه نویس زیاد می کنه ، ولی بسیار بهینه هست .
در مورد سوال 4 هم باید دو مرحله کنی یک مرحله ورود اطلاعات فردی ، و یک مرحله انتخاب رشته های مورد نیاز از لیستی که جلوش میاد . درست مثل ثبت نام کنکور سازمان سنجش و آزاد و ...
خواستی باز توضیح می دم .

kavoshgar63
چهارشنبه 07 اسفند 1387, 00:42 صبح
بیشتر باید روی این مانور داد من فکر می کنم منظورتون این بود که نام کاربری و رمز عبور هم در داخل تیبل رجیستر باشه که به نظرم درستش هم همینه زیاد کارپیچیده نمیشه .
بعد هم برای مجوز دسترسی به دروس مختلف باید بره از اون جدولی که داخلش شماره فیش بانکی و کددرس خورده چک کنه .البته فکر می کنم این قضیه حالا حالاها ادامه داشته باشه.
چون من می خوام کاملا بهینه باشه و یک روش مناسب انتخاب بشه که نه کد برنامه پیچیده بشه و نه بانک اطلاعاتی سیستم سنگین بشه.
فکر می کنم در رابطه با ادغام جدول کاربران و جدول رجیستر پیشنهاد خوبی بود ولی اگر کسی چیز دیگه ای به ذهنش می رسه ما رو هم در جریان بذاره.
پس اگر قرار باشه که جدول کاربران با جدول رجیستر ادغام بشه فیلد کلیدی RegisterId از جدول رجیستر حذف بشه و به جای اون فیلد UserId میشه کلید اصلی یعنی فکر کنم جدول جدید این خصوصیات رو باید داشته باشه.

RegisterTable(UserId,UserName,UserPass,Name,Family ,Birthday,NationalId,....)
UserId Primary Key

siamak-s
چهارشنبه 07 اسفند 1387, 10:00 صبح
من نمی دونم چرا خودتو این قدر می پیچونی ! آقا یه صفحه ثبت نام میاد اطلاعات فردی رو وارد می کنه میره تو تیبل اطلاعات فردی ، بعدش یه صفحه دیگه میاد طرف هر چی دوست داره انتخاب واحد می کنه ، توی تیبل اطلاعات فردی یه فیلد میزاری به اسم isActive که موقع ثبت نام مقدارش صفر ، بعد اپراتور میاد میره تو صفحه ای به اسم درخواست های ثبت نام اونجا یه کوئری اجرا می کنی که هر کی فیلد isActive صفر بود رو نشون بده (یعنی اونایی که فعال نشدن ) ، بعد طرف روی درخواست کلیک می کنه و کلیه اطلاعات اون در خواست از تیبل اطلاعات فردی و تیبل واحدهای درسی نشون داده میشه ( یه خورم اگر بخوای کار کنی می تونی نام واحد هایی که انتخاب کرده رو با قیمتشون جلوش بیاری ) آخرش شهریه را جمع می کنه اون زیر می نویسه ، حالا اون اپراتور شماره فیش بانکی رو نگاه می کنه آیا اون قدر که باید پول ریخته یا نه ، اگر ریخته بود که فیلد isActive رو یک می کنی ، اگرم نه که یا کلا می تونی همون isActive رو صفر بزاری یا مثلا چند تا از واحداش رو کم کنی و فعالش کنی ، تو کلیه مراحل اسم طرفی که داخل تیبل هست می تونه وارد سایت بشه ولی چون فیلد isActive صفر هست به امکانات نمیتونه دسترسی داشته باشه ، به محض اینکه isActive یک بشه می تونه از همه چیز استفاده کنه .
خداییش از این کامل تر و جامع تر توضیح دیده بودی !

Hussein39
سه شنبه 27 اسفند 1387, 15:26 عصر
سلام دوستان
من مدت کوتاهی که با mysql آشنا شدم و می خواهم که بانک اطلاعاتی رابطه ای باهاش درست کنم ولی نمی توانم. البته یک دستور به نام Alter Table پیدا کردم ولی جواب نداد.:افسرده: