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.
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