konto usunięte

Temat: Normalizacja bazy danych

Witajcie,

Mam następującą tabelę:
Game {#gameTitle#, genre, size, userRating, language, release, developer, publisher, gameMode, ageRatingSym, ageRatingName, ageRatingAge, price, overview}

w bazie danych, którą muszę doprowadzić do 3. formy normalnej. Niestety jedyny pomysł jaki mi przychodzi do głowy to podział tej tabeli na 2 mniejsze:
Game {#gameTitle#, genre, size, userRating, language, release, developer, publisher, gameMode, price, overview, ratingSym*}

ageRating {#ratingSym#, ratingName, ratingAge}

Opis dla tabeli ageRating (bo Game jest raczej jasna):
ratingSym - symbol, np. M
ratingName - pełna nazwa, np. Mature
ratingAge - wymagany wiek na daną kategorię, np. +17

Czy jest tutaj w ogóle co więcej normalizować, bo nie widzę możliwości podzielenia tego bardziej?

--- edit ---
Primary Keys oznaczone #Nazwa#, bo widzę, że nie da się podkreślić.Krzysztof Janda edytował(a) ten post dnia 07.03.12 o godzinie 18:52
Mateusz Kurleto

Mateusz Kurleto Szukamy wybitnych
talentów do
świetnego zespołu IT
w Gdańsku

Temat: Normalizacja bazy danych

Krzysztof Janda:
No i bdb:)
W 3NF wszystkei atrybuty muszą być w pełni funkcyjnie zależne wyłącznie od klucza głównego. Jeżeli ratingName, i ratingAge wynikają jakkolwiek z ratingSym to właśnie te atrybuty należy wyłączyć do osobnej tabeli.

konto usunięte

Temat: Normalizacja bazy danych

Tylko teraz jak tu pokazać drogę normalizacji od "zera do gier kodera" (:D) tj. poprzez 1NF, 2NF do 3NF jak tu tylko 1 krok jest..? :(

--- update ---

Zmieniłem strukturę bazy (dla siebie bym tego nie robił, ale muszę pokazać drogę normalizacji, więc muszę mieć na czym). Teraz moja baza wygląda następująco:
- nieznormalizowana:
Game {#gameTitle#, genreName, genreOverview, size, userRating, language, release, developerName, developerFounded, developerWebsite, developerHeadtquarter, publisherName, publisherFounded, publisherWebsite, publisherHeadquarter, gameMode, ageRatingSym, ageRatingName, ageRatingAge, price, overview}

- 3NF
Game {#gameTitle#, size, userRating, language, release, developer*, publisher*, gameMode, ageRatingSym*, price, overview}

Genres {#gameTitle#*, #genreName#*}

Genre {#genreName#, genreOverview}

AgeRating {#ageRatingSym#, ageRatingName, ageRatingAge}

Company {#companyName#, companyFounded, companyWebsite, companyHeadquarter}

Postanowiłem nie rozdzielać pól developer i publisher na oddzielne tabele, ponieważ zawierają dokładnie te same dane - jest jedna tabela Company.

Mam nadzieję, że mój design jest poprawny? ;)Krzysztof Janda edytował(a) ten post dnia 07.03.12 o godzinie 19:46

konto usunięte

Temat: Normalizacja bazy danych

Krzysztof Janda:
Mam nadzieję, że mój design jest poprawny? ;)

hmm jako PK stosował bym jakieś wartości numeryczne a nie tekst

a co jak masz więcej niż jednego developera?

konto usunięte

Temat: Normalizacja bazy danych

Przemysław R.:
hmm jako PK stosował bym jakieś wartości numeryczne a nie tekst

Czyli zrobić coś w rodzaju
Genre {#genreId#, genreName, genreOverview}

?
a co jak masz więcej niż jednego developera?
O.. o tym nie pomyślałem, ale wybiorę takie gry, żeby był jeden developer :)Krzysztof Janda edytował(a) ten post dnia 07.03.12 o godzinie 19:58

konto usunięte

Temat: Normalizacja bazy danych

Krzysztof Janda:
Przemysław R.:
hmm jako PK stosował bym jakieś wartości numeryczne a nie tekst

Czyli zrobić coś w rodzaju
Genre {#genreId#, genreName, genreOverview}

?

coś w ten deseń
bo wiesz nazwy lubią się zmieniać
a co jak masz więcej niż jednego developera?
O.. o tym nie pomyślałem, ale wybiorę takie gry, żeby był jeden developer :)

wystarczy zrobić tabelę

idGry, IdOsoby, IdRoli

Jedna osoba może mieć kilka ról np. developer i publisher a jak będziesz chciał dodać kolejne to nic nie stanie na przeszkodzie bo wystarczy dodać do tabeli z rolami

konto usunięte

Temat: Normalizacja bazy danych

Ok. Dodałem tabelkę, o której mówiłeś i jeszcze poprawiłem w ten sam sposób gameMode i language. Teraz wszystko wygląda tak:
Game {gameId, gameTitle, size, userRating, release, ageRatingSym*, price, overview}

Genres {gameId*, genreId*}

Genre {ganreId, genreName, genreOverview}

Companies {gameId*, companyId*, roleId*}

AgeRating {ageRatingSym, ageRatingName, ageRatingAge}

Company {companyId, companyName, companyFounded, companyWebsite, companyHeadquarter}

Roles {roleId, roleName}

GameModes {gameId*, gameModeId*}

GameMode {gameModeId*, gameModeName}

Languages {gameId*, langId* }

Language {langId, langName}

Zostawiłem ageRatingSym jako klucz, bo to jedna litera, więc myślę, że może być. W przykładzie jako id były stosowane 3-literowe ciągi - studentId.

Nie przesadziłem..?

konto usunięte

Temat: Normalizacja bazy danych

dodaj jeszcze Foregin Key i będzie całkiem dobrze

konto usunięte

Temat: Normalizacja bazy danych

Przemysław R.:
dodaj jeszcze Foregin Key i będzie całkiem dobrze

Ale w którym miejscu?

konto usunięte

Temat: Normalizacja bazy danych

Podobnie jak GameModes tabelę Languages nazwij jako GameLanguages.
No i idąc tym tropem nie może być jednocześnie (Genres i Genre), (Companies i Company), za taki projekt każdy, nawet rozsądny programista obrzuciłby Cię jajami :)

konto usunięte

Temat: Normalizacja bazy danych

Dzięki za rady :)

Zmieniłem:
Languages na GameLanguages
Companies na Performers
Genres na GameGenres
GameMode na Mode

Nie chcę, żeby Dr Sherratt mnie jajkami obrzuciła ;)
Jakub Panas

Jakub Panas Konsultant
techniczny,
IPR-Insights

Temat: Normalizacja bazy danych

Krzysztof Janda:
Zostawiłem ageRatingSym jako klucz, bo to jedna litera, więc myślę, że może być. W przykładzie jako id były stosowane 3-literowe ciągi - studentId.

Ja bym jednak był za rozdzieleniem symbolu i klucza.
Jak zagęszczą symbolikę lub dojadą z którejś strony do brzegu i rozszerzą pole, to trzeba będzie szukać wszystkich wystąpień w tabelach połączonych i zmieniać typ.
Przykład: klasy sprawności energetycznej. Na początku było jednoliterowe A-F, później pojawiło się AA i AAA.

konto usunięte

Temat: Normalizacja bazy danych

Jakub Panas:
Jak zagęszczą symbolikę lub dojadą z którejś strony do brzegu i rozszerzą pole, to trzeba będzie szukać wszystkich wystąpień w tabelach połączonych i zmieniać typ.

Co prawda to jest baza na zaliczenie, więc jak zmienią symbolikę to już nie będzie istnieć, ale przekonałeś mnie, zrobię wersję w pełni poprawną. :)

konto usunięte

Temat: Normalizacja bazy danych

Nie chcę off-topować, ale dostałem wyniki za bazę danych, która jakby nie było powstała dzieki Waszej pomocy. :)

Ogólna ocena: A (70%) więc jestem zadowolony :) Gdyby ktoś był zainteresowany to poniżej pełny feedback.

Description: Bottom-up analysis and implementation

Un_normalized_structure_and_functional_dependencies (33.33% of this assessment)
Create an un-normalized structure that lists the attributes to be stored in your database. Include a list of the sources you have used to identify attributes. For web sources, include the date of access. Identify and describe functional dependences between your attributes. Identify a primary key to the structure and note alternative candidate keys.
Grade achieved: Good attributes and dependencies 5/10
Grade based feedback: A collection of attributes is presented.

Functional dependencies are presented. A primary key to the un-normalized structure is identified.

Suggested improvements.
Cross-reference attributes with their sources. Revisit functional dependencies. Indicate any repeating groups of attributes. The dependency GameId -> Genre is contradicted in the step to first normal form, where Genre is identified as a repeating attribute.

Bottom_up_analysis_to_third_normal_form (33.33% of this assessment)
Bring your unnormalized structure to 3rd normal form following the steps shown in lectures.
Grade achieved: Excellent 7.5/10
Grade based feedback: The un-normalized structure is brought to 3rd normal form. Each normalization step is correctly based on the attributes and functional dependencies identified in the first part of the assignment.

Suggested improvements
Provide an explanation of each normalization step in terms of the definitions of first, second and third normal forms. Ensure that every normalization step is justified by the attributes and functional dependencies identified in the first part of the assignment.

Implementation_and_demonstration (33.33% of this assessment)
Implement your 3rd normal form relations as a PostgreSQL Database and implement some SQL queries to show your database in action.
Grade achieved: Almost Perfect 8.5/10
Grade based feedback: CREATE TABLE statements that implement the relations from part two of the assignment are included in the submission. Appropriate primary and foreign key constraints are established.
SQL queries to demonstrate the database in action are presented. Justification for the choice of queries is provided.

Suggested improvements
Revisit and improve justification for the choice of queries to demonstrate the database.

Overall Mark: 70.0%

Jeszcze raz dziękuję wszystkim za pomoc. :)

Temat: Normalizacja bazy danych

jest jakiś automattyczny test, który sprawdza poprawność bazy?

Następna dyskusja:

Normalizacja bazy danych




Wyślij zaproszenie do