Укрощение временных меток: как отключить автоматически создаваемые поля CreateAt и UpdatedAt

В большинстве современных веб-приложений в таблицах базы данных обычно имеются поля createAt и updateAt для отслеживания временных меток создания и изменения записей. Однако могут возникнуть ситуации, когда вы захотите отключить автоматическое создание этих полей. В этой статье мы рассмотрим несколько методов блокировки автоматического создания полей CreateAt и UpdateAt в разных языках программирования и платформах.

Метод 1: использование ограничений базы данных
Если вы используете реляционную базу данных, например MySQL или PostgreSQL, одним из способов предотвратить автоматическое создание меток времени является использование ограничений базы данных. Вы можете определить схему таблицы без полей CreateAt и UpdatedAt и применить ограничения, чтобы не допускать нулевых значений. Таким образом, ответственность за установку этих значений ляжет на логику вашего приложения.

Пример (MySQL):

CREATE TABLE my_table (
    id INT PRIMARY KEY,
    name VARCHAR(255),
    -- other fields
    CONSTRAINT no_timestamps CHECK (createdAt IS NULL AND updatedAt IS NULL)
);

Метод 2: конфигурация ORM
Если вы используете библиотеку объектно-реляционного сопоставления (ORM), такую ​​как Sequelize для Node.js или Hibernate для Java, вы можете настроить ORM для исключения полей createAt и updateAt из отображение модели. Таким образом, ORM не будет генерировать эти поля автоматически.

Пример (Sequelize – Node.js):

const MyModel = sequelize.define('myModel', {
    name: DataTypes.STRING,
    // other fields
}, {
    timestamps: false // Disable automatic timestamps
});

Метод 3: перехватчики моделей и обратные вызовы
Многие платформы предоставляют перехватчики или обратные вызовы, которые позволяют перехватывать операции создания и обновления моделей. Используя эти перехватчики, вы можете предотвратить автоматическое создание меток времени, просто не устанавливая значения.

Пример (Django – Python):

from django.db import models
class MyModel(models.Model):
    name = models.CharField(max_length=255)
    # other fields
    def save(self, *args, kwargs):
        if not self.pk:  # check if object is being created
            self.createdAt = None  # or any value you desire
        self.updatedAt = None  # or any value you desire
        super().save(*args, kwargs)

Блокировать автоматическое создание полей CreateAt и UpdatedAt можно с помощью разных подходов, в зависимости от используемого стека технологий. Используя ограничения базы данных, конфигурации ORM или перехватчики моделей, вы можете лучше контролировать временные метки в своем приложении. Не забудьте выбрать метод, который лучше всего соответствует вашим конкретным требованиям и среде разработки.