Tworzę stronę internetową, na której można obstawiać zakłady na wszystkie mecze nadchodzącego turnieju piłkarskiego Euro 2012. Potrzebujesz pomocy przy podejmowaniu decyzji o podejściu do fazy pucharowej.
Poniżej utworzyłem makietę, z której jestem bardzo zadowolony, jeśli chodzi o przechowywanie wyników wszystkich „znanych” meczów fazy grupowej. Ta konstrukcja bardzo ułatwia sprawdzenie, czy użytkownik postawił prawidłowy zakład, czy nie.
Ale jaki jest najlepszy sposób na przechowywanie ćwierćfinałów i półfinałów? Te mecze zależą od wyniku w fazie grupowej.
Jednym podejściem, o którym myślałem, było dodanie WSZYSTKICH meczów do matches
tabeli, ale przypisanie różnych zmiennych lub identyfikatorów drużynom gospodarzy / gości na mecze w fazie pucharowej. A potem przygotuj inną tabelę z tymi identyfikatorami zmapowanymi do zespołów ... To może działać, ale nie wydaje się właściwe.
źródło
Odpowiedzi:
Zacznę od próby naprawienia wszystkich z góry określonych informacji w samym modelu, w tym
Niektóre z tych informacji będą danymi w tabelach, niektóre będą logiką skodyfikowaną w widokach.
Może coś takiego:
Informacje takie, które drużyny grają w Q1, nigdy nie muszą być przechowywane bezpośrednio, ponieważ można je obliczyć na podstawie wyników fazy grupowej. Że tylko zmiany, aby jak postępy jego turniejowe są wkładki do
result
stołu.źródło
Myślę, że używanie identyfikatora zespołu jest właściwą drogą. Kolejny poziom abstrakcji dla wszystkich rund finałowych dodaje niepotrzebnej złożoności, nie dając wiele korzyści poza wstępnym załadowaniem tabeli meczów danymi.
Struktura danych wygląda na dość solidną, aby to obsługiwać. Ćwierćfinał i półfinały będą musiały zostać dodane do tabeli meczów, gdy tylko pojawią się początkowe wyniki meczu. Jeśli mecze są przydzielane losowo, jest to operacja ręczna, jednak jeśli są w określonej kolejności ...
... wtedy można to zrobić za pomocą zapytania. Ponownie, złożoność zapytania może nie być warta wysiłku w zależności od liczby zespołów
źródło
Dobrze jest przechowywać wszystkie dopasowania w tabeli „mecze”. Dodałbym jednak do niego dodatkowe pole „ranking”, ponieważ później potrzebujesz go do zbudowania drzewa binarnego w celu wydajnego przeszukiwania tabeli w pamięci. Jest to klasyczny problem z algorytmem rankingowym i możesz znaleźć w Google szary turniej, aby uzyskać więcej informacji lub zajrzeć do mojej historii przepełnienia stosu. Zasadniczo turniej to drzewo binarne. Oto dobry artykuł na temat szarych kodów: http://villemin.gerard.free.fr/Wwwgvmm/Numerati/CodeGray.htm . Niestety to francuski. Oto jak wygenerować drzewo binarne z rankingu: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/229068 .
źródło