wiki:Normalization012

Version 2 (modified by 201205, 5 days ago) ( diff )

--

Нормализација

Почетна релација:

R(UserId, FirstName, LastName, Email, Username, Password, City, Neighborhood, Bio, Quote, BookId, Title, Author, Language, !ImageURL, !BookISBNId, ISBN, GenreId, Genre, InventoryId, Availability, Condition, WishId, Priority, RequestId, RequestStatus, RequestDate, TransactionId, BorrowDate, ReturnDate, BorrowDuration, SwapId, ReviewId, Rating, ReviewerComment, ReviewDate, MessageId, MsgTime, MsgDate, MessageContent, FriendshipId, DateCreated, FriendshipStatus, ReportId, ReportType, ReportDate, Details, ReportStatus, ReportedEntity, NotificationId, Type, NotifTime, NotifDate, NotificationStatus, !TN_Description, !MN_Description, !FR_Description, !BR_Description)

Функционални зависности:

UserId -> FirstName, LastName, Email, Username, Password, City, Neighborhood, Bio, Quote Email -> UserId, FirstName, LastName, Username, Password, City, Neighborhood, Bio, Quote Username -> UserId, FirstName, LastName, Email, Password, City, Neighborhood, Bio, Quote

BookId -> Title, Author, Language, !ImageURL

!BookISBNId -> BookId, ISBN

GenreId -> BookId, Genre

InventoryId-> UserId, Availability, Condition, BookId

WishId -> UserId, Priority, BookId

RequestId -> UserId, InventoryId, RequestStatus, RequestDate

TransactionId -> RequestId, BorrowDate, ReturnDate, BorrowDuration

SwapId -> TransactionId

ReviewId -> TransactionId, UserId, Rating, ReviewerComment, ReviewDate

MessageId -> UserId, MsgTime, MsgDate, MessageContent

FriendshipId -> UserId, DateCreated, FriendshipStatus

ReportId -> UserId, ReportType, ReportDate, Details, ReportStatus, ReportedEntity

NotificationId -> Type, NotifTime, NotifDate, NotificationStatus

TransactionId -> NotificationId, !TN_Description

MessageId -> NotificationId, !MN_Description

FriendshipId -> NotificationId, !FR_Description

RequestId -> NotificationId, !BR_Description

Лево: !BookISBNId, GenreId, WishId, SwapId, ReviewId, ReportId

Десно: FirstName, LastName, Password, City, Neighborhood, Bio, Quote, Title, Author, Language, ImageURL, ISBN, Genre, Availability, Condition, Priority, RequestStatus, RequestDate, BorrowDate, ReturnDate, BorrowDuration, Rating, ReviewerComment, ReviewDate, MsgTime, MsgDate, MessageContent, DateCreated, FriendshipStatus

Од двете страни: UserId, Email, Username, BookId, InventoryId, RequestId, TransactionId, MessageId, FriendshipId, NotificationId, TransactionId, MessageId, FriendRequestId, BookRequestId

BookISBNId+={BookId, ISBN, Title, Author, Language, ImageURL}

Не ги содржи сите атрибути

GenreId+={BookId, Genre, Title, Author, Language, ImageURL}

Не ги содржи сите атрибути

WishId+={UserId, Priority, BookId, Title, Author, Language, ImageURL, FirstName, LastName, Email, Username, Password, City, Neighborhood, Bio, Quote}

Не ги содржи сите атрибути

SwapId+={TransactionId, RequestId, UserId, InventoryId, BorrowDate, ReturnDate, BorrowDuration, BookId, RequestStatus, RequestDate, FirstName, LastName, Email, Username, Password, City, Neighborhood, Bio, Quote, Availability, Condition, Title, Author, Language, ImageURL}

Не ги содржи сите атрибути

ReviewId+={TransactionId, UserId, Rating, ReviewerComment, ReviewDate, RequestId, InventoryId, BorrowDate, ReturnDate, BorrowDuration, FirstName, LastName, Email, Username, Password, City, Neighborhood, Bio, Quote, BookId, RequestStatus, RequestDate, Availability, Condition, Title, Author, Language, ImageURL}

Не ги содржи сите атрибути

ReportId+={UserId, ReportType, ReportDate, Details, ReportStatus, ReportedEntity, FirstName, LastName, Email, Username, Password, City, Neighborhood, Bio, Quote}

Не ги содржи сите атрибути

ReviewId, BookISBNId, GenreId, WishId, SwapId, ReportId = { ReviewId, BookISBNId, GenreId, WishId, SwapId, ReportId, NotificationId, TransactionId, UserId, Rating, ReviewerComment, ReviewDate, InventoryId, BorrowDate, ReturnDate, BorrowDuration, FirstName, LastName, Email, Username, Password, City, Neighborhood, Bio, Quote, Availability, Condition, BookId, Title, Author, Language, ImageURL, ISBN, Genre, Priority, ReportType, ReportDate, Details, ReportStatus, ReportedEntity, MessageId, FriendshipId, RequestId, Type, NotifTime, NotifDate, NotificationStatus, MsgTime, MsgDate, MessageContent, DateCreated, FriendshipStatus, RequestStatus, RequestDate, TN_Description, MN_Description, FR_Description, BR_Description}

Следува дека е единствен кандидат клуч и го прогласуваме за примарен клуч.

1НФ: Вредностите на атрибутите се атомични.

2НФ: Сите атрибути се функционално определени од примарните клучеви кои се составени од само еден атрибут (не се композитни).

3НФ: Примарните клучеви ги одредуваат сите атрибути.

БКНФ:

Според дефиницијата за БКНФ, секоја нетривијална функционална зависност X → A мора да има X како суперклуч во релацијата.

Ако ја третираме целата шема како една релација R, тогаш многу од функционалните зависности (на пр. UserId = {FirstName, LastName, Email, Username, Password, City, Neighborhood, Bio, Quote}) ја нарушуваат БКНФ бидејќи UserId не е суперклуч на целата релација.

Но во мојот случај, функционалните зависности веќе се распоредени по релации каде што левата страна е суперклуч.

На пример: ReviewId = {TransactionId, UserId, Rating, ReviewerComment, ReviewDate} е веќе претставена како релација Review(ReviewId, TransactionId, UserId, Rating, ReviewerComment, ReviewDate), каде ReviewId е суперклуч.

Ако продолжиме со декомпозиција на целосната релација според секоја функционална зависност, ќе изгубиме атрибути кои се потребни за другите зависности. На пример, атрибутот UserId е присутен во функционалните зависности:

InventoryId-> UserId, Availability, Condition, BookId

WishId -> UserId, Priority, BookId

RequestId -> UserId, InventoryId, RequestStatus, RequestDate

ReviewId -> TransactionId, UserId, Rating, ReviewerComment, ReviewDate

И многу други, и доколку тргнеме по традиционалната постапка на декомпозиција, UserId може да премине во една релација, а да биде потребна во неколку други.

Затоа, сметам дека тековната структура на базата во случајов е веќе резултат на декомпозиција и ги почитува правилата на БКНФ.

Note: See TracWiki for help on using the wiki.