-- ============================================================================ -- MIGRATION: Rimozione Foreign Key da LogAggiornamenti -- Data: 2025-10-31 -- Descrizione: Rimuove il vincolo FK verso AnagraficaMedia per permettere -- eventi sia su prodotti MediaTrack che Gemma -- ============================================================================ -- SQLite non supporta ALTER TABLE DROP CONSTRAINT -- Quindi dobbiamo ricreare la tabella BEGIN TRANSACTION; -- 1. Backup dati esistenti CREATE TABLE LogAggiornamenti_backup AS SELECT * FROM LogAggiornamenti; -- 2. Drop tabella originale DROP TABLE LogAggiornamenti; -- 3. Ricrea tabella SENZA FK verso AnagraficaMedia CREATE TABLE LogAggiornamenti ( id_aggiornamento INTEGER PRIMARY KEY AUTOINCREMENT, id_media_fk TEXT, -- Riferimento a prodotto (MediaTrack o Gemma) id_distributore_fk INTEGER, -- Legacy field (deprecato) id_tipo_evento_fk INTEGER NOT NULL, -- FK verso TipiEvento (manteniamo questo) data_evento TEXT, dettaglio_contesto TEXT, costo_richiesto_ita REAL, costo_richiesto_spa REAL, note TEXT, percorso_file TEXT, buyer_contatto TEXT, budget_produzione REAL, data_reminder TEXT, preferito INTEGER DEFAULT 0, venduto_a TEXT, privato INTEGER DEFAULT 0, created_by INTEGER DEFAULT 1, -- Manteniamo solo FK verso TipiEvento FOREIGN KEY (id_tipo_evento_fk) REFERENCES TipiEvento(id_tipo_evento) -- RIMOSSO: FOREIGN KEY (id_media_fk) REFERENCES AnagraficaMedia(id_media) ); -- 4. Ripristina dati dal backup INSERT INTO LogAggiornamenti SELECT * FROM LogAggiornamenti_backup; -- 5. Verifica conteggio SELECT (SELECT COUNT(*) FROM LogAggiornamenti) as nuova_tabella, (SELECT COUNT(*) FROM LogAggiornamenti_backup) as backup; -- 6. Drop backup (solo se tutto OK) DROP TABLE LogAggiornamenti_backup; -- 7. Crea indici per performance CREATE INDEX IF NOT EXISTS idx_eventi_media ON LogAggiornamenti(id_media_fk, data_evento DESC); CREATE INDEX IF NOT EXISTS idx_eventi_tipo ON LogAggiornamenti(id_tipo_evento_fk, data_evento DESC); CREATE INDEX IF NOT EXISTS idx_eventi_preferiti ON LogAggiornamenti(preferito, created_by) WHERE preferito = 1; CREATE INDEX IF NOT EXISTS idx_eventi_reminder ON LogAggiornamenti(data_reminder, created_by) WHERE data_reminder IS NOT NULL; COMMIT; -- ============================================================================ -- RISULTATO: LogAggiornamenti ora può contenere eventi per: -- - Prodotti MediaTrack (es: FILM-123, SERIES-456) -- - Prodotti Gemma (es: G_60558, G_ABC123) -- - Qualsiasi altro tipo futuro -- -- La validazione che il prodotto esista viene fatta in Python, non in SQL -- ============================================================================