79 lines
2.6 KiB
SQL
79 lines
2.6 KiB
SQL
-- Create constructeurs table
|
|
CREATE TABLE "constructeurs" (
|
|
"id" TEXT PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"email" TEXT,
|
|
"phone" TEXT,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE UNIQUE INDEX "constructeurs_name_unique_idx" ON "constructeurs"(LOWER("name"));
|
|
|
|
-- Add foreign key columns to machines, composants, pieces
|
|
ALTER TABLE "machines" ADD COLUMN "constructeurId" TEXT;
|
|
ALTER TABLE "composants" ADD COLUMN "constructeurId" TEXT;
|
|
ALTER TABLE "pieces" ADD COLUMN "constructeurId" TEXT;
|
|
|
|
-- Populate constructeurs from existing data
|
|
WITH existing_names AS (
|
|
SELECT DISTINCT TRIM(constructeur) AS name FROM "machines" WHERE constructeur IS NOT NULL AND TRIM(constructeur) <> ''
|
|
UNION
|
|
SELECT DISTINCT TRIM(constructeur) FROM "composants" WHERE constructeur IS NOT NULL AND TRIM(constructeur) <> ''
|
|
UNION
|
|
SELECT DISTINCT TRIM(constructeur) FROM "pieces" WHERE constructeur IS NOT NULL AND TRIM(constructeur) <> ''
|
|
),
|
|
prepared AS (
|
|
SELECT DISTINCT ON (LOWER(name)) name
|
|
FROM existing_names
|
|
WHERE name IS NOT NULL AND name <> ''
|
|
ORDER BY LOWER(name), name
|
|
)
|
|
INSERT INTO "constructeurs" ("id", "name")
|
|
SELECT substr(md5(random()::text || clock_timestamp()::text), 1, 25), name
|
|
FROM prepared
|
|
ON CONFLICT (LOWER("name")) DO NOTHING;
|
|
|
|
-- Link existing records to constructeurs
|
|
UPDATE "machines" m
|
|
SET "constructeurId" = c.id
|
|
FROM "constructeurs" c
|
|
WHERE m.constructeur IS NOT NULL
|
|
AND TRIM(m.constructeur) <> ''
|
|
AND LOWER(c.name) = LOWER(TRIM(m.constructeur));
|
|
|
|
UPDATE "composants" co
|
|
SET "constructeurId" = c.id
|
|
FROM "constructeurs" c
|
|
WHERE co.constructeur IS NOT NULL
|
|
AND TRIM(co.constructeur) <> ''
|
|
AND LOWER(c.name) = LOWER(TRIM(co.constructeur));
|
|
|
|
UPDATE "pieces" p
|
|
SET "constructeurId" = c.id
|
|
FROM "constructeurs" c
|
|
WHERE p.constructeur IS NOT NULL
|
|
AND TRIM(p.constructeur) <> ''
|
|
AND LOWER(c.name) = LOWER(TRIM(p.constructeur));
|
|
|
|
-- Drop legacy constructeur columns
|
|
ALTER TABLE "machines" DROP COLUMN "constructeur";
|
|
ALTER TABLE "composants" DROP COLUMN "constructeur";
|
|
ALTER TABLE "pieces" DROP COLUMN "constructeur";
|
|
|
|
-- Add foreign key constraints
|
|
ALTER TABLE "machines"
|
|
ADD CONSTRAINT "machines_constructeurId_fkey"
|
|
FOREIGN KEY ("constructeurId") REFERENCES "constructeurs"("id")
|
|
ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
ALTER TABLE "composants"
|
|
ADD CONSTRAINT "composants_constructeurId_fkey"
|
|
FOREIGN KEY ("constructeurId") REFERENCES "constructeurs"("id")
|
|
ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
ALTER TABLE "pieces"
|
|
ADD CONSTRAINT "pieces_constructeurId_fkey"
|
|
FOREIGN KEY ("constructeurId") REFERENCES "constructeurs"("id")
|
|
ON DELETE SET NULL ON UPDATE CASCADE;
|