Показать сообщение отдельно
Непрочитано 19.08.2013, 21:00   #1
Аватар для ALF.
Герой

Автор темы (Топик Стартер) Защита целосности и структуры данных DB

Вот и пришел день, когда я задал себе вопрос: "Зачем писать 100500 строк кода реализации апдейта изменений в БД, при изменении какой то ключевой записи". На сегодняшний день, я уже знал о релейшнах и триггерах, но руки до реализации связок таблиц так и не дошли...

Какая от этого польза
Возьмем к примеру все таблицы accounts_***
Все таблицы, которые начинаются на accounts_ имеют в себе ключ - который отвечает за логин пользователя (который хранится в таблица accoutns).
Мы можем спроектировать таблицы так, что при удалении или изминении записи в таблице accounts - записи в других таблицах, которые ссылаются на таблицу accouns - будут изменены автоматически.

Для реализации этого используется FOREIGN KEY
Например:
PHP код:
CREATE TABLE IF NOT EXISTS `account_log` (
  `
timeint(11NOT NULL,
  `
loginvarchar(32NOT NULL,
  `
ipvarchar(15NOT 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: Еще парочка скринов


Последний раз редактировалось ALF.; 19.08.2013 в 21:07. Причина: Добавлено сообщение
ALF. вне форума Отправить сообщение для ALF. с помощью ICQ Отправить сообщение для ALF. с помощью Skype™ Ответить с цитированием
Сказали спасибо: