Configuración de múltiples fuentes de datos, bases de datos, esquemas y replicación
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Uso de múltiples fuentes de datos
Para usar múltiples fuentes de datos conectadas a diferentes bases de datos, simplemente crea varias instancias de DataSource:
import { DataSource } from "typeorm"
const db1DataSource = new DataSource({
type: "mysql",
host: "localhost",
port: 3306,
username: "root",
password: "admin",
database: "db1",
entities: [__dirname + "/entities/*{.js,.ts}"],
synchronize: true,
})
const db2DataSource = new DataSource({
type: "mysql",
host: "localhost",
port: 3306,
username: "root",
password: "admin",
database: "db2",
entities: [__dirname + "/entities/*{.js,.ts}"],
synchronize: true,
})
Uso de múltiples bases de datos en una sola fuente de datos
Para utilizar múltiples bases de datos en una sola fuente de datos, puedes especificar el nombre de la base de datos por entidad:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
@Entity({ database: "secondDB" })
export class User {
@PrimaryGeneratedColumn()
id: number
@Column()
firstName: string
@Column()
lastName: string
}
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
@Entity({ database: "thirdDB" })
export class Photo {
@PrimaryGeneratedColumn()
id: number
@Column()
url: string
}
La entidad User se creará dentro de la base de datos secondDB y la entidad Photo dentro de thirdDB.
Todas las demás entidades se crearán en la base de datos predeterminada definida en las opciones de la fuente de datos.
Si deseas seleccionar datos de una base de datos diferente, solo necesitas proporcionar una entidad:
const users = await dataSource
.createQueryBuilder()
.select()
.from(User, "user")
.addFrom(Photo, "photo")
.andWhere("photo.userId = user.id")
.getMany() // userId is not a foreign key since its cross-database request
Este código producirá la siguiente consulta SQL (dependiendo del tipo de base de datos):
SELECT * FROM "secondDB"."user" "user", "thirdDB"."photo" "photo"
WHERE "photo"."userId" = "user"."id"
También puedes especificar una ruta de tabla en lugar de la entidad:
const users = await dataSource
.createQueryBuilder()
.select()
.from("secondDB.user", "user")
.addFrom("thirdDB.photo", "photo")
.andWhere("photo.userId = user.id")
.getMany() // userId is not a foreign key since its cross-database request
Esta característica solo es compatible con bases de datos MySQL y MSSQL.
Uso de múltiples esquemas en una sola fuente de datos
Para usar múltiples esquemas en tus aplicaciones, simplemente establece schema en cada entidad:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
@Entity({ schema: "secondSchema" })
export class User {
@PrimaryGeneratedColumn()
id: number
@Column()
firstName: string
@Column()
lastName: string
}
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
@Entity({ schema: "thirdSchema" })
export class Photo {
@PrimaryGeneratedColumn()
id: number
@Column()
url: string
}
La entidad User se creará dentro del esquema secondSchema y la entidad Photo dentro de thirdSchema.
Todas las demás entidades se crearán en la base de datos predeterminada definida en las opciones de la fuente de datos.
Si deseas seleccionar datos de un esquema diferente, solo necesitas proporcionar una entidad:
const users = await dataSource
.createQueryBuilder()
.select()
.from(User, "user")
.addFrom(Photo, "photo")
.andWhere("photo.userId = user.id")
.getMany() // userId is not a foreign key since its cross-database request
Este código producirá la siguiente consulta SQL (dependiendo del tipo de base de datos):
SELECT * FROM "secondSchema"."question" "question", "thirdSchema"."photo" "photo"
WHERE "photo"."userId" = "user"."id"
También puedes especificar una ruta de tabla en lugar de la entidad:
const users = await dataSource
.createQueryBuilder()
.select()
.from("secondSchema.user", "user") // in mssql you can even specify a database: secondDB.secondSchema.user
.addFrom("thirdSchema.photo", "photo") // in mssql you can even specify a database: thirdDB.thirdSchema.photo
.andWhere("photo.userId = user.id")
.getMany()
Esta característica solo es compatible con bases de datos PostgreSQL y MSSQL. En MSSQL también puedes combinar esquemas y bases de datos, por ejemplo:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
@Entity({ database: "secondDB", schema: "public" })
export class User {
@PrimaryGeneratedColumn()
id: number
@Column()
firstName: string
@Column()
lastName: string
}