• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Bazy danych od teorii do praktyki podsawowe zagadnienie pomoc w zrozumieniu (Visual Studio)

Object Storage Arubacloud
0 głosów
242 wizyt
pytanie zadane 5 listopada 2019 w SQL, bazy danych przez Jogo Nowicjusz (120 p.)
Witam,

proszę o pomoc w zrozumieniu kwestji kluczy obcych w tabelach.

Mam taką sytuację:

Mam tabelę umiejętności:

Id      Nazwa      Typ       Moc

Tabela Bohater:

Id    Nazwa    Statystyki     Id_grupy_umiejetnosci

Chcę utworzyć tabelę Grupy_umiejętności zawierającą:

Id    Id_umiejętnośći1    Id_umiejętości2     Id_umiejętności3     Id_umiejętności4

Chodzi o to że chcę móc się odwołać do danych o cztrech róznych id z tabeli umiejęności korzystając z tabeli Grupa_umiejętnośći. Rozumiem że jak dodam klucz obcy do tabeli Grupa_umiejętności to w każdym wierszu danych tej tabeli będę miał jedno odwołanie do konkretnego wiersza w tabeli umiejętności (Id) , ale jak to zrobić żeby przechowywać 4 id w każdym wierszu? Moja (nie)wiedza o bazach danych pozwala mi jednynie na wymyślenie takiego rozwiązania.

Bazy danych są dla mnie ciężkim tematem bo nie do końca rozumiem jakie informację mogę zapisać w tabeli a jakie nie, wydawało mi się że mogę rozwiązać problem wpisując zwyczajnie 4-krotnie ten sam klucz obcy (pod inną nazwą) do tabeli Grupy_umiejetności ale Visual Studio mi na to nie pozwala (zgaduję, że nie mogę tego zrobić). Chętnie poczytam jakieś sensowne artukuły o bazach danych , ale myślę że brakuje mi zrozumienia jakiejś podstawowej zasady ich działania, coś co dla innych jest oczywiste a dla mnie nie.

3 odpowiedzi

0 głosów
odpowiedź 5 listopada 2019 przez DragonCoder Nałogowiec (36,500 p.)

Chodzi o to że chcę móc się odwołać do danych o cztrech róznych id z tabeli umiejęności korzystając z tabeli Grupa_umiejętnośći. Rozumiem że jak dodam klucz obcy do tabeli Grupa_umiejętności to w każdym wierszu danych tej tabeli będę miał jedno odwołanie do konkretnego wiersza w tabeli umiejętności (Id) , ale jak to zrobić żeby przechowywać 4 id w każdym wierszu?

co? Nie czaje do konca co chcesz uzyskac. I po co chcesz przechowywac 4 id w kazdym wierszu. 1. baza jest niezdatna na rozbudowe, wrazie dodania kolumny, musisz naniesc dane reczne, co jest nie efektowane i w  wielkich tabelach nie do pomyslenia. Jesl robisz relacje, to robisz 3 tabele. umiejetnosci, grupy i jedna, ktora laczy ze soba grupy i umiejetnosci.

Kursow nie polece, bo nie znam zadnych, a artykuly, czy blogi jakie czytalem, nie zawieraly jeszcze ani razu, ani podstaw bazy danych, ani normalizacji, ani nie mowily o tym, jak do nich podejsc, tak zeby byly podatne na rozbudowe, czego unikac itd. Moze ktos inny cos poleci

0 głosów
odpowiedź 5 listopada 2019 przez jared Gaduła (3,600 p.)
Ogólnie w twoim przypadku na początku zacząłbym od schematu bazy. Określ jakie obiekty ze świata rzeczywistego chcesz przechowywać w bazie oraz jakie związki panują między tymi obiektami. Nie wiem jak dokładnie chcesz zrealizować zadanie, aczkolwiek mam pewną propozycję w jaki sposób mógłbym rozwiązać twój problem.

Obiekty:
- Bohater
- Umiejętność
- Statystyka

Związki:
- Bohater ZAWIERA Umiejętność (związek N:M)
- Bohater MA Statystykę (związek 1:1)

Bohater może zawierać WIELE Umiejętność.
Każda Umiejętność może należeć do WIELU Bohater.

Bohater może mieć JEDNĄ Statystyka.
Każda Statystyka może być używana przez JEDEN Bohater.

Takie rozwiązanie sprowadza się do utworzenia następujących tabel:

1. statystyki(id_s, siła, szybkość, zręczność)
klucz główny id_s

2. umiejętności(id_u, nazwa, typ, moc)
klucz główny id_u

3. bohaterzy(id_b, nazwa, id_s)
klucz główny id_b
klucz obcy id_s

4. bohater_umiejętność(id_b, id_u)
klucz główny id_b, id_u
klucz obcy id_b
klucz obcy id_u

Tak to widzę.
0 głosów
odpowiedź 5 listopada 2019 przez Fikter Początkujący (280 p.)

Twój schemat jest prawidłowy o ile bohater może przyjmować tylko 4 umiejętności. Gdybyś chciał zrobić bez limitu, to stworzyłbym osobną table gdzie by wyglądała tak:

id_bohater | id_umiejętności

W ten sposób twój bohater nie miał by ograniczeń i zamiast 4, to mógłby przyjmować nieskończoność, o ile pamięć przeznaczona na bazę danych by na to pozwoliła.

Co do twojego schematu, to narysowałem arcydzieło:

  

Na przedstawionym schemacie bez problemu odwołasz się do umiejętności i będziesz mógł ich użyć.
Ja używam do tego ADO.NET, ale są inne sposoby do wyciągania zawartości z bazy.

Nie wiem o co chodziło z problem, gdy vs nie pozwala Ci się odwołać pod inną nazwą. Na przykładzie działa to tak:

1.Bohater posiada klucz obcy bazy grupa_umiejętności. (Także, już możesz się odwołać do tej tabeli, ponieważ masz jej id),
2.Tabela Grupa_umiejętności posiada 4 klucze obce do tabeli umiejętności (Teraz posiadając klucze obce z tabeli umiejętność, możesz wysłać zapytanie, jaka jest ta konkretna umiejętność).

Co do kursów, jest masa materiałów czy to w google, albo yt, a może książka, tutaj Ci nie pomogę, każdy inaczej przyswaja wiedzę. Mogę Ci na pewno polecić bazę SQLite do nauki w budowaniu relacji, może nie jest rozbudowa pod względem typu zmiennych, ale na pewno pomoże w nauce relacji. 

Co do tego, że nie wiesz jakie informacje możesz przechowywać w bazie, to odpowiedź jest taka, możesz tam trzymać wszystko.

W razie pytań pisz śmiało :D, no i mogłem coś słabo opisać, ponieważ jestem pod drineczku. 

Podobne pytania

0 głosów
1 odpowiedź 711 wizyt
pytanie zadane 6 października 2021 w Systemy operacyjne, programy przez ShockWave Bywalec (2,350 p.)
0 głosów
2 odpowiedzi 1,324 wizyt
pytanie zadane 8 czerwca 2017 w C# przez yorjano Użytkownik (560 p.)
0 głosów
1 odpowiedź 171 wizyt
pytanie zadane 25 maja 2017 w C# przez yorjano Użytkownik (560 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...