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

## یوسف زالی

سلام.
به امید خدا در این جلسه می خواهیم استارت طراحی سیستم کتابخانه رو بزنیم.
خب خیلی سراغ تئوری پردازی نمی رم.
برای سیستم کتابخانه باید دید که به چه چیزهایی نیاز داریم و چه اطلاعاتی برای ما ارزش ذخیره و بازیابی داره.
این اطلاعات معمولا از چند قسمت زیر استخراج می شن:
1- اطلاعات با ارزش از دید مشتری
2- اطلاعاتی که مشتری در گزارش می خواد
3- اطلاعات محاسباتی خاص
4- اصلاعات لازم حین تحلیل سیستم

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

در مصاحبه با مشتری (مدیر کتابخانه) :
------------------------------------------
س- چه اطلاعاتی برای شما مهم هستند و می خواهید نگهداری شوند؟
ج- مشخصات کتاب ها و اعضا برای ما مهم هستند

س- لیست این مشخصه ها کدوم ها هستند؟
ج- نام و نام خانوادگی - آدرس - تلفن برای اعضا و نام و شابک و نویسنده و مترجم برای کتاب ها

س- آیا شما گزارشاتتون رو بر حسب نویسنده ها هم می گیرید؟
ج- بله، گاهی مثلا می خواهیم تعداد عناوین کتاب هایی را که از نویسنده خاصی هست بدانیم.

س- در مورد انتشارات هم همینطوره؟
ج- بله

س- و در مورد مترجمین؟
ج- نه، گزارشی که بر اساس مترجم باشه لازم نداریم.

س- آیا اطلاعات خاصی مد نظرتون هست که از قلم انداخته باشید؟
ج- نه.. فکر نمی کنم..

س- آیا سیستم شما قرار هست که فقط روی یک کامپیوتر نصب بشه یا به صورت جند نفره می خواهید استفاده کنید؟
ج- خب چند نفره ، بستگی به هزینش داره

س- تعداد اعضای شما در بیشترین حالت چند نفرند؟ کتاب چطور؟
ج- خب متغیره، معمولا 200 تا عضو که 25 تا 30 نفر در هر روز مراجعه می کنند. تعداد کتابها هم 6000 عنوان هست که ممکنه از بعضی هاشون چند جلد موجود باشه.

س- آیا کتابی دارید که امانت دادنش ممنوع باشه؟
ج- بله، کتاب های مرجع و تست این طورند. کتاب های مرجع فقط به اعضای خاصی امانت داده می شه و کتاب های نفیس و تست فقط در قرائتخانه قابل امانت هست.

س- پس اعضا باید دارای رتبه هایی باشند که سطح دسترسی اونها رو مشخص کنه
ج- بله. این سطوح اینهاست: معمولی - ویژه - تام

س- اگر ممکنه لیست گزارشات و فرم های پرینتتون رو ببینیم.
ج- بله..
...

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

کتاب
-------
کد یکه کتاب (حتی برای دو کتاب با عناوین یکسان دو کد مجزا داده می شه)
کد کتاب (برای کتاب های نظیر، ممکنه از نطر کتابدار مثلا سالهای چاپ متفاوت نظیر باشند یا نباشند)
نام کتاب
شابک (ISBN)
قطع کتاب
نویسنده
مترجم
ناشر
سال جاپ
سری چاپ
تعداد نسخ
چکیده
تصویر روی جلد
نوع کتاب
کد دسته

انتشارات
----------
نام
آدرس
تلفن
فاکس
مدیریت

نویسنده
---------
کد
ملیت
نام
سایر مشخصات

قطع ها
--------
نام قطع

اعضا
------
کد عضو
نام
نام خانوادگی
کد ملی
تاریخ تولد
آدرس
کد پستی
نوع عضویت
تاریخ عضویت
تاریخ انقضای عضویت
عکس
تحصیلات
جنسیت

انواع عضویت
-------------
کد نوع
نام نوع

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

امانت
-------
کد یکه کتاب
کد عضو
مدت امانت
تاریخ امانت
تاریخ تحویل
تاریخ واقعی تحویل
روزهای دیرکرد


1.png 

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

نوع کتاب
----------
کد
نام نوع

تحصیلات
----------
مقطع
رشته
محل تحصیل

برای رشته جدول جدا در نظر نمی گیریم، چون در گزارشات فیلتری خواسته نشده و فرم چاپی مجزایی هم لازم نیست.

---------------
پس از اصلاحات پیشنهادی دوستان :

1.png 
در اینجا می بینیم که می شه بعضی از فیلد ها رو از روی بعضی دیگه محاسبه و استخراج کرد.
البته در این تحلیل خیلی سرراست با قضیه برخورد شد و تمام نرمال سازی ها ضمنی انجام شد.

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

آخرین اصلاحات:
1.png

بازگشت به فهرست

----------


## Sirwan Afifi

سلام دوست عزیز،

بهتر نیست یه جدول برای رزرو کتاب هم در نظر بگیری؟

----------


## ali190

ببخشید ، قطع چیست؟

----------


## یوسف زالی

سلام.
سعی کردم خیلی پیچیدش نکنم. برای همین از موارد اضافی صرف نظر کردم.

علی آقا قطع به اندازه کتاب می گن. مثلا جیبی یا وزیری.

----------


## Sirwan Afifi

یه جدول هم برای Category کتاب داشته باشه بنده نیست :





> کد یکه کتاب (حتی برای دو کتاب با عناوین یکسان دو کد مجزا داده می شه)
> کد کتاب (برای کتاب های نظیر، ممکنه از نطر کتابدار مثلا سالهای چاپ متفاوت نظیر باشند یا نباشند)
> نام کتاب
> *کد دسته بندی کتاب*
> شابک (ISBN)
> قطع کتاب
> نویسنده
> مترجم
> ناشر
> ...



*دسته بندی کتاب :

کد دسته بندی
نام*

----------


## یوسف زالی

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

----------


## ali190

سلام 
چند تا پیشنهاد داشتم:
امکانش هست برای آموزش از SQL2005 استفاده کنید (به دلیل عمومیت داشتن)
بعد از تکمیل شدن موضوع طراحی دیتابیس آیا امکانش هست با مدیران دو بخش Vb.net و #C (یا بعضی از کاربران Active که اگر مایل باشید میشه معرفیشون کرد)مذاکره شود تا با روشهای اصولی و علمی برای این دیتابیس اینترفیس ، گزارش و ... طراحی شود ، البته بهتره از قبل سرفصل های اینترفیس هم مشخص شود (فرمهای ورود داده ، ویرایش ، محاسبات ،‌گزارشات و ...) 
اینجوری کاربران از طراحی 0 تا 100 یک نرم افزار آشنا میشن و دید خوبی بهشون داده میشه
البته اینها همه در حد یک پیشنهاد بود و تصمیم گیریش با شماست .
راستی در طراحی این دیتابیس از تریگر ، SP و... هم استفاده میکنید
میشه در این آموزش مفاهیم طراحی Select ها ، Sub Query ، استفاده از فورمولهای ذاتی SQL ، کار بارشته ها در و... هم تشریح بشن
فقط یه خواهش دیگه هم داشتم:
برای اینکه این دیتابیس کامل بشه و کاربر بتونه اکثر نیاز هاش رو برطرف کنه لازم هست با مفاهیم مدیریتی دیتابیس هم آشنا بشه
مواردی مثل Job ، Role ، نحوه و انواع بک آپگیری و...
البته برای اینکه جامعیت مطالب حفظ بشه میتونید مطالب رو بر حسب موضوعاتشون در تالارهای فرعی SQL  قرار بدید و لینک بدید
باز هم ممنون و متشکرم 
یاعلی

----------


## بهزادصادقی

جناب You-See،

من از شما به خاطر وقت، انرژی، تعهد و انگیزه‌ای که روی این مطلب صرف کرده‌اید بسیار تشکر می‌کنم. خسته نباشید. کار شما بسیار ارزش‌مند است. کلا مبحث نحوه تعامل با مشتری و استخراج و تحلیل نیازهای او مبحثی است که مطالب خیلی کمی در مورد آن به زبان فارسی وجود دارد و خیلی جاها هم اصلا تدریس نمی‌شود. خواهش‌مند است این کار را حتی‌المقدور ادامه بدهید زیرا خیلی از ما می‌توانیم از این بحث‌ها استفاه نماییم.

----------


## یوسف زالی

دوستان حتما از نظراتتون کمال استفاده رو خواهم کرد.
همین پیگیری و نظرات شما بهترین انرژی برای نویسنده هست.
آقا بهزاد دل ما به بزرگانی چون شما گرمه. امیدوارم از نظراتتون دریغ نفرمایید.
در خصوص صحبت برای UI هم چشم، مذاکره می کنم ان شاا... درست می شه.

تغییرات پیشنهادی اعمال شد.

----------


## یوسف زالی

جنسیت هم اضافه شد.

----------


## Galawij

سلام، 
تحلیل و طراحی نرم افزار در مدل RUP، فقط در مرحله نیاز سنجی پروژه خلاصه نمی شه، در تمام مراحل طراحی و پیاده سازی نرم افزار این تعامل وجود دارد و مشتری از روند اجرایی پروژه کاملاً در جریان هست و نظرات خود را به صورت بازخوردی به کارفرما انتقال می دهد.
روی تحلیل می شه بیشتر کار کرد ولی فکر نمی کنم در حوصله این تالار باشه!




> س- آیا سیستم شما قرار هست که فقط روی یک کامپیوتر نصب بشه یا به صورت جند نفره می خواهید استفاده کنید؟
> ج- خب چند نفره ، بستگی به هزینش داره


این نیاز مشتری، نشان می دهد که نیاز به سطوح دسترسی داریم و برای کاربران مختلف باید این سطوح دسترسی تعریف بشه.
البته من فکر می کنم اگر اطلاعات خود مسئولین هم نگهداری شود،بد نباشه!

معمولاً تو کتابخانه ها بر اساس سه دسته بندی (عنوان کتاب، نویسنده، موضوع) امکان سرچ و جستجو وجود داره.

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

دیرکرد تحویل واقعی کتابها و میزان جرایمی که در نظر گرفته می شود، را می توانید لحاظ کنید.  

رابطه نویسنده از جدول نویسنده ها به جدول کتاب در شکل اشتباه هست، ممکنه کتابی چندین نویسنده داشته باشه، در این صورت طبق این طراحی سایر مشخصات کتاب هم چندین بار تکرار می شه! که باعث افزونگی در بانک می شه. بهتره براش یک ارتباط چند به چند داشته باشید به این صورت:
جدول مشخصات کتاب هاجدول مشخصات نویسنده هاجدول نویسنده های کتابها

----------


## یوسف زالی

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

----------


## Galawij

> در خصوص سطوح دسترسی در کتابخانه چه حالتی ممکنه وجود داشته باشه که یک نفر بتونه امانت بده و نفر دیگه نتونه؟


این کمک می کنه که متوجه بشیم این کتاب توسط چه کسی به امانت داده شده است و همچنین به مدیران سطح بالاتر این اجازه را می دهد تا حجم کاری هر یک از مسئولین را در تایم های زمانی مختلف بسنجند(هدف غایی از گزارشات برنامه).
یعنی در واقع شما کد مسئول را وارد جدول امانات می کنید و همچنین در یک جدول دیگر تایم کاری هر شخصی را نیز مشخص می کنید...



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


منظور از کلمه "ضمنی" همین بود(با اسکریپت و یا تریگر چک می شود).
این را هم اینجا بگم بعضی قوانین در تحلیل و پیاده سازی هست که همیشه لازم نیست برای آن جدول و یا فیلدی در نظر گرفت، بلکه به صورت ضمنی (از سمت بانک اطلاعاتی و یا از سمت برنامه) قابل پیاده سازی و کنترل هست.



> در خصوص موضوع هم این امکان دیده شده. دسته بندی برای همین هست.


می شه برای این دسته بندی بیشتر از یک سطح هم در نظر گرفت ...

----------


## Galawij

بهتره به جدول کتاب هم یک فیلد به نام تاریخ ورود به کتابخانه را در نظر بگیرید...
(این کمک می کنه از لیست کتابهای کهنه و منسوخ شده خیلی راحت گزارش گرفت و همچنین لیست کتابهای تجدید چاپ شده نیز قابل دستیابی باشه)

بر اساس تحلیل برنامه می شه در این مرحله لیست گزارشات برنامه را نیز استخراج کرد...

----------


## یوسف زالی

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

----------


## ali190

سلام
خواهشاً روی بعضی از اشیاأ Detail بشید
مثلاً همین اسکریپت ، اصلاً نمیدونم چیه  :قهقهه: 
ممنونم
یاعلی

----------


## یوسف زالی

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

----------


## vahdani_d

سلام به همه دوستان منم تشکر میکنم بابت زحمات دوستان
با اجازه دوستان یک نظر دارم بهتر نیست داکیومنت کامل باشه نیازها کامل شناخته بشن و هیچ چیز پنهان یا ناقصی نمونه ؟  فقط برای اینکه بقول دوست خوبم سنگ بزرگ نشه کدش رو یا قسمت اجراییش رو کمتر کنیم و در زمان نیاز و به مرور کاملش کنیم ؟(( شاید رفع یک خطا الان راحت تر باشه تا ... ))
همون طور که میدونید شناخت نیازها مهمتره من فکر میکنم اگه این قسمت کاملتر باشه و در ادامه خیلی ساده تر ادامه بدیم بهتره و قست های مورد نیاز رو اول خیلس ساده بررسی و کامل کنیم بعد کم کم بریم ادامه برنامه 
ببخشید اینم ی نظر دیگه  :چشمک:

----------


## vahdani_d

نمی دونم این تاپیک استاپ خورده یا من خیلی عجله درم که این تاپیک به یک نتیجه خوب برسه  :متفکر: 
چند تا سوال دارم در مورد مدلی که دوست خیلی خیلی خوبم  You-See قرار دادند 
1-کاش یک توضیح کامل در مورد این نمودار بدین هر چند کاملا گویاست اما یک جاهایی ابهام داره مثلا
2- چرا برای عضو کلمه عبور و نام کاربری انتخاب نشده ؟ (برای سطح دسترسی ها) مدیر - کتابدار - عضو - مهمان هر چند در قسمت انواع عضویت یک اشاره کوچیک شده اما فکر میکنم کمی نقص داره
3-میشه در مورد قسمت دسته بندی توضیح بدید منظورش رو متوجه نمیشم ؟
4-کتاب بهتر نیست به دوتا جدول تقسیم بشه ؟ یکی اطلاعات اصلی که در موقع سرچ و یا ثبت کتاب به عنوان رزرو و امانت مهم هست و دیگری اطلاعات تکمیلی مثل سال چاپ / سری چاپ / تعداد نسخ و ... که بیشتر به نظرم برای زمانی بهتره که ببینیم این کتاب از رده خارجه یا نه و ... 
5- چرا انتشارات از طریق نویسنده کتاب ارتباط با کتاب برقرار نکرده ؟
6-در کتاب - کد کتاب با کد یکه کتاب چه فرقی میکنه ؟
7- وقتی دسته بندی - نوع کتاب - انتشارات - قطع با کتاب ارتباط دارند باز هم لازمه که در موجودیت کتاب اسم اینا آورده بشه ؟!

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

----------


## یوسف زالی

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

----------


## vahdani_d

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

----------


## یوسف زالی

این نظر لطف شماست دوست من.
ممنون.
تو همین فکرم. مباحث فعلی :
قید
دیاگرام
انواع داده

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

----------


## یوسف زالی

ممنون از همکاری تون.
2005 و 2008 در قیود اگر تفاوتی هم دارند به نظرم بهتره که ذکر بشن.

----------


## amirsori

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

----------


## یوسف زالی

سلام.
بیت بگیر

----------

