Eerste commit
This commit is contained in:
@@ -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;
|
||||
Reference in New Issue
Block a user