Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Имеет ли смысл хранить даты в отдельной таблице? (https://javascript.ru/forum/server/40660-imeet-li-smysl-khranit-daty-v-otdelnojj-tablice.html)

frutality 14.08.2013 17:52

Имеет ли смысл хранить даты в отдельной таблице?
 
Доброго всем времени суток!

Сейчас раздумываю над архитектурой нового приложения. Реляционная БД. В БД несколько сущностей: пользователи, посты, комментарии и т.д.

У каждой записи имеется поле "Дата добавления [в базу]". Также предполагается хранить даты входов на сайт, даты смены пароля, смены личной информации. Даты изменения постов и комментариев.

Первая мысль по датам была какая: в каждой таблице есть поле для даты. Там и хранить. Но вторая мысль (когда подумал про даты изменения, даты входов) - вынести все в отдельную таблицу. Логи. В таблице несколько полей:

действие (добавил, изменил, вошел на сайт, сменил пароль)
id юзера
IP-адрес
тип сущности (пост, комментарий)
id записи (поста, комментария)
дата действия

Имеет ли это смысл? Какие подводные камни?

bes 14.08.2013 23:34

почему нет, ты художник, как удобнее, так и твори, лишь бы нормализация работала
действие и тип сущности (в твоей терминологии) сделать внешними ключами

frutality 15.08.2013 07:08

Благодарю за ответ.

mta88 15.08.2013 09:00

хранить настоящие логи в базе данных?
можно конечно, но не принято
hungred.com/useful-information/best-way-log-details-database-or-file-log/
stackoverflow.com/questions/1160720/log-to-database-instead-of-log-files
programmers.stackexchange.com/questions/92186/why-is-filesystem-preferred-for-logs-instead-of-rdbms

Цитата:

даты изменения, даты входов
последние даты храните в таблице (если они вообще нужны), все остальные будут в логах

frutality 15.08.2013 09:40

mta88,
Как сказать, настоящие или нет. Что вы имеете в виду?

Спасибо за ссылки, прочел с удовольствием (в том числе комментарии). Насколько я понял, люди предпочитают хранить логи в файлах, на случай, если что-то случится с БД, или вообще с сервером; чтобы иметь возможность узнать, что произошло.

Ошибки, warning'и, exception'ы - все это я не планирую хранить в БД. Все это логгируется фреймворком в файлы.

Я планирую хранить в базе используемую мной информацию. Например, я захочу показать пользователю (или администратору) последние пять входов в систему, а не один. Из БД взять их проще, чем из файла. А если файлов логов несколько? (а их точно будет несколько, чтобы файл не раздулся до гигабайтов).

А если мне нужны логи транзакций некой внутренней валюты сайта между пользователями? Я считаю, что такие вещи следует хранить в БД. Я пока не увидел причины, по которой стоит хранить эти данные в файлах.

mta88 15.08.2013 10:02

то что вы описали пожалуй действительно удобней хранить в обычной базе данных
как вам удобнее
есть еще нереляционные базы, но я о них ничего не знаю, даже не запускал ни одной

frutality 15.08.2013 10:33

Спасибо за ответ.

Убедился окончательно, что особых подводных камней нет.

Про нереляционные базы я слышал только одно: все данные хранятся парами "ключ-значение", но тоже особо этой темой не интересовался никогда.

bes 15.08.2013 19:39

да, статьи более вопрошающие/рассуждающие нежели отвечающие
и лично мне не пришло бы в голову хранить комменты/посты в базе, а даты их создания/изменения в файле :D


Часовой пояс GMT +3, время: 18:42.