Transcript for:
مدل‌سازی معنایی داده‌ها

این جلسه قرار هست در مورد مفهوم مدل سازی معنایی داده ها صحبت بکنیم و توی این مبحث ما دوتا مدل مطرح که در عمل توی ترایی دیتا بیس استفاده می شد و انشاءالله راجبشون صحبت خواهیم کرد بیس اساسیش مدل ER هست که یکی از مدل هاییست که توی بحث مهندسی نرم افزار و فریند پولید نرم افزار ازش استفاده می شه و یه ورژن پیشرفته تر از اون ورژن بهبود داده شده Enhanced هست که بر اساس همین مدل Entity Relationship یا مدل موجودیت ارتباط شکل گرفته و تحت عنوان مدل EER ما این رو هم نفاهمش رو توضیح خواهیم داد و به عنوان یکی از قدم های اولیه توی تراحی دیتا بیس شما به عنوان یک مهندس نرم افزار باید بتونید مودل داده هاتون رو دردیارید مودل معنایی داده هاتون رو تولید بکنید خب اصلاً مودل سازی معنایی چی هست و به چه دردی میخوره؟ ما به زمانی که یک نرمفضار رو میخواییم توصیح بدیم و تولیدش بکنیم مثل هر محصول دیگری که بعضاً به صورت فیزیکی ممکن هست تولید بشه این محصول هم نیاز به یک نقشه اولیهی داره که بر اساس اون نقشه ما بیاییم و اجزای مختلف اون سیستم رو در کنار هم قرار بدیم و نهایتاً منتج بشه به یک محصول نرمفضاری یکی از بخش های یه نرم افزار دیتا بیسش هست قاعدتن و برای ترایی کردن دیتا بیس هم ما اتناشار هستیم از این که اگر بخواییم نگاه من یک نگاه آینده نگرانه و مهندسی باشه استلاحاً نیاز داریم که نقشه اون دیتا بیس رو قبل از این که وارد کود بشیم و وارد پیاده سازی بشیم توی کمپیوتر یه نقشه از اون داشته باشیم میشه بدون نقشه هم کار رو انجام داد میشه بدون مدل سازی هم شروع کرد و دیتا بیس رو حالا یه مقدار اگر با زبان اسپیول مثلا آشنا باشیم شروع بکنیم پیاده سازی کنیم جدابلی که نیاز داریم رو بسازیم و کار رو ببریم جلو ولی این دیدگاه باعث میشه زمانی که شما یک نرم افزار رو به صورت نقطه نگرانه یه گوشه شو فقط نگاه میکنیم کار رو شروع میکنیم بر اساس همون گوشه پیاده سازی میکنی میبری جلو قدم به قدم که جلو میری میبینی که تغییرات زیادی شاید لازم باشه که شما توی ترراحی قبلیتون بدید تا یه قسمت جدید بتونه به نرم افزارتون اضافه بشه یک قابلیت جدید بتونه بهش اضافه بشه و باعث میشه که شما مجبور باشید خیلی اضافه کاری انجام بدید خیلی کاره تکراری رو برزن انجام بدید تغییرات زیادی داشته باشید و کلافتون میکنه برای همین بهتر هست قبل از این که ما شروع بکنیم مرحله پیاده سازیمون رو بهش پرسیم و وارد استلاحاً عمل بشیم و به صورت دیژیتایزد بیاییم توی کامپیوتر کارمون رو پیاده سازی بکنیم اول با یک نگاه کلی و فارق از جزئیات پیاده سازی نگاه کنیم ببینیم اصلاً میخواییم چی کار انجام بدیم توی این کاری که قرار هست انجام بدیم توی این محصولی که قرار هست پیاده بشه چه ریجگی ها و چه داده های وجود داره و حالا از روی این مودلی که می سازیم بعدن شروع می کنیم و پیاده سازیمون رو انجام می دیم که واحدتاً مساحل کلیمون رو از قبل پیشبینیش رو کرده باشیم نیازی نداشته باشیم که خیلی هی مرتب تغییرات اعمال بکنیم خب این مشکل زمانی تشدید می شه که ما داریم یک نرم افزار رو پوسته می دیم که این نرم افزار یک بخشیش دیتا ویسش هست چیزی نیست که شما بتونید لمسش بکنید شما زمانی که دارید یک ساختمونی رو میسازید به عنوان یک نفر بنا دارید دیوارش رو میکشید حالا میتونید این دیواره رو تا یه جایی رو برید جلو بعد ببینید حالا دیجاش کت شده دیجاش راست هست نگاه میکنید با چشمتون قابل لمس هست قابل دیدن هست و میتونید ایبا ایرادش هم در بیارید همون ولی ما در وقتی نرم افزار رو داریم تررایی می کنیم خیلی قابلیت لمس آنچنانی نداره مثلا شما یک دیتاویسی رو میخوایید تررایبو کنید چیز خاصی نیست که بتونید توی دستت بگیرید نگاش کنید ببینید درسته غلطه کجه راسته چطوری هست بنابراین نیاز هست که ما از ابتدایی را نگاه کلی به سیستممون داشته باشیم و یک مودلی از روش بسازیم این مودل را اصطلاحاً ما توی گام اول بهش میگیم مودل سازی معنایی یعنی شما بدون توجه به این که جزئیات پیاده سازیتون چی هست، نوع دادتون چیه، جنسش چیه، کجا قرار زخیره بشه، بدون توجه به تمام این جزئیات به صورت خیلی کلی نگاه میکنید، ببینید برای اون محیطی عملیاتی که قرار هست نرم افزار تررایی بشه، چه ملزومات دادهی وجود داره، چه چیزهای توی این سیستم وجود داره که مهم هستن باید راجعشون اطلاعات زخیره بشه چه اتفاقهای توی این محیط می اخته که روی داده های ما تأثیر گذار هست داده رو ممکنه عوض بکنه، ممکنه داده جدیدی به سیستم ما اضافه بکنه، ممکنه چیزی رو حصف بکنه تمام اینها رو به صورت کلی نگاه میکنیم و در قالب این مودل معنایی می آمی و ترسیمش میکنیم وقتی این مدل معنایی ایجاد شد، اون موقع شما یک دید کلی به مسئله دارید و میتونید از اون به بعد درید سراغ جزئیات بیشتر، جزئیات پیاده سازی ما زمانی که از اول بخواییم روی جزئیات تمرکز کنیم و همه چیز رو در سطح پیاده سازی نگاه بکنیم ممکن هست انقدر وارد جزئیات بشیم که یه سری مسئله کلی رو فراموش کنیم اصلا بنابراین بهتر هست ما توی ابتدای کار بشیم مدل معنی از داده بسازیم که معنی داده و اتفاقاتی که روی داده ها می افتده رو فقط مورد توجه قرار می ده و بعد از اون بریم سراغ جزئیات بیشتری که توی پیاده سازی باید اتفاق بیاریم پس اگر بخوای مدل سازی معنی رو تعریف بکنیم به این شکل هست که مدل سازی معنی داده ها یعنی ارائه مدلی از محیط امالیاتی با توجه معنی داده به کمک یه سری مفاهم مستقل از نمایش فیزیکی و منطقی داده ها یعنی شما توی این مدل سازی معنایی فقط مفاهم رو باش کارد معنای داده هاتون این که هر چیزی چه چیزهای مهم هست توی سیستمتون چه چیزهای باید اطلاعات راجب استخیر سازی بشه و چه کارهای اینها روشون باید انجام بشه کاری به نمایش فیزیکی و منطقی داده ها نداریم کجا توی حافظه زخیره میشه به چه فورمتی زخیره میشه نمیدونم دیتا تایپشون چی هست به اینها اصلا هیچ کاری نده خب برای اینکه این مودل معنایی رو ما بسازیم از روش های مختلفی میشه استفاده کرد که یکی از روش های اصلی توی این بحث مودل سازی معنایی روش انتیتی ریلیشنشیپ یا موجودیت ارتباط هست این روش همیتونی که گفتم یکی از روش های مرسوم هست که سالهاست داره استفاده میشه و احتمالا دوستانی که درس ایمان سینر مفضل های یک رو هم الان دارن به عنوان یه بخشی از پروژه شون که باید انجام بدن دیتا بیس پروژه شون رو باید با همین مدل تراحی بکنن بنابراین ما از ابتدای ترمیل سراغ این مدله که یا آمادگی برای کسی که با این مودل آشنادیستن هم ایجاد داشته برای درس مهندسی نرم افزارشون مشکلی نداشته باشه مودل ER اولاً بدونید که مخفف entity relationship هست entity به معنای موجودیت و relationship به معنای ارتباط که حالا برای ساده شدن بهش میگیم مدل ای آر مدل ای آر یه ماهیت شبیه به فلوچارت داره یعنی از این نظر شبیه هستن که به طورت نمادهای گرافیکی هستن و ما مدل معناقیمون رو در غالب یک شکل ارائه میکنیم چرا در غالب شکل ارائه میکنه؟ به دلیل این که شکل فهمش آسان تر هست سرعت انتقالش بالتر هست خدمتون که عرض بکنم وقتی شما به صورت یک مودل رو به صورت شکل بیانش میکنید دیگه سوه تفاهمی داخلش پیش نمیاد کچفهمی ایجاد نمیشه همه چیز شست رفته در غالب یه سری الامان به صورت گرافیکی مشخص هست و به صورت استاندارد میتونه توسط افراد مختلف توی جاهای مختلف ایران باشه، خارج از ایران باشه، تهران باشه، جمع باشه، هر جایی که باشه اگر این مودل رو بشناسه، مخاطق میتونه به راحتی ارتباط برمارو کنه و با این مودل کار بکنه پس یک مودل گرافیکی هست که بر اساس سه تا مفهومه کلی بنا شده مفهوم موجودیت، مفهوم صفت و مفهوم ارتباط که این جلسه هر کدوم از این ستا مفهوم رو با تفصیل راجبشون صحبت کنیم پس نمودار ای آر که تحت عنوان مدل معنایی داده ما میشنسیمش اولین تره پایگاه داده است و یک مدل کلی از دیتا بیس هست در بالاترین سطح انتظار مرزور از انتظار یعنی این هست که شما به جزئیات توجه نمی کنید به مسائل کلی دارید توی این مودل اشاره می کنید و بعد حالا وارد فاظهای بعدیی که شدید می آیند و جزئیات بیشتری رو در نظر می گیرید خب بریم سراغا ستا مفهومی که داشتیم اول مفهوم مفهوم موجودیت یا انتیتی هست entity type بعضا ممکنه یه جایی برمیده شد نوع موجودیت یا entity type که الان ما به صورت خلاصه بهش میگیم موجودیت ممزور از موجودیت هر مفهوم کلی شکلی یا پدیده ایست که توی سیستم اطلاعاتی شما باش کار دارید و اطلاعات راجبش باید یا زخیره کنید یا حالا یه کاری روش انجام بدید، تحویلات روش امال بکنید و معمولا توی سیستممون یه حالت فائلیت یا مفقولیت داره یا یه کاری رو انجام میده توی سیستم یا به هر حال یه اتفاقی روی اون میوفته مثلا شما فرض بکنید سیستم آموزشی دانشگاه رو یک محیط عملیاتی داریم تحت عنوان دانشگده این کلمه محیط عملیاتی رو همینجای توضیح مختصری راجعش بدیم جاییست یا حالا چیزیست که شما برای اون دارید بیتا بیس تررایید الان دانشگده و محیط سیستم آموزشی میشه یه محیط عملیاتی پس جلوتر حالا تو تمرینات و مثال هم که میبینیم منظور از محیط عملیاتی شما فرض کنید کارفرمایی یا یه مجموعی از اتاق خواست ادارات یا همچین جایی هست که شما برای اون داری نه مفضار ترداریم حالا داخل این محیط عملیاتی چیزهایی که عرضش نگه داشتن اطلاعات دارن و برای اون محیط عملیاتی مهم هستند رو ما باید پیدا کنیم و هر کدوم از اینها میشه یکی از موجودیت ها مونیم مثلا توی محیط عملیاتی آموزش دانشگده ما موجودیت های مختلفی میتونیم داشته باشیم از جمعه دانشجو همه این دانشجو ها باید اطلاعاتشون سبت بشه پس هر آنچه میخواهیم در موردش اطلاعات داشته باشیم برای سیستم آموزش مهم هست اطلاعات دانشجو اطلاعات اساتید مهم هست، اطلاعات دروس مهم هست، اطلاعات کارمندها مهمه و الاخره هر کدوم از اینها یه انتیتی تایپ هست که حالا همشون هم یک حالت فائلیت یا مفهولیتی توی سیستم ها دارن یه کاری رو معمولا انجام میدن مثلا استاده از این نظر مهم هست در این سیستم دانشگیری که باید درس اراعه بده، باید نمره صرف رو کنه، باید دانشجو رو بزرگیاب بکنه دانشجو از این نظر مهم هست که باید درسی اخص بکنه، باید، میمونم، انتخاب واحد بکنه، باید حصف بکنه، باید حصف ترم بکنه، باید مرخصی بگیره، یه کاری رو داره انجام داره درست حالت مفعولیت بیشتر دارن، درس اخص میشه توسط دانشجو درس ارائه میشه توسط یک استاد درس تعریف میشه توسط یک کارمندی پس هر کدوم از اینها توی این محیط عملیاتی اولا اطلاعاتشون مفید هست برای محیط عملیاتشون به دردش میخوره یه کاری باید روش انجام بده و همینطور ویژگی دوباره که دارن یه کاری رو انجام میدن توی این سیستم حالا یا یک کسی با هاشون یه کاری رو انجام هر کدوم از این انتیزی تایپ هایی که ما راجعه اوشون صحبت می کنیم و به صورت کلی هر انتیزی تایپ یه مجموعه ای از نمونه ها رو داره مثلا برای موجودیت درس یک کلاس کلی هست تحت عنوان درس حالا هر کدوم از درس های شما درس دیتا بیس، درس برنامه می سید درس نمی دونم کار آموزی، درس پروژه، درس X, Y هر کدوم از این درس ها یک نمونه از موجودیت درس هستن پس تفاوت بایل میشیم بین نمونه موجودیت و Entity Type یا نوع موجودیت Entity Type یک کلاس کلی هست و هر کدوم از درس ها یک نمونه از کلاس یا موجودیت درسه اگر بخواید حالا به دید object-oriented بهش نگاه کنید، به دید شهگرایی بهش نگاه کنید، خود entity میشه یک کلاس، نمونه های اون entity میشه object هایی که از روی اون کلاس میسازید. پس هر موجودیت میتونه تعداد زیادی نمونه داشته باشه، مثلا دانشجو، هر کدوم از شما ها یک نمونه از موجودیت دانشجو هستید که خصائص خاص خودتون رو دارید. هر کسی اسم خودش رو داره، فامیل خودش رو داره، سن خودش رو داره و اله آخر حالا تمام نمونه های متمایز در هر موجودیت رو بهش میگیم مجموعه نمونه های اون موجودیت نکته ای که راجب نمونه های یک موجودیت ما باید بهش توجه داشته باشیم این هست که هیچ دو نمونه از یک موجودیت ما نمیتونن کاملا یکسان باشن و حتما باید به یه طریقی از همدیگه متمایز باشن برای مثال دانشروح ها ممکن هست دو نفر دانشروح ما توی یک دانشگاهی داشته باشیم اسمشون یکی باشه، فامیلشون یکی هست نام پدرشون یکی هست خدمتون که بگم تاریخ تولد همه چیز همه چیز اینه هم هست ولی در هر صورت شمار دانشروح های متفاوتی دارن این دوتا نمونه پس هیچ دو نمونهی نمیتونه وجود داشته باشه که دقیقا و به صورت کامل همه چیزشون اینه هم باشه حالا جلوتر میگیم که این وجه تمایز رو بهش میگیم صفت شناسه حالا جلوتر راجب صحبت با مفهوم موجودیت آشنا شدیم حالا موجودیت میتونه دوتا نوح داشته باشه موجودیت مستقل یا قوی و موجودیت ضعیف یا وابست موجودیت مستقل رو ما با نماد مستطیل نشون میدیم گفتیم نمودار ای آر مودلیست که بر اساس یه سری علمان های گرافیکی تشکیل میشه موجودیت قوی رو با مستطیل تک خطی نشون میدیم موجودیت ضعیف رو با مستطیل دو خطی نشون میدیم موجودیت مستقل یا قبیل، همیجور که از اسمش مشخص هست، وجود یا عدم وجودش توی سیستم مستقله، خودش به خودی خود وجود داره. مثل موجودیت دانشجو توی سیستم. دانشجو توی سیستم آموزشی یک موجودیتیست که وجود داره.

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

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

مثلا شماره دانشجوی یا نام. برای هر دانشجوی یه دونه نام بیشتر وجود نداره. برای هر دانشجوی یه شماره دانشجوی بیشتر وجود نداره.

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

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

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

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

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

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

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

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

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

سمت مخالفش به همین ترکیب. آیا همه درس ها باید حذف بشند؟ اونم نممکنه، درسی داشته باشیم که هیچ کسی حذفش نکرده. این هم غیر الزامی هست.

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

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