Я разрабатываю программу симуляции бейсбола и столкнулся с проблемой при разработке схемы boxscore. Проблема, с которой я столкнулся, заключается в том, что я хочу отслеживать, сколько набранных очков забито в каждом иннинге. В реальной программе я делаю это, используя динамический массив, который увеличивается с каждым разыгрываемым иннингом.
Для тех, кто не знаком с игрой в бейсбол, игры, как правило, имеют длину в девять иннингов, если только игра не будет привязана к концу девятого тайма. Таким образом, бейсбольные игры имеют неопределенную длину, что означает, что я не могу спроектировать базу данных так, чтобы в каждом иннинге было забито только 9 столбцов для прогонов (ну, технически, 18 (9 иннингов * 2 команды). У меня была идея сериализовать массив и закодировать его как Base64 перед сохранением в базе данных. Однако я не знаю, является ли это хорошим методом для использования, и мне было интересно, есть ли у кого-нибудь идея получше.
Если это имеет значение, база данных, которую я разрабатываю, - это PostgreSQL.
Любые предложения с благодарностью! Благодарность!
источник
Я не думаю, что есть что-то не так с просто колонкой
от 1 до 9 и далее. Это одно из немногих мест, где использование массива может быть разумным.
источник
Так что то, что я вижу здесь, немного противоречиво, потому что возможности на самом деле не являются прямым атрибутом игр, за исключением косвенного. Но, возможно, это только я. Я бы лично предложил что-то более похожее на таблицу RunsScored и связал бы ее с какой-нибудь таблицей GamesHeader, поэтому подумайте:
Это даст вам максимальный иннинг, сыгранный для конкретной игры, и вы можете дополнительно уточнить по PlayerID -> TeamID, чтобы выяснить больше деталей, если хотите. Что это может быть, я не уверен.
Я бы, вероятно, на самом деле уточнил бы, что вторая таблица должна быть не RunsScored, а чем-то вроде AtBat, потому что это действительно то, что вы отслеживаете. Я просто хотел показать, как можно денормализовать подачу вне игрового стола. Я бы настроил свою модель так, чтобы это было, если бы это был мой проект. НТН. YMMV.
Также обратите внимание, что я парень TSQL, но я думаю, что концепции, изложенные ниже, очень хорошо объясняют мою концепцию. Семантика языка, вероятно, не будет соответствовать.
источник