Um erro comum em projetos iniciantes é guardar só o valor mais recente de cada métrica, sobrescrevendo o histórico — o que impede qualquer análise de tendência depois.
Modelo mínimo recomendado
CREATE TABLE perfis_monitorados (
id SERIAL PRIMARY KEY,
username VARCHAR(255) UNIQUE NOT NULL,
categoria VARCHAR(100)
);
CREATE TABLE metricas_diarias (
id SERIAL PRIMARY KEY,
perfil_id INTEGER REFERENCES perfis_monitorados(id),
data DATE NOT NULL,
seguidores INTEGER,
seguindo INTEGER,
posts_count INTEGER,
UNIQUE (perfil_id, data)
);
Por que separar perfil de métrica
Separar a entidade "perfil" (que muda pouco) da entidade "métrica diária" (que cresce todo dia) mantém o modelo normalizado e evita repetir dado estático em cada linha de histórico.
Índices que valem a pena
CREATE INDEX idx_metricas_perfil_data ON metricas_diarias (perfil_id, data);
Esse índice acelera consultas de "histórico de um perfil ordenado por data", o tipo de query mais comum em dashboards de acompanhamento.
Para volumes bem maiores, vale considerar as técnicas descritas em data warehousing de métricas sociais.