2015-11-22 2 views
-1

Я строю новый веб-сайт, который будет хранить IP-адреса в нескольких таблицах, как пользователей, login_history, платежи и многое другое.Должен ли я хранить IP-адреса пользователей в отдельной таблице?

Мне интересно, должен ли я добавить столбец ip в каждой таблице и сохранить фактический IP-адрес, или я должен создать отдельную таблицу с именем ip_addresses и сохранить идентификатор ip в столбцах.

Метод 1:

users: 
username | ip 
jon_snow | 134744072 

Метод 2:

users: 
username | ip 
jon_snow | 1 
-- 
ip_addresses: 
id | ip 
1 | 134744072 

ответ

1

Так как IP-адрес будет меняться для большинства пользователей с течением времени, самое лучшее место, чтобы хранить их, возможно, в login_history таблицы. Таким образом вы можете связать IP-адреса с пользователями и их сеансами.

Конечно, если вы хотите ограничить доступ пользователей по IP-адресу, и вы хотите, чтобы ваши пользователи использовали один и тот же IP за время, сохраните его в таблице пользователей.

1

IPv4-адреса имеют целенаправленно отформатированные 32-битные целые числа. IPv6 имеют смысл форматировать снова, но намного больше. В любом случае, вы создадите отображение плотных данных 1: 1. Если вам не нужно делать это по другим причинам, я бы не стал нормализовать их в другую таблицу. Вы вряд ли сможете получить скорость или сэкономить место, если у ваших пользователей нет очень ограниченного набора IP-адресов.

Используемый inet (6) _aton будет упаковывать строковые представления, а версия _ntoa будет распаковывать их эффективно, поэтому вы можете использовать значащие строки и хранить эффективные двоичные версии.