== ER Дијаграм [[Image(ER_BUILD_BOARD_v5.png)]] == Податочни побарувања === Ентитети * Ентитет **USER** - податоци за корсниците. * Кандидат клучеви: Username. Поради чести промени на атрибутот, за примерен клуч избравме вештачки клуч Id. * Атрибути: * Id - нумерички податок, задолжителен. * Username - текстуален податок,задолижетелен. * Description - текстуален податок,опционален. * Password - текстуален податок,задолжителен. * Register_date - текстуален податок,задолжителен. * Sex - текстуален податок,задолжителен. * Is_active - булов податок, задолжителен. * Email - текстуален податок, задолжителен. * Name - текстуален податок, задолжителен. * Ентитет **DEVELOPER** - преклопувачка специјализација, со делумно учество, од USER. Ентитетов се однесува на корисниците, кои се истовремено и развивачи на софтвер. * Кандидат клучеви: исто како и ентитетот USER и овај ентитет се идентификува со примарниот вештачки клуч Id. * Ентитет **PROJECT_OWNER** - преклопувачка специјализација, со делумно учество, од DEVELOPER. Ентитетов се однесува на развивачите на софтвер, кои поседуваат проекти. * Кандидат клучеви: исто како и ентитетот DEVELOPER и овај ентитет се идентификува со примарниот вештачки клуч Id. * Ентитет **MODERATOR** - преклопувачка специјализација, со делумно учество, од USER. Ентитетов се однесува на корисниците, кои истовремено се и модератори на threads. * Кандидат клучеви: исто како и ентитетот USER и овај ентитет се идентификува со примарниот вештачки клуч Id. * Ентитет **TAG** - податоци за можните тагови. Служат за групирање на thread. * Кандидат клучеви: Name, како податок уникат за секој таг. Истиот го избравме за примарен клуч на ентитетов. * Атрибути: * Name - текстуален податок,задолжителен. * Ентитет **THREAD** - генерализација на сите можни водови на threads. Ги содржи сличните податоци присутни кај поединечните видови. * Кандидат клучеви: бидејќи најмално супер-клуч множество би се состоело од сите атрибути на ентитет, за примарен клуч избравме вештачки клуч Id. * Атрибути: * Content - текстуален податок,опционален. * Id - нумерички податок, задолжителен. * Created_at - датум, задолжителен. * Ентитет **ЕMBEDDABLE** - дисјунктна специјализација, со целосно учество, од THREAD. Ги претставува сите threads кои можат да се вгензудваат. * Ентитет **TOPIC_THREAD** - дисјунктна специјализација, со целосно учество, од ЕMBEDDABLE. Ентитетов се однесува на сите threads кој се топици и ги содржи податоците специфични за нив. * Кандидат клучеви: исто како и ентитетот ЕMBEDDABLE и овај ентитет се идентификува со примарниот,вештачки клуч Id. * Атрибути: * Title - текстуален податок,задолжителен. * Guidlines - текстуален,multivalued податок,опционален. * Ентитет **DISCUSSION_THREAD** - дисјунктна специјализација, со целосно учество, од ЕMBEDDABLE. Ентитетов се однесува на сите threads кој се дискусии и ги содржи податоците специфични за нив. * Кандидат клучеви: исто како и ентитетот ЕMBEDDABLE и овај ентитет се идентификува со примарниот,вештачки клуч Id. * Ентитет **PROJECT_THREAD** - дисјунктна специјализација, со целосно учество, од THREAD. Ентитетов се однесува на сите threads кој се дискусии и ги содржи податоците специфични за нив. * Кандидат клучеви: исто како и ентитетот THREAD и овај ентитет се идентификува со примарниот,вештачки клуч Id. * Атрибути: * Repo_url - текстуален податок, опционален. * Title - уникатен текстуален податок, задолжителен. * Слаб ентитет **BLACKLISTED_USER** - податоци за тоа на кои корисници му е забранет пристапот во кои TOPIC_THREAD , од кои модератор. * Кандидат клучеви: парцијалнен клуч Start_date, но за целосно идентификување се користат идентификувачките релации со TOPIC_THREAD,MODERATOR и USER. * Атрибути: * Start_date - датум, задолжителен. * End_date - датум, опционален. * Reason - текстуален податок,опционален. * Ентитет **SUBMISSION** - генерализација за пријавите, кои ги испраќаат корисниците. * Кандидат клучеви: Бидејќи најмално супер-клуч множество би се состоело од сите атрибути на ентитет, за примарен клуч избравме вештачки клуч Id. * Атрибути: * Id - нумерички податок, задолжителен. * Created_at - датум,задолжителен. * Description - текстуален, опционален. * Status - текстуален, задолжителен. * Ентитет **REPORT** - дисјунктна специјализација, со целосно учество од SUBMISSION. Ги претставува сите пријави од корисниците. * Кандидат клучеви: исто како и ентитетот SUBMISSION и овoј ентитет се идентификува со примарниот вештачки клуч Id. * Слаб eнтитет **FEEDBACK** - целосно идентификуван преку SUBMITTED_FOR.Претставува повратен одговор на дадено барање. * Атрибути: * Submission_type - текстуален,задолжителен. * Created_at - датум,задолжителен * Description - текстуален,опционален * Ентитет **PROJECT_REQUEST** - дисјунктна специјализација, со целосно учество од SUBMISSION.Претставува барање за учество на даден корисниците во даден проект. * Кандидат клучеви: исто како и ентитетот SUBMISSION и овoј ентитет се идентификува со примарниот вештачки клуч Id. * Слаб ентитет **CHANNEL** - податоци за каналите во проектите. * Кандидат клучеви: парцијалниот клуч Name, целосно се идентификува преку идентификувачката релација со PROJECT_THREAD. * Атрибути: * Name - текстуален, задолжителен. * Description - текстуален, опционален. * Ентитет **CUSTOM_ROLE** - податоци за креирани улоги, кои се доделуваат на развивачите во конкретен проект. * Кандидат клучеви: парцијалниот клуч Name, целосно се идентификува преку идентификувачката релација со PROJECT_THREAD. * Атрибути: * Name - текстуален,задолжителен. * Description - текстуален,задолжителен. * Ентитет **PERMISSIONS** - податоци за пермисиите, кои се достапни во дефинирањето на улогите во пеодиенчните проекти. * Кандидат клучеви: Name, како податок уникат за секојa пермисија. Истиот го избравме за примарен клуч на ентитетов. * Атрибути: * Name - текстуален,задолжителен. === Релации * **IS_MODERATED_BY**(N:M) - релација помеѓу TOPIC_THREAD и MODERATOR. Ни кажува кои се модератори на соодветниот TOPIC_THREAD. * Aтрибути: * Started_at: датум,задолжителен. * **ASSIGNED_TO**(N:M) - релација помеѓу THREAD и TAG. Ни кажува кои се таговите на соодветниот thread. * **CONTAINED_IN**(1:N) - релација помеѓу DISCUSSION_THREAD и EMBDEDABLE_THREAD. Ни жажува во кој thread е вгнезден дадениот DISCUSSION_THREAD. * **REFERENCED_BY**(1:N) - релација помеѓу TOPIC_THREAD и PROJECT_THREAD. Ни кажува во кој PROJECT_THREAD е вгнезед дадениот TOPIC_THREAD. * **CREATES**(1:N) - релација помеѓу MODERATOR и TAG. Ни кажува кои тагови ги креирал соодветниот модератор. * **BLACKLISTED_BY**(1:N) - релација помеѓу MODERATOR и BLACKLISTED_USER. Ни кажува кој модератор го ставил кој корисник на 'blacklist'. * **BLACKLISTED_FROM**(1:N) - релација помеѓу TOPIC_THREAD и BLACKLISTED_USER. Ни кажува во кој топик е "blacklisted" корисникот. * **REFERS_TO**(1:N) - релација помеѓу USER и BLACKLISTED_USER. Ни кажува на кој корисник се однесува соодветниот запис во BLACKLISTED_USER. * **FOR_MISCONDUCT**(1:N) - релација помеѓу TOPIC_THREAD и REPORT. Ни кажува во кој и на кој топик правилата се прекршиле. * **ABOUT**(1:N) - релација помеѓу USER и REPORT. Ни кажува кој корисник е обвинет за прекршување на правилата. * **SUBMITTED_BY**(1:N) - релација помеѓу USER и REPORT. Ни кажува кој корисник го поднесол извештајот. * **LIKES**(N:M) - релација помеѓу USER и THREAD. Ни ги претставува сите threads, кој му се допаднале на корисникот. * **SUBMITS**(1:N) - релација помеѓу USER и PROJECT_REQUEST. Ни кажува кој корисник го поднел соодветното барање за учество. * **RECIEVES**(1:N) - релација помеѓу PROJECT_THREAD и PROJECT_REQUEST. Ни кажува за кој проект, корисникот го поднел соодветното барање за учество. * **VALID_IN**(1:N) - релација помеѓу PROJECT_THREAD и CUSTOM_ROLE. Ни кажува во кој проект е валидна соодветната улога. * **HAS**(1:N) - релација помеѓу PROJECT_THREAD и CHANNEL. Ни кажува во кој проект припаѓа соодветниот канал. * **ASSOCIATED_WITH**(N:M) - релација помеѓу PROJECT_THREAD и DEVELOPER. Ни кажува во кој проекти учествувал/учествува соодветниот програмер. * Атрибути: * Started_at - датум, задолжителен. * Ended_at - датум, опционален. * **DEFINED_BY**(N:M) - релација помеѓу CUSTOM_ROLE и PERMISSIONS. Ни кажува кој пермисии ги опфаќа соодветната улога. * **CONSTRUCTS**(N:M) - релација помеѓу CHANNEL и DEVELOPER. Ни кажува кој програмер го креирал соодветниот канал. * **SEND_MESSAGE_IN**(N:M) - релација помеѓу CHANNEL и DEVELOPER. Ни претставува кој програмер испратил порака во соодветниот канал. * Атрибути * Created_at - датум, задолжителен. * Content - текстуален, задолжителен. * **IS_ASSIGNED**(N:M) - релација помеѓу CUSTOM_ROLE и DEVELOPER. Ни кажува кој улоги ги поседува соодветниот програмер. * **SUBMITTED_FOR**(1:1) - релација помеѓу SUBMISSION и FEEDBACK. Претставува кој feedback се однесува на даден submission. * **WRITTEN_BY**(N:1) - релација помеѓу FEEDBACK и PROJECT_OWNER. Претставува кој го напишал дадениот feedback. === Историјат ER дијаграм(v1.0) - [attachment:ER_BUILD_BOARD_v1.xml] \\ ER дијаграм(v2.0) - [attachment:ER_BUILD_BOARD_v2.xml] \\ ER дијаграм(v3.0) - [attachment:ER_BUILD_BOARD_v3.xml]