В современной веб-разработке работа с базами данных является важной частью создания приложений. TypeORM, популярная библиотека объектно-реляционного сопоставления (ORM) для TypeScript и Node.js, упрощает процесс взаимодействия с базами данных. Одним из распространенных требований при разработке таблиц базы данных является наличие поля идентификатора с автоматическим приращением, которое служит первичным ключом. В этой статье мы рассмотрим различные методы реализации автоматически увеличивающихся идентификаторов в TypeORM, сопровождаемые разговорными пояснениями и примерами кода.
Метод 1: использование декоратора PrimaryGeneratedColumn
Самый простой способ добиться автоматического увеличения идентификаторов в TypeORM — использовать декоратор PrimaryGeneratedColumn
. Этот декоратор автоматически генерирует уникальный идентификатор для каждого нового экземпляра объекта. Вот пример:
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
}
В приведенном выше коде декоратор @PrimaryGeneratedColumn()
расположен над свойством id
объекта User
. TypeORM будет незаметно генерировать и увеличивать идентификаторы.
Метод 2: использование необработанного SQL при миграции
Если вы предпочитаете использовать необработанные SQL-запросы, вы можете добиться автоматического увеличения идентификаторов, написав миграции. Миграции — это сценарии, которые определяют изменения в структуре вашей базы данных. Вот пример сценария миграции, который добавляет столбец идентификатора с автоматическим приращением:
import {MigrationInterface, QueryRunner} from "typeorm";
export class AddAutoIncrementId1632885434204 implements MigrationInterface {
async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
ALTER TABLE users
ADD COLUMN id SERIAL PRIMARY KEY;
`);
}
async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
ALTER TABLE users
DROP COLUMN IF EXISTS id;
`);
}
}
В приведенном выше коде метод up
добавляет новый столбец с именем id
в таблицу users
с SERIAL
, который автоматически увеличивает значение для каждой новой строки.
Метод 3: использование синтаксиса, специфичного для базы данных
Различные базы данных имеют свой собственный синтаксис для определения автоматически увеличивающихся идентификаторов. TypeORM позволяет вам использовать эти функции, специфичные для базы данных. Например, в MySQL вы можете использовать ключевое слово AUTO_INCREMENT
:
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
class User {
@PrimaryGeneratedColumn({ type: 'int', unsigned: true })
id: number;
@Column()
name: string;
}
В приведенном выше коде декоратор @PrimaryGeneratedColumn
изменен и включает дополнительные параметры, специфичные для MySQL, такие как параметры type
и unsigned
.
Автоинкрементные идентификаторы являются фундаментальной частью проектирования базы данных, и TypeORM предоставляет несколько удобных методов их реализации. В этой статье мы рассмотрели три подхода: использование декоратора PrimaryGeneratedColumn
, создание миграций с помощью необработанного SQL и использование синтаксиса, специфичного для базы данных. Понимая эти методы, вы сможете уверенно проектировать схемы баз данных в TypeORM и создавать надежные приложения.