CREATE TABLE audit_log ( id INT PRIMARY KEY AUTO_INCREMENT, -- "area.action" (e.g., 'calendarEvent.create', 'member.update_rank') action_type VARCHAR(100) NOT NULL, -- The JSON blob containing detailed information payload JSON DEFAULT NULL, -- Identifying the actor created_by INT, -- The ID of the resource being acted upon target_id INT DEFAULT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, CONSTRAINT fk_created_by FOREIGN KEY (created_by) REFERENCES members(id) ON DELETE SET NULL, INDEX idx_action (action_type), INDEX idx_target (target_id) );