我正在构建一个新网站,将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
答案 0 :(得分:1)
由于IP地址会随着时间的推移而发生变化,因此存储它们的最佳位置可能在login_history表中。这样,您就可以将IP地址与用户及其会话相关联。
当然,如果您想根据IP地址限制用户访问,并且您要求用户随时使用相同的IP,请将其存储在users表中。
答案 1 :(得分:1)
IPv4地址是有意义的32位整数格式。 IPv6的格式再次有意义,但要大得多。无论哪种方式,您都要创建密集数据的1:1映射。除非你出于其他原因需要这样做,否则我通常不会选择将它们标准化为另一个表。除非您的用户拥有非常有限的IP集,否则您不太可能获得速度或节省空间。
inet(6)_aton的使用将打包字符串表示,_ntoa版本将有效地解压缩它们,因此您可以使用有意义的字符串并存储有效的二进制版本。