Вот и пришел день, когда я задал себе вопрос: "Зачем писать 100500 строк кода реализации апдейта изменений в БД, при изменении какой то ключевой записи". На сегодняшний день, я уже знал о релейшнах и триггерах, но руки до реализации связок таблиц так и не дошли...
Какая от этого польза
Возьмем к примеру все таблицы accounts_***
Все таблицы, которые начинаются на accounts_ имеют в себе ключ - который отвечает за логин пользователя (который хранится в таблица accoutns).
Мы можем спроектировать таблицы так, что при удалении или изминении записи в таблице accounts - записи в других таблицах, которые ссылаются на таблицу accouns - будут изменены автоматически.
Для реализации этого используется FOREIGN KEY
Например:
PHP код:
CREATE TABLE IF NOT EXISTS `account_log` (
`time` int(11) NOT NULL,
`login` varchar(32) NOT NULL,
`ip` varchar(15) NOT NULL,
KEY `login` (`login`),
KEY `ip` (`ip`),
FOREIGN KEY (`login`) REFERENCES `accounts` (`login`)
ON UPDATE CASCADE
ON DELETE CASCADE
) DEFAULT CHARSET=utf8
Давайте взглянем на это визульано
Ниже я представил 2 изображения структуры моих таблиц. А именно таблицы characters_ без связки и со связкой:
Скрин №1
Скрин №2
А вот и моя структура таблиц Логин Сервера
Вывод:
Полностью реализовать и "уследить" изменения в самом игровом сервере - хорошо, но часто трудно, а именно трудно найти место где это забыли сделать. Я считаю намного проще реализовать хорошую структуру БД, что даст возможность избежать "косяки, баги, дюпы" и т. д. К примеру - удалился игрок с БД. В таблице чарактерс его нету. Но произошел сбой, и очистка его предметов в таблице итемс не произошла. Без связи БД есть возможность, что зарегистрируется новый игрок, обджектАйди которого совпадет с удаленным - он получит итемы персонажа который был удален. Со связанной структурой БД - такого не получится.
п.с. Я только начал делать структуру.... Если её доделать до конца - связей будет куда больше... Да и запросы можно будет строить куда удобнее....
п.п.с. Интересно, занимался ли еще кто то подобным в сфере л2? Какие результаты?
Добавлено через 6 минут
UPD: Еще парочка скринов