Enforce natural key uniqueness by adding unique constraints to Bundesland, Platz, Altersklasse, and Land tables.
This commit is contained in:
parent
74df3514ae
commit
9ec8535ff7
|
|
@ -0,0 +1,46 @@
|
|||
-- Enforce natural key uniqueness for master-data upserts
|
||||
|
||||
-- Bundesland: unique (land_id, kuerzel) for non-null kuerzel values
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_indexes WHERE schemaname = 'public' AND indexname = 'ux_bundesland_land_kuerzel'
|
||||
) THEN
|
||||
CREATE UNIQUE INDEX ux_bundesland_land_kuerzel
|
||||
ON bundesland(land_id, kuerzel)
|
||||
WHERE kuerzel IS NOT NULL;
|
||||
END IF;
|
||||
END$$;
|
||||
|
||||
-- Platz: unique (turnier_id, name)
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_indexes WHERE schemaname = 'public' AND indexname = 'ux_platz_turnier_name'
|
||||
) THEN
|
||||
CREATE UNIQUE INDEX ux_platz_turnier_name
|
||||
ON platz(turnier_id, name);
|
||||
END IF;
|
||||
END$$;
|
||||
|
||||
-- Altersklasse: unique (altersklasse_code) – ensure index exists
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_indexes WHERE schemaname = 'public' AND indexname = 'altersklasse_altersklasse_code_unique'
|
||||
) THEN
|
||||
CREATE UNIQUE INDEX altersklasse_altersklasse_code_unique
|
||||
ON altersklasse(altersklasse_code);
|
||||
END IF;
|
||||
END$$;
|
||||
|
||||
-- Land: unique (iso_alpha3_code) – ensure index exists
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_indexes WHERE schemaname = 'public' AND indexname = 'land_iso_alpha3_code_unique'
|
||||
) THEN
|
||||
CREATE UNIQUE INDEX land_iso_alpha3_code_unique
|
||||
ON land(iso_alpha3_code);
|
||||
END IF;
|
||||
END$$;
|
||||
|
|
@ -27,5 +27,8 @@ object BundeslandTable : Table("bundesland") {
|
|||
init {
|
||||
uniqueIndex("idx_bundesland_oeps", oepsCode, landId)
|
||||
uniqueIndex("idx_bundesland_iso", iso3166_2_Code)
|
||||
// Natürlicher Schlüssel gem. Architektur: (land_id + kuerzel) eindeutig
|
||||
// Hinweis: kuerzel kann NULL sein – der Unique-Index greift dann nur für nicht-null Werte pro Land.
|
||||
uniqueIndex("ux_bundesland_land_kuerzel", landId, kuerzel)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,5 +25,7 @@ object PlatzTable : Table("platz") {
|
|||
|
||||
init {
|
||||
index("idx_platz_turnier", isUnique = false, turnierId)
|
||||
// Natürlicher Schlüssel gem. Architektur: (turnier_id + name) eindeutig
|
||||
uniqueIndex("ux_platz_turnier_name", turnierId, name)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user