Bonsoir,
Curieux intellectuellement, j'ai essayé un truc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
--
-- Fichier généré par SQLiteStudio v3.2.1 sur sam. mars 23 19:15:05 2019
--
-- Encodage texte utilisé : System
--
PRAGMA foreign_keys = off;
BEGIN TRANSACTION;
 
-- Table : CLIENT
CREATE TABLE CLIENT (ID INTEGER PRIMARY KEY AUTOINCREMENT, NOM TEXT (30), IDVILLE BIGINT, TEMPCDP TEXT, TEMPVILLE TEXT, 
FOREIGN KEY (IDVILLE) REFERENCES VILLES (ID) DEFERRABLE INITIALLY DEFERRED);
-- Table : VILLES
CREATE TABLE VILLES (ID INTEGER PRIMARY KEY AUTOINCREMENT, CDP TEXT (5), VILLE TEXT (30) CONSTRAINT VILLE UNIQUE ON CONFLICT IGNORE NOT NULL);
 
-- Déclencheur : NEWCLIENT
CREATE TRIGGER NEWCLIENT AFTER INSERT ON CLIENT WHEN NEW.IDVILLE IS NULL BEGIN INSERT OR IGNORE INTO VILLES (CDP, VILLE) VALUES (NEW.TEMPCDP, NEW.TEMPVILLE); UPDATE CLIENT SET IDVILLE = (SELECT ID FROM VILLES WHERE CDP = NEW.TEMPCDP AND VILLE = NEW.TEMPVILLE) WHERE ID = NEW.ID; END;
 
-- Déclencheur : UPDATECLIENT
CREATE TRIGGER UPDATECLIENT AFTER UPDATE ON CLIENT WHEN NEW.TEMPCDP IS NOT NULL OR NEW.TEMPVILLE IS NOT NULL BEGIN UPDATE CLIENT SET TEMPCDP = NULL, TEMPVILLE = NULL WHERE ID = NEW.ID; END;
 
COMMIT TRANSACTION;
PRAGMA foreign_keys = on;
NB. Je ne suis pas sûr pour la partie clé étrangère

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
INSERT INTO CLIENT (ID, NOM, IDVILLE, TEMPCDP, TEMPVILLE) VALUES (NULL, 'TOTO',NULL, '44115','HG');
INSERT INTO CLIENT (ID, NOM, IDVILLE, TEMPCDP, TEMPVILLE) VALUES (NULL, 'QINQUIN',NULL,'51','CHTI');
INSERT INTO CLIENT (ID, NOM, IDVILLE, TEMPCDP, TEMPVILLE) VALUES (NULL, 'TITI', NULL,'75','PARIS');
Me donne bien le souhaité
CLIENT
1 TOTO 1
2 QUINQUIN 2
3 TITI 3
VILLES
1 44115 HG
2 51 CHTI
3 75 PARIS
Cela dit je n'ai pas fait tous les tests possibles