diff --git a/db/docs/project_relation_export_uploads.yml b/db/docs/project_relation_export_uploads.yml
index a184583a2620ee40ccef8ba41a5c90788120affd..59956d482e612098f92842da2d09eb0350f6145b 100644
--- a/db/docs/project_relation_export_uploads.yml
+++ b/db/docs/project_relation_export_uploads.yml
@@ -17,5 +17,4 @@ desired_sharding_key:
         table: project_relation_exports
         sharding_key: project_id
         belongs_to: relation_export
-    awaiting_backfill_on_parent: true
 table_size: small
diff --git a/db/docs/project_relation_exports.yml b/db/docs/project_relation_exports.yml
index aa4277af68aefe5d30a56cf5687504822d7c1db2..b94ceab100975e5ca257f94b3018ea665b85ee52 100644
--- a/db/docs/project_relation_exports.yml
+++ b/db/docs/project_relation_exports.yml
@@ -8,14 +8,6 @@ description: Used to track the generation of relation export files for projects
 introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/90624
 milestone: '15.2'
 gitlab_schema: gitlab_main_cell
-desired_sharding_key:
-  project_id:
-    references: projects
-    backfill_via:
-      parent:
-        foreign_key: project_export_job_id
-        table: project_export_jobs
-        sharding_key: project_id
-        belongs_to: project_export_job
-desired_sharding_key_migration_job_name: BackfillProjectRelationExportsProjectId
 table_size: small
+sharding_key:
+  project_id: projects
diff --git a/db/post_migrate/20250210065256_validate_project_relation_exports_project_id_not_null_constraint.rb b/db/post_migrate/20250210065256_validate_project_relation_exports_project_id_not_null_constraint.rb
new file mode 100644
index 0000000000000000000000000000000000000000..dbb34e255b7ad798013d9ece455dcfd66b188847
--- /dev/null
+++ b/db/post_migrate/20250210065256_validate_project_relation_exports_project_id_not_null_constraint.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class ValidateProjectRelationExportsProjectIdNotNullConstraint < Gitlab::Database::Migration[2.2]
+  milestone '17.10'
+
+  def up
+    validate_not_null_constraint :project_relation_exports, :project_id
+  end
+
+  def down
+    # no-op
+  end
+end
diff --git a/db/schema_migrations/20250210065256 b/db/schema_migrations/20250210065256
new file mode 100644
index 0000000000000000000000000000000000000000..933fe853235f78a0343a98a1491d46e404d3d0dd
--- /dev/null
+++ b/db/schema_migrations/20250210065256
@@ -0,0 +1 @@
+9f0cfe2f27bf8bf3e0e8000df91230a893118064fd115077e7722c680a5ae7e2
\ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 294c8afc0cfd93599a05f9b1a7fb783bc68a45f7..3dbf7639109b0ea5946e34ad01e7fb119c8fb4bb 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -19797,7 +19797,8 @@ CREATE TABLE project_relation_exports (
     project_id bigint,
     CONSTRAINT check_15e644d856 CHECK ((char_length(jid) <= 255)),
     CONSTRAINT check_4b5880b795 CHECK ((char_length(relation) <= 255)),
-    CONSTRAINT check_dbd1cf73d0 CHECK ((char_length(export_error) <= 300))
+    CONSTRAINT check_dbd1cf73d0 CHECK ((char_length(export_error) <= 300)),
+    CONSTRAINT check_f461e3537f CHECK ((project_id IS NOT NULL))
 );
 
 CREATE SEQUENCE project_relation_exports_id_seq
@@ -27251,9 +27252,6 @@ ALTER TABLE sprints
 ALTER TABLE web_hook_logs
     ADD CONSTRAINT check_df72cb58f5 CHECK ((char_length(url_hash) <= 44)) NOT VALID;
 
-ALTER TABLE project_relation_exports
-    ADD CONSTRAINT check_f461e3537f CHECK ((project_id IS NOT NULL)) NOT VALID;
-
 ALTER TABLE merge_request_blocks
     ADD CONSTRAINT check_f8034ca45e CHECK ((project_id IS NOT NULL)) NOT VALID;