Wpis z mikrobloga

Tworze bazę danych, która będzie zawierała informacje o meczach miedzy zawodnikami.
Moim problemem jest stworzyć relacje miedzy tymi tabelami, aby łatwo można było znaleźć wszystkie mecze, w których brał udział zawodni i łatwo policzyć mecze, które wygrał/przegrał.
Na ten moment mam cos takiego, ale wydaje mi się to totalnie bez sensu:

public class Player
{
public long Id { get; set; }
...
public virtual List<Match> Matches1 { get; set; } = null!;
public virtual List<Match> Matches2 { get; set; } = null!;
}

public class Match
{
public long Id { get; set; }
public long Player1Id { get; set; }
public long Player2Id { get; set; }
...
public MatchResult MatchResult { get; set; }
public WinnerResult WinnerResult { get; set; }
public virtual Player Player1 { get; set; } = null!;
public virtual Player Player2 { get; set; } = null!;
}

Ponieważ mój zawodnik posiada dwie listy meczy, które grał z pozycji pierwszej i drugiej.

Czy wie ktoś jak rozwiązać ten problem? Będę wdzięczny za jakiś link lub cokolwiek innego co naprowadzi mnie na rozwiązanie tego problemu.

#bazydanych #csharp
  • 6
  • Odpowiedz
@mdlejtecole:

Ja mam apkę i zrobiłem coś takiego. Też mam klasę Player ale ona przetrzymuje generalne informacje o playerze niezależne od meczu i to jest zupełnie inny kontekst. Czasami potrzebuje sprawdzić czy dany Player jest tym z kolekcji MatchPlayer i wtedy robię zwykłe zapytanie linq.

public class
  • Odpowiedz
  • 0
@Mazowia: Ale to masz teraz relacje wiele do wielu i pozniej moga wystapic bledy z performance (tak mi sie wydaje). Chcialem uniknac robienia tabeli, ktora laczyla by te dwie tabele. Ale nie wiem czy jest to mozliwe.
  • Odpowiedz
@mdlejtecole: Dlaczego tak uważasz? Dane o statystykach gracza masz w MatchPlayer i tutaj dalej masz pośredni dostęp do rezultatu meczy z klasy Match. Możesz zrobić turbotabele która będzie duplikować dane z niektórych kolumn ale to chyba bez sensu?
  • Odpowiedz