ocena relacyjnej bazy

0

Cześć,
Mógłby mi ktoś sprawdzić czy taki schemat relacyjnej bazy danych jest ok? Z góry dziękuję za pomoc.

Baza ma przechowywać tłumaczenia słówek, słówka podzielone na kategorie oraz sprawdzać nauczone słówka

Schemat Bazy

0

W jakim celu mamy osobną tabelę user_details skoro relacja do user jest 1:1? Jeżeli nie planujesz wielu nazw użytkownika i telefonu to te pola po prostu używa w tabeli User.

0

UserLang bardziej nadaje sie na relacje z Users, niz z UserDetail.
Jak juz chcesz miec relacje 1..01 wzgledem User i UserDetail to lepiej przeniesc klucz obcy do tabeli UserDetail, bo rekord tabeli jako taki sam w sobie nic nie znaczy bez rekordu w tabeli User. Mozesz w tabeli UserDetail dac klucz glowny jako klucz obcy wzgledem tabeli User.
Zachowuj spójność podczas nazywania tabel. Razy uzywasz liczby pojedynczej, a raz mnogiej.

0

A może jedna tabela z words i referencja sama do siebie? Byłoby ciekawiej ;).

0

Words --- W_Categories są połączone 2 związkami: 1 - 0..N. Co chciałeś w ten sposób przekazać odbiorcy?

0
yarel napisał(a):

Words --- W_Categories są połączone 2 związkami: 1 - 0..N. Co chciałeś w ten sposób przekazać odbiorcy?

żeby translation nie robił
ewentualnie w translation samo idWord idWord2 i wtedy możesz sobie łatwo spinać wszystkie słowa

0

Poprawiłem i jeśli dobrze Was rozumiem to tak będzie git?

Schemat bazy

0
marnit napisał(a):

Poprawiłem i jeśli dobrze Was rozumiem to tak będzie git?

Schemat bazy

a) A do czego jest ten FK: ID_WORD_CATEGORIES w WORDS? Nie masz związku między WORDS i CATEGORIES w modelu ;)
b) Gdybyś miał, to znaczyłoby, że słowo ma jakąś arbitralnie przypisaną kategorię, ale jednocześnie może mieć też wiele innych kategorii (via W_CATEGORIES)

0

@marnit: odpowiadam na komentarz w poście.

ad a) dlaczego nie mam związku, tabela word jest połączona z tabelą w_categorie (wiem literówka :)) chyba nie rozumiem :(

Skoro w WORD masz klucz obcy oparty o kolumnę ID_WORD_CATEGORIES, to oznacza, że odnosisz się do jakiejś tabeli, w której ID_WORD_CATEGORIES jest kluczem głównym. Ten klucz nie może się odnosić do tabeli W_CATEGORIE, bo tam kluczem głównym jest ID_WORD, ID_CATEGORY (a kluczem tabeli W_CATEGORIE nie może być nic innego, bo nie byłbyś w stanie wyrazić w takim modelu faktu, że słowo może należeć do różnych kategorii, a zdaje się, że taka jest intencja? Ewentualnie musiałbyś zrezygnować z klucza głównego i dopuścić możliwość wielokrotnej przynależności słowa do tej samej kategorii ;-) ) . Inna opcja: "eee to pomyłka, tak naprawdę klucz obcy to ID_WORD + ID_WORD_CATEGORIES" -> sens istnienia W_CATEGORIE zostaje podważony.

chodzi o to, że id_word powinno być połączone z id_word_categories?

Wg mnie:
a) id_word_categories powinno zniknąć z WORD i znika pytanie "po co WORD.ID_WORD_CATEGORIES?"
albo
b) na diagramie powinna pojawić się "kreska" między WORD i CATEGORY obrazująca, że między WORD i CATEGORY jest jakiś logiczny związek (tj. słowo ma przypisaną jakąś wyróżnioną kategorię)

Opcja b) wprowadza możliwość wyróżnienia pewnej kategorii dla słowa i równocześnie masz możliwość przypisania wielu kategorii do słowa.

Nie znam Twojej domeny, więc trudno pisać, że coś powinno być tak, a nie inaczej. Stąd pytanie inicjalne, co chciałeś zakomunikować takim modelem?

Od strony notacji przyczepiłbym się do "braku napisów nad kreskami" -> nazwaniem związków między relacjami po ludzku.

Dla Ciebie może to oczywiste i nie warte podpisywania, ale pamiętaj, że to może być oczywiste tylko dla Ciebie :)

0

Mam nadzieje, ze teraz już dobrze poprawiłem?

Schemat Bazy

0

Tak, wygląda lepiej. Brakuje mi tu elementu grupującego słowa względem języków. np. jak Twój model odpowiada na pytanie "W jakim języku jest dane słowo?" ? Może w Twoim rozwiązaniu takie pytania/odpowiedzi ni są potrzebne? Nie wiem.

Taki element grupujący Słowa (np. Kurs, Słownik) mógłby być użyty do wyboru grupy słów do nauki, a później do wyboru kategorii.

0

@marnit: odpowiadamy w postach, a nie komentarzach.

Zakładając model jaki przygotowałeś, to jak tabela LANG odpowiada na to pytanie? Tłumaczenie na język obcy masz (WORD->LANG, WORD->TRANSLATION), ale tłumaczenie z jakiego języka?

0

No w tabeli word, będą wszystkie słówka, każde słówko będzie miało przyporządkowaną kategorię z tabeli category oraz odpowiedni język z tabeli lang i odpowiednie tłumaczenie z tabeli translation.
Czy ja to źle rozumiem? Że to tak nie zadziała? Nie będzie relacyjna baza?

1
marnit napisał(a):

No w tabeli word, będą wszystkie słówka, każde słówko będzie miało przyporządkowaną kategorię z tabeli category oraz odpowiedni język z tabeli lang i odpowiednie tłumaczenie z tabeli translation.
Czy ja to źle rozumiem? Że to tak nie zadziała? Nie będzie relacyjna baza?

Relacje masz, związki między nimi masz, więc jest to model relacyjny. Czy da się w nim wyrazić wszystko czego potrzebujesz, tego nie wiem.

Skoro język w tabeli WORD odnosi się do języka, w którym wyrażone jest dane słowo, to na jaki język jest ono tłumaczone?

0
yarel napisał(a):

Relacje masz, związki między nimi masz, więc jest to model relacyjny. Czy da się w nim wyrazić wszystko czego potrzebujesz, tego nie wiem.

Skoro język w tabeli WORD odnosi się do języka, w którym wyrażone jest dane słowo, to na jaki język jest ono tłumaczone?

W tabeli Word przechowywane są wszystkie obce słówka. Natomiast w tabeli translation ich odpowiednie tłumaczenie na język polski.
Chyba już wiem o co chodzi.
Da się zrobić tak, żeby dane w tabeli translation się nie powtarzały? Bo w tabeli word będą słówka w różnych językach ale na polski będą mieć to samo tłumaczenie.

0
marnit napisał(a):
yarel napisał(a):

Relacje masz, związki między nimi masz, więc jest to model relacyjny. Czy da się w nim wyrazić wszystko czego potrzebujesz, tego nie wiem.

Skoro język w tabeli WORD odnosi się do języka, w którym wyrażone jest dane słowo, to na jaki język jest ono tłumaczone?

W tabeli Word przechowywane są wszystkie obce słówka. Natomiast w tabeli translation ich odpowiednie tłumaczenie na język polski.
Chyba już wiem o co chodzi.
Da się zrobić tak, żeby dane w tabeli translation się nie powtarzały? Bo w tabeli word będą słówka w różnych językach ale na polski będą mieć to samo tłumaczenie.

Da się, ale czy warto, to nie wiem. Głównym użytkownikiem modelu będziesz Ty, więc jak sobie zaprojektujesz, tak będziesz miał. Zrób tak, żeby było dobrze :D

Ja bym zrobił inny (nie znaczy, że lepszy) model dla postawionego problemu. "?" dla zobrazowania, że nie zawsze model bez podpisanie pewnych elementów musi być klarowny.

screenshot-20200526083440.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1