# پایگاه‌های داده > SQL Server > T-SQL > تحلیل و طراحی بانک اطلاعات >  ساختار دیتابیس برای سیستم حضور غیاب

## reghbali06

سلام
مابااستفاده از دستگاه کارتخوان RFID قصدطراحی یه سیستم برای حضور غیاب کارمندان با قابلیت های خاص داریم
خوشبختانه تونستیم با دستگاه ارتباط برقرار کنیم
حال برای سیستم حضور غیاب نیاز به دیتابیس داریم
ما یه table داریم که توش مشخصات کارمندان رو ذخیره می کنیم
برای ذخیره کردن ساعت ورود و خروج نیاز به تیبل داریم
به نظر دوستان این تیبل چه فیلدهایی داشته باشه؟
و اینکه چجوری ورود و خروج رو از هم متمایز کنیم؟
ممنون

----------


## mehran_sh_t

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

----------


## یوسف زالی

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

----------


## soroushp

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



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

----------


## یوسف زالی

مثلا چجوری؟
از کجا می دونی واقعا نرفته بیرون؟
مثلا اومده و 2 دقیقه بعدش فهمیده بیرون یه کار مهم داره و باید بره؟

----------


## linux

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


کار جالبی نیست.

----------


## linux

> سلام
> مابااستفاده از دستگاه کارتخوان RFID قصدطراحی یه سیستم برای حضور غیاب کارمندان با قابلیت های خاص داریم
> خوشبختانه تونستیم با دستگاه ارتباط برقرار کنیم
> حال برای سیستم حضور غیاب نیاز به دیتابیس داریم
> ما یه table داریم که توش مشخصات کارمندان رو ذخیره می کنیم
> برای ذخیره کردن ساعت ورود و خروج نیاز به تیبل داریم
> به نظر دوستان این تیبل چه فیلدهایی داشته باشه؟
> و اینکه چجوری ورود و خروج رو از هم متمایز کنیم؟
> ممنون


 1- کد پرسنل
2- ساعت و تاریخ

----------


## یوسف زالی

تو این دو تا پستی که زحمت کشیدید فقط من نفهمیدم چی شد یا ...؟
آقا وقت نداری پست نزن خب!  :لبخند گشاده!: 
اونم دوتا دوتا!
راه حل پیشنهادی شما چیه؟ چرا جالب نیست؟ اونی که نوشتید چی بود؟
پیشنهاد شما برای خروج از بن بست ورود خروج چیه؟

----------


## soroushp

پیشنهاد من اینه که یک جدول درست کنی که : 1 کد اصلی جدول که primary key ، شماره کارمند که کلید خارجی ، ساعت ورود ، ساعت خروج ، نوع ورود/خروج که می تونه عادی باشه و حالت ماموریت که مثلا در این ساعت رفته و در این ساعت برگشته !
نظر شما چیه؟

----------


## linux

> تو این دو تا پستی که زحمت کشیدید فقط من نفهمیدم چی شد یا ...؟
> آقا وقت نداری پست نزن خب! 
> اونم دوتا دوتا!
> راه حل پیشنهادی شما چیه؟ چرا جالب نیست؟ اونی که نوشتید چی بود؟
> پیشنهاد شما برای خروج از بن بست ورود خروج چیه؟


1- ذخیره اطلاعات ورود و خروح توسط شما در یک رکورد جالب نیست.
2- جدول ورود و خروج به بیشتر از دو فیلد نیاز ندارد 
کد پرسنلی
ساعت و تاریخ 
همین. از طریق محاسبه می شود کار کرد شخص را حساب کرد.
اگر بر اساس تاریخ ثبت داده ها گروپ بای کنید، برای هر شخص ساعت ورود و خروج مشخص هست، به ترتیب ساعت مرتب کنید ساعت اولی ورود هست و ساعت دومی خروج از کم کردن این دوتا کارکرد بدست می آید.
با فرض ثبت ساعت بصورت 24 ساعته
برای یک شخص به تاریخ امروز
ساده ترین حالت
تاریخ؛ساعت؛کد شخص
امروز؛08:00 ؛1
امروز؛16:00؛1
16-8 =8 ساعت کارکرد
یک خورده پیچیده تر
امروز ؛ 8:00؛1
امروز ؛09:00؛1
امروز؛11:00؛1
امروز؛16:00؛1
اینجا محاسبه به این راحتی نیست، یک جدول باید داشته باشید که مرخصی ها ، ماموریت ها را در آن ثبت کنید.
از طریق اطلاعات جدول مرخصی ها یا ماموریت ها و این جدول کارکرد بدست خواهد آمد هر چند باز خیلی راحت نیست و محاسبات سخت تر و پیچیده تری دارد.

----------


## یوسف زالی

ببینید دوست من با "کار جالبی نیست" موافق نیستم.
در حقیقت باید نوعی برای علت کسر ساعت تعریف بشه که آی دی اون در جدول  قرار بگیره.
مثلا:
CID = 10001, EventDate = '90/09/13', EventTime = 09:11 am, EventType = 2
با استفاده از چند تا سلکت ساده هم می شه فهمید کی چقدر کارکرد داشته و چقدر مرخصی و ...
سپس با استفاده از فرمولهایی که معمولا "باز" هستند و می تونند توسط مدیر سیستم اصلاح شوند می شه دقیقا فهمید کارکرد کی چقدر بوده.
پیشنهاد من:
برای هر رویداد یک دکمه ست بشه.
مثلا ورود دکمه یک- خروج دو- مرخصی ساعتی سه...
البته برای سیستم های ساعت زنی مثل اثر انگشت دکمه داره. بقیه رو نمی دونم.

----------


## linux

با کارت rfid می خواهد همین که پرسنل از جلوی دستگاه رد شد رکورد ثبت شود، حالا شما می خواهید چکار کنید؟

----------


## soroushp

> ببینید دوست من با "کار جالبی نیست" موافق نیستم.
> در حقیقت باید نوعی برای علت کسر ساعت تعریف بشه که آی دی اون در جدول  قرار بگیره.
> مثلا:
> CID = 10001, EventDate = '90/09/13', EventTime = 09:11 am, EventType = 2
> .


شما که جدول منو بازگو کردین  و مثال زدین؟ می خواستم ببینم همچین جدولی جواب می ده؟ مشکلش چیه؟

----------


## یوسف زالی

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

----------


## soroushp

درسته ، من نظرم رو طراحی پایگاه بود ، وگرنه توضیح شما  در باره ی دکمه set کامل بود !

----------

