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.