Executando verificação de segurança...
1

Não entendi muito bem seu objetivo.
Pq eu precisaria de recriar a FK de um banco que já existe?
Ou ainda se eu já tenho um código construído com code first pq iria alterar a estrutura das tabelas exceto por mudança de regra de negócio?
Verificou se não é problema na geração de código do ORM?

Mas voltando a sua dúvida aqui na empresa onde trabalho as tabelas tem PK como Id e FK como _Id.
Trabalho com csharp porém quando utilizava typescript as FK eram tipadas com o tipo do ID da PK, assim qualquer mudança na PK estoura erro na fase de transpilação.
Segue exemplo:

type User = {
    Id: string;
    FirstName: string;
    scope: Role;
}
type Role = 'Admin' | 'Customer' | 'Manager';
type Adress = {
   CustomerId = User['Id'];
   Value = string;
}

Simplifiquei os campos mas veja que ao tipar CustomerId eu forço um acoplamento. Se Id for eliminado de User vai estourar erro em toda aplicação.

Fora que o meu domínio não precisa de ser exatamente o que está no banco, posso incluir uma camada para fazer o de/para.

Carregando publicação patrocinada...
1

Não é recriar a FKs e sim cria-las, no primeiro exemplo do script sql ele não tem relacionamento entre si pq precisa ser declarado, no segundo ALTER TABLE... é o retorno do script com o relacionamento das tabelas depois de lido as tabelas e feito o mapeamento e assim criando o relaciomanento entre elas.
nesse exemplo pra tabela User ter o relaciomaneto com User_Email ela precisaria ser declarada assim:

CREATE TABLE IF NOT EXISTS `Test_App`.`User` (
    `Id_User` INT NOT NULL AUTO_INCREMENT,
    `Id_User_Email` INT NOT NULL,
    PRIMARY KEY (`Id_User`),
    -- criando relaciomaneto com a user_email
    CONSTRAINT `fk_user_email` FOREIGN KEY (`Id_User_Email`) 
    REFERENCES `Test_App`.`User_Email` (`Id_User_Email`)
);

adicionado a CONSTRAINT na tabela, e isso que meu script faz, ele cria as CONSTRAINT, evitando essa duas linhas ser declarada nas tabelas

No orm ainda preciso declarar as FKs, exemplo:

ORM PrismaJS

model User {
  id_user       Int        @id @default(autoincrement()) @map("Id_User")
  id_user_email Int        @map("Id_User_Email")
  user_email    User_Email @relation(fields: [id_user_email], references: [id_user_email])

  @@map("User")
}

no ORM ainda teria que declara essa linha user_email User_Email... pra criar o relaciomaneto entre elas no BD

e meu script não atenderia pessoas que criar as tabelas diretamente por algum ORM, somente pessoas que lida com script sql