Projektuję program do symulacji baseballu i mam problem z zaprojektowaniem schematu boxscore. Problemem jest to, że chcę śledzić liczbę przebiegów zdobytych w każdej zmianie. Sposób, w jaki to robię w rzeczywistym programie, polega na użyciu dynamicznej tablicy, która rośnie wraz z każdą odtwarzaną zmianą.
Dla tych, którzy nie znają gry w baseball, mecze trwają zwykle dziewięć rund, chyba że gra jest remisowana jeszcze pod koniec 9 rundy. Gry baseballowe mają zatem nieokreśloną długość, co oznacza, że nie mogę zaprojektować bazy danych, która miałaby tylko 9 kolumn dla przebiegów zdobytych w każdej rundzie (no technicznie 18 (9 inningów * 2 drużyny). Jednym z moich pomysłów jest serializacja tablicy i koduję go jako Base64 przed zapisaniem go w bazie danych. Nie wiem jednak, czy jest to dobra technika i zastanawiałem się, czy ktoś ma lepszy pomysł.
W razie potrzeby bazą danych, którą rozwijam, jest PostgreSQL.
Wszelkie sugestie są bardzo mile widziane! Dzięki!
źródło
Nie sądzę, żeby coś było nie tak z samą kolumną
dla 1 do 9 i więcej. To jedno z niewielu miejsc, w których użycie tablicy może być rozsądne.
źródło
To, co tu widzę, jest trochę sprzeczne, ponieważ inningi nie są tak naprawdę bezpośrednim atrybutem gier, z wyjątkiem pośrednich. Ale może to tylko ja. Osobiście zasugerowałbym coś bardziej jak tabelę RunsScored i chciałbym połączyć ją z powrotem z tabelą GamesHeader, więc zastanów się:
To da ci maksymalną liczbę zmian rozgrywanych w konkretnej grze, a ponadto możesz udoskonalić według PlayerID -> TeamID, aby dowiedzieć się więcej szczegółów, jeśli chcesz. Co to może być, nie jestem pewien.
Prawdopodobnie poprawiłbym ten drugi stół tak, aby nie był RunsScored, ale coś o AtBat, ponieważ tak naprawdę to śledzisz. Chciałem tylko pokazać, w jaki sposób możesz zdenormalizować zmianę od stołu. Poprawiłbym mój model, aby płynął w ten sposób, gdyby to był mój projekt. HTH. YMMV.
Zauważ też, że jestem facetem TSQL, ale myślę, że przedstawione poniżej koncepcje działają całkiem dobrze w wyjaśnianiu mojej koncepcji. Semantyka językowa prawdopodobnie się nie pojawi.
źródło