Enforce natural key uniqueness by adding unique constraints to Bundesland, Platz, Altersklasse, and Land tables.
This commit is contained in:
+46
@@ -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$$;
|
||||||
+3
@@ -27,5 +27,8 @@ object BundeslandTable : Table("bundesland") {
|
|||||||
init {
|
init {
|
||||||
uniqueIndex("idx_bundesland_oeps", oepsCode, landId)
|
uniqueIndex("idx_bundesland_oeps", oepsCode, landId)
|
||||||
uniqueIndex("idx_bundesland_iso", iso3166_2_Code)
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -25,5 +25,7 @@ object PlatzTable : Table("platz") {
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
index("idx_platz_turnier", isUnique = false, turnierId)
|
index("idx_platz_turnier", isUnique = false, turnierId)
|
||||||
|
// Natürlicher Schlüssel gem. Architektur: (turnier_id + name) eindeutig
|
||||||
|
uniqueIndex("ux_platz_turnier_name", turnierId, name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user