我应该将用户IP地址存储在单独的表中吗?

时间:2015-11-22 11:48:43

标签: mysql sql

我正在构建一个新网站,将IP地址存储在多个表中,例如用户 login_history 付款等等。

我想知道是否应该在每个表中添加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

2 个答案:

答案 0 :(得分:1)

由于IP地址会随着时间的推移而发生变化,因此存储它们的最佳位置可能在login_history表中。这样,您就可以将IP地址与用户及其会话相关联。

当然,如果您想根据IP地址限制用户访问,并且您要求用户随时使用相同的IP,请将其存储在users表中。

答案 1 :(得分:1)

IPv4地址是有意义的32位整数格式。 IPv6的格式再次有意义,但要大得多。无论哪种方式,您都要创建密集数据的1:1映射。除非你出于其他原因需要这样做,否则我通常不会选择将它们标准化为另一个表。除非您的用户拥有非常有限的IP集,否则您不太可能获得速度或节省空间。

inet(6)_aton的使用将打包字符串表示,_ntoa版本将有效地解压缩它们,因此您可以使用有意义的字符串并存储有效的二进制版本。