'asset_id', 'service_certificates' => 'certificate_id', 'service_contacts' => 'contact_id', 'service_credentials' => 'credential_id', 'service_documents' => 'document_id', 'service_domains' => 'domain_id', 'service_vendors' => 'vendor_id', ]; foreach ($service_link_tables as $table => $column) { mysqli_query($mysqli, "CREATE TEMPORARY TABLE `{$table}_once` SELECT DISTINCT `service_id`, `$column` FROM `$table`"); mysqli_query($mysqli, "DELETE FROM `$table`"); mysqli_query($mysqli, "INSERT INTO `$table` (`service_id`, `$column`) SELECT `service_id`, `$column` FROM `{$table}_once`"); mysqli_query($mysqli, "DROP TEMPORARY TABLE `{$table}_once`"); mysqli_query($mysqli, "ALTER TABLE `$table` ADD PRIMARY KEY (`service_id`, `$column`)"); } mysqli_query($mysqli, "ALTER TABLE `service_domains` ADD CONSTRAINT `service_domains_ibfk_1` FOREIGN KEY (`service_id`) REFERENCES `services` (`service_id`) ON DELETE CASCADE"); mysqli_query($mysqli, "ALTER TABLE `service_domains` ADD CONSTRAINT `service_domains_ibfk_2` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`domain_id`) ON DELETE CASCADE"); // Tickets raised about a service - an outage, a change - whether or not they name one of its assets mysqli_query($mysqli, "CREATE TABLE IF NOT EXISTS `service_tickets` ( `service_id` int(11) NOT NULL, `ticket_id` int(11) NOT NULL, PRIMARY KEY (`service_id`, `ticket_id`), KEY `ticket_id` (`ticket_id`), CONSTRAINT `service_tickets_ibfk_1` FOREIGN KEY (`service_id`) REFERENCES `services` (`service_id`) ON DELETE CASCADE, CONSTRAINT `service_tickets_ibfk_2` FOREIGN KEY (`ticket_id`) REFERENCES `tickets` (`ticket_id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci"); // The review date was there all along but nothing used it - the lists filter and sort by it now mysqli_query($mysqli, "ALTER TABLE `services` ADD INDEX `service_review_due` (`service_review_due`)");