Projektuje bazę danych , która będzie miala za zadanie przechowywać wyniki klubów tzn zdobyte bramki, punkty. Jaki zawodnik nalezy do jakiego klubu, ile strzelil bramek.
I tu moje pytanie jak polaczyc relacja tabele aby KlubBramki z tabeli Klub sumowaly zdobyte bramki IdKliubGospodarze BramkiGospodarze/ IdKlubGoscie BramkiGoscie. Mam powiazane relcja IdKlub z IdKlubGospodarze i IdKlub z IdKlubGoscie. Ale jak powiazac te zdobyte bramki z Id poszczegolnego Klubu. zeby wynik pojawialy sie w tabeli Klub w oknie KlubBramki.
Kolumny KlubPunkty i KlubBramki to nie są zwykłe dane, ale wartości obliczeń. Powiązać ot tak się tego nie da. Jest coś takiego jak computed columns i być może w ten sposób mógłbyś to rozwiązać (choć pewności nie mam), ale ja takiego rozwiązania bym nie użył. Widzę dwie opcje:
spróbować stworzyć trigger -a, który w momencie gdy pojawi się nowy rekord w tabeli Mecz wykona odpowiednie instrukcje SQL i zaktualizuje kolumny KlubPunkty i KlubBramki w tabeli Klub.
wywalić kolumny KlubPunkty i KlubBramki z tabeli Klub i stworzyć perspektywę ( view ) Klub, która będzie umożliwiała odczytanie tych danych (tam te kolumny będą widoczne). Coś podobnego robiłem ostatnio tutaj http://forum.dobreprogramy.pl/baza-danych-rozgrywek-t440973.html.
EDIT: Zapytanie, które użyłbyś do stworzenia perspektywy może być następujące:
SELECT temp.IdKlub, temp.KlubNazwa, temp.KlubBarwa,
SUM(temp.BramkiStrzelone) AS BramkiStrzelone,
SUM(temp.BramkiStracone) AS BramkiStracone,
SUM(temp.Wygrana) AS Wygrane,
SUM(temp.Remis) AS Remisy,
SUM(temp.Przegrana) AS Przegrane,
Punkty = SUM(temp.Remis) + SUM(temp.Wygrana) * 3
FROM (
SELECT k.IdKlub, k.KlubNazwa, k.KlubBarwa,
BramkiStrzelone = CASE
WHEN m.IdKlubGospodarze = k.IdKlub THEN m.BramkiGospodarze
ELSE m.BramkiGoscie
END,
BramkiStracone = CASE
WHEN m.IdKlubGospodarze = k.IdKlub THEN m.BramkiGoscie
ELSE m.BramkiGospodarze
END,
Wygrana = CASE
WHEN (m.IdKlubGospodarze = k.IdKlub AND m.BramkiGospodarze > m.BramkiGoscie) OR
(m.IdKlubGoscie = k.IdKlub AND m.BramkiGoscie > m.BramkiGospodarze) THEN 1
ELSE 0
END,
Remis = CASE
WHEN (m.IdKlubGospodarze = k.IdKlub OR m.IdKlubGoscie = k.IdKlub ) AND
m.BramkiGospodarze = m.BramkiGoscie THEN 1
ELSE 0
END,
Przegrana = CASE
WHEN (m.IdKlubGospodarze = k.IdKlub AND m.BramkiGospodarze < m.BramkiGoscie) OR
(m.IdKlubGoscie = k.IdKlub AND m.BramkiGoscie < m.BramkiGospodarze) THEN 1
ELSE 0
END
FROM Mecz AS m, Klub AS k
WHERE m.IdKlubGospodarze = k.IdKlub OR m.IdKlubGoscie = k.IdKlub
) AS temp
GROUP BY temp.IdKlub, temp.KlubNazwa, temp.KlubBarwa
Daj znać, na które rozwiązanie się zdecydujesz oraz gdy będziesz miał z nim jakieś problemy.