== ER Дијаграм [[Image(ER_BUILD_BOARD_v5.2.png)]] == Податочни побарувања === Ентитети * Ентитет **USER** - податоци за корсниците. * Кандидат клучеви: Username. Поради чести промени на атрибутот, за примерен клуч избравме вештачки клуч Id. * Атрибути: * Id - нумерички податок, задолжителен. * Username - текстуален податок,задолижетелен. * Description - текстуален податок,опционален. * Password - текстуален податок,задолжителен. * Registered_at - текстуален податок,задолжителен. * Sex - текстуален податок,задолжителен. * Is_active - булов податок, задолжителен. * Email - текстуален податок, задолжителен. * Name - текстуален податок, задолжителен. * Ентитет **DEVELOPER** - преклопувачка специјализација, со делумно учество, од **USER**. Ентитетов се однесува на корисниците, кои се истовремено и развивачи на софтвер. * Кандидат клучеви: исто како и ентитетот USER и овај ентитет се идентификува со примарниот вештачки клуч Id. * Ентитет **PROJECT_OWNER** - преклопувачка специјализација, со делумно учество, од **DEVELOPER**. Ентитетов се однесува на развивачите на софтвер, кои поседуваат проекти. * Кандидат клучеви: исто како и ентитетот DEVELOPER и овај ентитет се идентификува со примарниот вештачки клуч **Id**. * Ентитет **MODERATOR** - преклопувачка специјализација, со делумно учество, од **USER**. Ентитетов се однесува на корисниците, кои истовремено се и модератори на threads. * Кандидат клучеви: исто како и ентитетот **USER** и овај ентитет се идентификува со примарниот вештачки клуч **Id**. * Ентитет **TAG** - претставува податок (лабела) која може да се назначи на даден **THREAD**. Служи за логичко групирање на threads. * Кандидат клучеви: 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 - текстуален, опционален. * Ентитет **PERMISSIONS** - претставува ентите за дадена пермисија (дозвола). Пополнет со предефинирани вредности (''READ'',''WRITE'',''CREATE'',''DELETE''). * Кандидат клучеви: овој ентитет е целосно идентификуван преку атрибутот **Name** * Атрибути: * Name - текстуален податок, задолжителен. * Ентитет **PROJECT_ROLE** - претставува улога назначена на корисник, во даден проект. * Кандидат клучеви: овој ентитет е целосно идентификуван преку сурогат клучот **id** * Атрибути: * id - нумерички податок, задолжителен. * Name - текстуален податок, задолжителен. * Override_type - текстуален податок со предефинирани вредности (''INCLUDE'',''EXCLUDE''), задолжителен * Забелешка: Атрибутот **Override_type** влијае на интерпретацијата на релацијата **FOR_RESOURCE**. * Ентитет **PROJECT_RESOURCE** - претставува ресурс (веќе постоечки ентитет) кој што може да се користи во рамки на даден проект како проектен ресурс. * Кандидат клучеви: овој ентитет е целосно идентификуван преку сурогат клучот **Id** * Атрибути: * Id - нумерички податок, задолжителен. * Слаб Ентитет **ROLE_PERMISSIONS** - означува кој пермисии ги има дадена улога. Целосно се идентификува преку релациите **FOR_ROLE**,**FOR_PERMISSION**. === Релации * **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** и **SUBMISSION**. Ни кажува кој корисник го поднесол извештајот. * **LIKES**(N:M) - релација помеѓу **USER** и **THREAD**. Претставува записи за активноста like од страна на даден корисник за даден thread. * **RECIEVES**(1:N) - релација помеѓу **PROJECT_THREAD** и **PROJECT_REQUEST**. Ни кажува за кој проект, корисникот го поднел соодветното барање за учество. * **VALID_IN**(1:N) - релација помеѓу **PROJECT_THREAD** и **PROJECT_ROLE**. Ни кажува во кој проект е валидна соодветната улога. * **HAS**(1:N) - релација помеѓу **PROJECT_THREAD** и **CHANNEL**. Ни кажува во кој проект припаѓа соодветниот канал. * **ASSOCIATED_WITH**(N:M) - релација помеѓу **PROJECT_THREAD** и **DEVELOPER**. Ни кажува во кој проекти учествувал/учествува соодветниот програмер. * Атрибути: * Started_at - датум, задолжителен. * Ended_at - датум, опционален. * Забелешка: Според **Ended_at** се знае дали **DEVELOPER** е активно вклучен во дадениот проект. * **CONSTRUCTS**(1:M) - релација помеѓу **CHANNEL** и **DEVELOPER**. Ни кажува кој програмер го креирал соодветниот канал. * **SEND_MESSAGE_IN**(N:M) - релација помеѓу **CHANNEL** и **DEVELOPER**. Ни претставува кој програмер испратил порака во соодветниот канал. * Атрибути * Sent_at - датум, задолжителен. * Content - текстуален, задолжителен. * **IS_ASSIGNED**(N:M) - релација помеѓу **PROJECT_ROLE** и **DEVELOPER**. Ни кажува кој улоги ги поседува соодветниот програмер. * **SUBMITTED_FOR**(1:1) - релација помеѓу **SUBMISSION** и **FEEDBACK**. Претставува кој feedback се однесува на даден submission. * **WRITTEN_BY**(1:N) - релација помеѓу **FEEDBACK** и **PROJECT_OWNER**. Претставува кој го напишал дадениот feedback. * **FOR_ROLE**(1:N) - релација помеѓу **ROLE_PERMISSIONS** и **PROJECT_ROLE**. Ни кажува кои пермисии ги има дадена улога. * **FOR_PERMISSION**(1:N) - релација помеѓу **PERMISSIONS** и **ROLE_PERMISSIONS**. Ни кажува на кои улоги му е назначена дадената пермисија. * **FOR_RESOURCE** (1:N) - релација помеѓу **ROLE_PERMISSIONS** и **PROJECT_RESOURCE**. Ни кажува за кои ресурс од проектот е или не е валидна дадената пермисија, која му припаѓа на дадена улога. * Забелешка: Интерпретацијата на вредностите во оваа релација е следната: * Ако за дадена улога **Оverride_type = INCLUDE**, тогаш сите вредности во оваа релација означуваат дека пермисиите за дадената улога, дефинирани во **ROLES_PERMISSIOS**, важат **само** за ресурсите дефинирани во оваа релација. * Ако за дадена улога **Оverride_type = EXCLUDE**, тогаш сите вредности во оваа релација означуваат дека пермисиите за дадената улога, дефинирани во **ROLES_PERMISSIOS**, важат за сите ресурси, **освен** за ресурсите дефинирани во оваа релација. * **IS_A_CHANNEL**(1:1) - релација помеѓу **CHANNEL** и **PROJECT_RESOURCE**. Претставува дека канал е проектен ресурс. === Историјат 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] \\ ЕР дијаграм(v5.1) - [attachment:ER_BUILD_BOARD_v5.1.xml]