-- MijnBesluit - kluissoorten uit de database in plaats van uit de code -- -- Tot nu toe stond de lijst "Wachtwoord, Polis, Uitvaartwens, ..." vast in de code, met per soort -- een eigen invulscherm. Elke nieuwe soort (denk aan "Dementie" of "Niet reanimeren") vroeg dus -- een nieuwe versie van de app in de Play Store en de App Store. Nu staan de soorten hier, en de -- velden van een nieuwe soort ook: de beheerder onderhoudt ze op de website (/beheer/soorten) en -- de app tekent het formulier naar wat de server beschrijft. -- -- vault_categories de soorten. De elf ingebouwde en "Overig" (nummer 99) krijgen hier -- hun startrij; nieuwe soorten beginnen bij nummer 100. -- vault_category_fields de velden van een nieuwe soort. Ingebouwde soorten hebben hier geen -- rijen: hun invulscherm zit nog in de app zelf. -- -- Regels die de server afdwingt (niet de database): -- * Een soort waar kluisitems mee zijn gemaakt kan niet worden verwijderd, alleen op niet-actief -- gezet. Niet-actief verdwijnt uit de keuzelijst van wie er nog nooit een item mee maakte; -- wie dat wel deed, blijft de soort zien. -- * Nieuwe items kunnen alleen in een actieve soort, of in een soort waar de eigenaar al een -- item van heeft. -- -- vault_items.category blijft een gewoon getal; er komt bewust geen foreign key bij, zodat -- bestaande gegevens en oudere apps niet in de weg zitten. -- -- Draaien met: -- mysql -u root -p mijnbesluit < db\21_kluissoorten.sql -- -- Opnieuw draaien mag: er gebeurt dan niets. -- -- Na dit script, eenmalig als root: -- mysql -u root -p < db\02_applicatiegebruiker.sql (rechten op de nieuwe tabellen) -- mysql -u root -p mijnbesluit < db\handmatig\21b_kluissoorten_startrijen.sql (de startrijen) USE `mijnbesluit`; -- ---------------------------------------------------------------- vault_categories CREATE TABLE IF NOT EXISTS `vault_categories` ( `id` INT NOT NULL AUTO_INCREMENT, `naam` VARCHAR(80) NOT NULL, `uitleg` VARCHAR(500) NULL, -- verschijnt onder de keuzelijst in de app `actief` TINYINT(1) NOT NULL DEFAULT 1, `volgorde` INT NOT NULL DEFAULT 1000, `bespreken_met` TINYINT(1) NOT NULL DEFAULT 0, -- mag de eigenaar een beheerder kiezen om vooraf mee te bespreken? `ingebouwd` TINYINT(1) NOT NULL DEFAULT 0, -- 1 = invulscherm zit in de app; velden hier niet te wijzigen `aangemaakt_op` DATETIME(3) NOT NULL, `gewijzigd_op` DATETIME(3) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `ux_vault_categories_naam` (`naam`) ) ENGINE=InnoDB AUTO_INCREMENT=100; -- ---------------------------------------------------------------- vault_category_fields CREATE TABLE IF NOT EXISTS `vault_category_fields` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `category_id` INT NOT NULL, `sleutel` VARCHAR(40) NOT NULL, -- vaste naam in de versleutelde inhoud; wijzigt nooit `label` VARCHAR(100) NOT NULL, `soort` VARCHAR(10) NOT NULL DEFAULT 'tekst', -- tekst | lang | datum | keuze | uitleg `opties` VARCHAR(1000) NULL, -- bij 'keuze': één optie per regel `hulptekst` VARCHAR(300) NULL, `verplicht` TINYINT(1) NOT NULL DEFAULT 0, `actief` TINYINT(1) NOT NULL DEFAULT 1, `volgorde` INT NOT NULL DEFAULT 1000, PRIMARY KEY (`id`), UNIQUE KEY `ux_vault_category_fields_sleutel` (`category_id`, `sleutel`), CONSTRAINT `fk_vcf_category` FOREIGN KEY (`category_id`) REFERENCES `vault_categories` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB; -- ---------------------------------------------------------------- startrijen -- De startrijen (de elf ingebouwde soorten en Overig) staan NIET hier maar in -- handmatig\21b_kluissoorten_startrijen.sql. -- -- Waarom: dit script wordt ook door de uitrolagent gedraaid, met een beperkt databaseaccount dat -- tabellen mag maken maar er geen gegevens in mag zetten. Een INSERT hier laat de hele uitrol -- struikelen (ERROR 1142: INSERT command denied). Gegevens neerzetten is inrichten, en dat doet een -- mens één keer als root, net als de rechten in 02_applicatiegebruiker.sql. SELECT 'Klaar. De tabellen voor kluissoorten staan klaar. Vergeet handmatig\\21b_kluissoorten_startrijen.sql en 02_applicatiegebruiker.sql niet (als root).' AS melding;