Eerste commit

This commit is contained in:
jf
2026-09-27 14:21:31 +00:00
commit de4ff128cb
295 changed files with 47374 additions and 0 deletions
+54
View File
@@ -0,0 +1,54 @@
-- MijnBesluit - profielen samenvoegen
--
-- Twee mensen kunnen allebei een profiel aanmaken voor dezelfde persoon. Jij voegt je dochter
-- toe, je ex-partner doet dat ook: twee rijen in `persons`, allebei een eerlijke aantekening
-- van degene die hem maakte. Dat is geen fout, zolang niemand het profiel heeft geclaimd.
--
-- Zodra zij beide uitnodigingen aanneemt, zegt zij zelf dat het om haar gaat. Dan gaat het ene
-- profiel op in het andere. Het duplicaat blijft staan - er hangt geschiedenis aan, en een
-- verwijderde rij is niet terug te halen - maar wijst voortaan naar waar hij in is opgegaan:
--
-- merged_into_person_id : het profiel waarin deze is opgegaan. Leeg = gewoon in gebruik.
--
-- Alles wat naar het duplicaat verwees is op dat moment verhuisd: lidmaatschappen, berichten,
-- foto's, uitnodigingen en rollen in een nalatenschap.
--
-- Draaien met:
-- mysql -u root -p mijnbesluit < db\09_samenvoegen.sql
--
-- Opnieuw draaien mag: er gebeurt dan niets.
USE `mijnbesluit`;
-- ---------------------------------------------------------------- merged_into_person_id
SET @bestaat := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'persons' AND COLUMN_NAME = 'merged_into_person_id');
SET @sql := IF(@bestaat = 0,
'ALTER TABLE `persons` ADD COLUMN `merged_into_person_id` BIGINT NULL',
'SELECT "merged_into_person_id bestaat al" AS melding');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------------------------------------------------------------- index
-- Elke lijst met mensen filtert hierop, dus hij wordt vaak gelezen.
SET @bestaat := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'persons' AND INDEX_NAME = 'ix_persons_merged');
SET @sql := IF(@bestaat = 0,
'CREATE INDEX `ix_persons_merged` ON `persons` (`merged_into_person_id`)',
'SELECT "ix_persons_merged bestaat al" AS melding');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------------------------------------------------------------- verwijzing naar zichzelf
SET @bestaat := (
SELECT COUNT(*) FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'persons' AND CONSTRAINT_NAME = 'fk_persons_merged');
SET @sql := IF(@bestaat = 0,
'ALTER TABLE `persons` ADD CONSTRAINT `fk_persons_merged` FOREIGN KEY (`merged_into_person_id`) REFERENCES `persons` (`id`) ON DELETE SET NULL',
'SELECT "fk_persons_merged bestaat al" AS melding');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SELECT 'Klaar. Profielen kunnen vanaf nu worden samengevoegd.' AS melding;