|
|
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Добрый день, господа программисты! Создатю небольшую базу данных для игры. База должна содержать информацию о профилях (индекс, количество пройденных уровней, число заработанных апгредов и т.п.) причём в базе должна присутствовать информация о том сколько апгрейдов заработал профиль в том или ином уровне! то есть prof_id level_num upgrade_num 1 1 R 1 2 R 1 3 R 2 1 R 2 2 R 2 3 R 3 1 R 3 2 R 3 3 R где R - случайное число (к примеру от 0 до 10) Последнее что пришло в голову - это создать для каждого профиля таблицу levels-upgrades, но эта идея не особо радует т.к. при создании новых профилей придется создавать дополнительные таблицы. Помогите оптимизировать базу безболезненно)))) Заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 16:40 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
jazzmusicmateПомогите оптимизировать базу безболезненно Я не вижу предпосылок к оптимизации. Зачем она Вам понадобилась? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 18:29 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Куда ещё нормализовывать? Итак 6НФ ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 18:32 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 18:40 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Блин, но тут явно есть какая-то зависимость... При удалении определенного уровня у профиля, нужно удалить и все последующие его уровни. Как и при вставке, должны быть вставлены все предшествующие. Гуру, просветите, что это за зависимость? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 19:01 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Ares_ekbПри удалении определенного уровня у профиля, нужно удалить и все последующие его уровни. Как и при вставке, должны быть вставлены все предшествующие Это ещё почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 19:14 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Ares_ekb, при удалении профиля обнуляются значения всех пройденных уровней не более о какой вставке вы говорите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 19:18 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов, а... уровни не обязаны быть последовательными... Я почему-то решил, что в базе есть ещё такое упорядочивающее отношение: Текущий уровеньСледующий уровень12233445...... Если уровни нельзя перескакивать, то что это за зависимость? jazzmusicmate, я имел ввиду удаление и вставку уровней. Например, человек прошел уровни с 1 по 5. Потом, вдруг, оказывается, что на 3 уровне он использовал чит, и мы решаем удалить информацию о прохождении этого уровня. Что делать с 4 и 5 уровнями? Или он каким-то образом пройдет 8-ой уровень, минуя 6 и 7. Текущая схема данных позволит нам вставить запись о 8-ом уровне, не вставляя 6 и 7. Это явная аномалия. В принципе, вопрос больше теоретический ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 19:34 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Ares_ekb, честно говоря не заморачивался по поводу слежений за пройденными уровнями с читами)) система работает следующим образом: после прохождения каждого уровня игрока перебрасывает на сцену где он может выбрать уровень из списка т.е. каждый пройденый уровень открывает последующий если игрок удаляет профиль то чистится соответствующая запись в таблице profiles и таблица levels-upgrades, которая хранит значения всех заработанных на каждом уровне апгрейдов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 19:41 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
вообще я именно как раз заморачивался над тем как связать профиль из таблицы profiles и данные о количестве пройденных уровней с их апгрейдами. В итоге остановился всё таки на том, что буду при создании профиля создавать таблицу SQL -запросом которая в имени будет иметь id этого профиля(например если profileid=2 то таблица назовется levels-upgrade_2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 19:45 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
jazzmusicmate, нафига?? ) Чем prof_idlevel_numupgrade_num не устраивает?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 19:51 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
я конечно новичёк в работе с базами данных, но мне кажется что запрос удаляющий информацию из таблицы такой структуры будет выполнятся несколько дольше чем запрос чистящий таблицу привязанную к определенному профилю. Поправте меня господа если я ошибаюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 19:56 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Ares_ekbпозволит нам вставить запись о 8-ом уровне, не вставляя 6 и 7. Это явная аномалия Разве? Если чел прошёл 8 уровень, не пройдя 7-й - это проблема игры, а не схемы данных. Схема должна поразумевать усточивость к небольшим изменениям в исходной постановке задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 20:12 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов, но если исходная постановка подразумевает игру с упорядоченными уровнями, то отмена этой упорядоченности, имхо, уже достаточно сильное изменение. Не факт, что пропущенные уровни - это проблема игры, раз схема данных их допускает, она уже не идеальна ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 20:22 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
jazzmusicmateмне кажется что запрос удаляющий информацию из таблицы такой структуры будет выполнятся несколько дольше чем запрос чистящий таблицу привязанную к определенному профилю. А сколько миллионов уровней в твоей игре? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 20:27 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, конечно же миллионов нет и профилей также не миллионы единственное о чем я заморачивался так это об упорядоченности данных в БД да и с точки зрения ООП это звучит логичнее имхо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 20:31 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
jazzmusicmateконечно же миллионов нет Тогда нет и проблем с удалением записей из таблицы. Точка. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 20:32 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
jazzmusicmateда и с точки зрения ООП это звучит логичнее имхоТогда заводи для каждого профиля отдельный класс, чоуж )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 20:34 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Ares_ekb, отдельный класс для профиля имеется) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 20:35 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
jazzmusicmate, для каждого профиля ) class Profile1 {} class Profile2 {} и т.д. Грубо говоря (один) класс соответствует (одной) таблице, (один) экземпляр класса / объект соответствует (одной) строке таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 20:37 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Ares_ekb, класс имеет интерфейс в котором содержится данные профиля - этот класс 1 нет смысла создавать class Profile1, class Profile2 поскольку инициализация (или конструктор как вам будет угодно) будет менятся в зависимости от выбранного профиля - ведь невозможно играть одновеременно под несколькими профилями ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 20:42 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
jazzmusicmateкласс имеет интерфейс в котором содержится данные профиля - этот класс 1 нет смысла создавать class Profile1, class Profile2 Но какой-то смысл в создании отдельных таблиц на каждый профиль ты же нашёл... Вот и в твоём ООП класс Profile1 имеет интерфейс профиля первого игрока, класс Profile2 имеет интерфейс профиля второго игрока и т.д. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 20:49 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
jazzmusicmateнет смысла создавать class Profile1, class Profile2Тогда нет смысла создавать таблицы levels-upgrade_1, levels-upgrade_2 и т.д. Т.к. количество таблиц, грубо говоря, соответствует количеству классов. И дело даже не в том, что человек не может играть одновременно под двумя профилями, а в том, что эти классы Profile1, Profile2 и т.п. один в один будут дублировать друг друга, они будут отличаться только названием. Как и таблицы levels-upgrade_1, levels-upgrade_2, ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 20:50 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, в том то и смысл что класс Profile сам создает дополнительную таблицу для своего экземпляра, и так же благополучно её удаляет при своём уничтожении. Но это не значит что мне нужно следить за свеми профилями одновременно поскольку этим занимается класс Profile ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 20:55 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
jazzmusicmate, а какие ещё классы у тебя есть? Чем они отличаются друг от друга? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 21:02 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Ares_ekb, для внесения работы с БД сушествует еще 1 класс - синглтон который занимается обновлением информации в БД а также содержит екземпляр класса текущего профиля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 21:04 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
jazzmusicmate, ага, т.е. у этого синглтона и профиля разные свойства, методы, разное назначение? Почему ты создал именно 2 класса, ни 1, ни 3, ни 10? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 21:12 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Ares_ekb, классов на самом деле не 2 а гораздо более (враги, игрок, состояние игры и др) просто при помощи именно этих 2-ух я работаю с данными бд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 21:16 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
jazzmusicmate, блин, по-моему, я проиграл ;( Новые классы и новые таблицы создаются по одним и тем же принципам. Если у тебя нет классов типа состояние игры 1, состояние игры 2, ..., игрок 1, игрок 2, игрок 3 ... то и таблиц совершенно одинаковых, но просто с разными номерами не должно быть. Смысл базы данных в том, чтобы одинаковые данные хранить в одной таблице. Ну, или, допустим, понадобится сделать какой-нибудь рейтинг игроков: список людей с количеством пройденных уровней. Если у каждого человека будет отдельная таблица с пройденными уровнями, то как ты построишь этот список? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 21:57 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Ares_ekb, не думал пока об этом но думаю что сформирую это дело sql запросом - не думаю что это будет сложно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 22:02 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Ares_ekbjazzmusicmate, Если у тебя нет классов типа состояние игры 1, состояние игры 2, ..., игрок 1, игрок 2, игрок 3 ... то и таблиц совершенно одинаковых, но просто с разными номерами не должно быть. согласен именно по этому и обратился с таким вопросом поскольку не знал как правильно строит структуру бд какие предложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 22:04 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Ares_ekbно если исходная постановка подразумевает игру с упорядоченными уровнями, то отмена этой упорядоченности, имхо, уже достаточно сильное изменение Совершенно нет. Это ерунда с точки зрения хранилища. Ares_ekbНе факт, что пропущенные уровни - это проблема игры Факт. Нельзя всю логику вешать на хранилище, так как при её изменении придётся менять схему БД, а это как правило неприятная операция, связанная с вопросом переноса данных, проверки крректности операции и прочего. Если в простых случаях ещё прокатит, то в чуть более сложных наступает армагеддец, если заранее не заложить такую возможность. Ares_ekbраз схема данных их допускает, она уже не идеальна ) Глупости это всё. Вопросы контроля целостности данных вполне могут быть отделены от схемы в привычном её понимании. В данной ситуации, если надо каскадное удаление записей или каскадную вставку, или наоборот restrict, проще это сделать триггером. Можно конечно и без триггера, а ссылкой на предыдущий уровень в ключе, но тогда каскадная вставка будет через задницу, и вообще это будет весьма тупо с точки зрения возможной модификации условий игры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 22:09 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
всем спасибо господа! думаю тему можно закрывать - вроде разобрался ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 23:19 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов, я со всем согласен, но, я с самого начала сказал, что это теоретический вопрос (о возможностях реляционной модели) и к никакой реальной, практически осмысленной схеме данных он не имеет отношения. В отношении (профиль, уровень, апгрейды) очевидно есть что-то типа многозначной зависимости, т.к. присутствие в ней одних кортежей подразумевает наличие других (с предыдущими уровнями). Мне интересно 1) что это за вид зависимости и 2) как его можно устранить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2012, 04:44 |
|
||
|
Нормализация Базы Данных
|
|||
|---|---|---|---|
|
#18+
jazzmusicmateкакие предложения?Если в нескольких таблицах одинаковые или очень похожие столбцы, то в большинстве случаев их нужно объединять в одну таблицу. Также как и в ООП. Если у двух классов практически идентичные свойства и методы, то это один класс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2012, 04:47 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1541616]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 450ms |

| 0 / 0 |
