-- +goose Up -- +goose StatementBegin -- Reusable, NON-STAFF person master (distinct from contacts). Lets an "other person" be -- reused across takeovers without re-entering their data. CREATE TABLE IF NOT EXISTS other_people ( id BINARY(16) NOT NULL, name VARCHAR(191) NOT NULL DEFAULT '', mobile_phone VARCHAR(64) NOT NULL DEFAULT '', email VARCHAR(191) NOT NULL DEFAULT '', created_at DATETIME(3) NULL, created_by BINARY(16) NULL, updated_at DATETIME(3) NULL, updated_by BINARY(16) NULL, deleted_at DATETIME(3) NULL, deleted_by BINARY(16) NULL, PRIMARY KEY (id), UNIQUE KEY uk_other_people_identity (name, mobile_phone, email), KEY idx_other_people_deleted_at (deleted_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- takeover_other_people becomes a pivot + snapshot: reference the master, keep the snapshot. ALTER TABLE takeover_other_people ADD COLUMN other_person_id BINARY(16) NULL AFTER takeover_id, ADD KEY idx_takeover_other_people_other_person_id (other_person_id); -- +goose StatementEnd -- +goose Down -- +goose StatementBegin ALTER TABLE takeover_other_people DROP KEY idx_takeover_other_people_other_person_id, DROP COLUMN other_person_id; DROP TABLE IF EXISTS other_people; -- +goose StatementEnd