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
+46
View File
@@ -0,0 +1,46 @@
-- MijnBesluit - twee mensen mogen dezelfde persoon kennen
--
-- Op `persons.email` stond een UNIQUE-index. Dat botste met het uitgangspunt van
-- docs/Identiteit.md: iedereen heeft zijn EIGEN aantekening over een ander, en die aantekeningen
-- worden pas één zodra de persoon zelf beide uitnodigingen aanneemt.
--
-- Wat er misging: voegde je iemand toe met een e-mailadres dat al ergens in de database stond -
-- bij wie dan ook, ook bij een wildvreemde - dan liep het opslaan stuk op die index. Voor de
-- gebruiker was dat een knop die niets deed. En het gevolg was erger dan een foutmelding: wie
-- het adres van iemand het eerst invulde, bepaalde daarmee dat niemand anders die persoon nog
-- kon toevoegen. In een applicatie waarin twee ouders allebei hun dochter toevoegen is dat
-- precies de verkeerde kant om.
--
-- Uniek blijft het wél bij `users.email`: één account per e-mailadres. Dat is iets anders dan
-- een aantekening over iemand, en dat moet uniek blijven, anders weet niemand wie er inlogt.
--
-- De index zelf blijft staan, alleen niet meer uniek: er wordt op adres gezocht.
--
-- Draaien met:
-- mysql -u root -p mijnbesluit < db\15_adres_niet_uniek.sql
--
-- Opnieuw draaien mag: er gebeurt dan niets.
USE `mijnbesluit`;
SET @uniek := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'persons'
AND INDEX_NAME = 'ux_persons_email');
SET @sql := IF(@uniek > 0,
'ALTER TABLE `persons` DROP INDEX `ux_persons_email`',
'SELECT "ux_persons_email bestaat niet (meer)" AS melding');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @gewoon := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'persons'
AND INDEX_NAME = 'ix_persons_email');
SET @sql := IF(@gewoon = 0,
'ALTER TABLE `persons` ADD INDEX `ix_persons_email` (`email`)',
'SELECT "ix_persons_email bestaat al" AS melding');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SELECT 'Klaar.' AS melding;