Açıklaması şöyle
When using the soft delete mechanism on the database, you might run into a situation where a record with a unique constraint was deleted and you want to reuse the unique value.
Örnek
Elimizde şöyle bir tablo olsun
CREATE TABLE users ( user_id UUID PRIMARY KEY DEFAULT uuid_generate_v7(), email TEXT NOT NULL, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, deleted_at TIMESTAMP WITH TIME ZONE, created_by UUID NOT NULL, updated_by UUID NOT NULL, FOREIGN KEY (created_by) REFERENCES users(user_id), FOREIGN KEY (updated_by) REFERENCES users(user_id), is_system SMALLINT DEFAULT 0 NOT NULL CHECK (is_system BETWEEN 0 AND 1) );
Açıklaması şöyle
Whether a row should be created that has the same natural key as a ‘deleted’ row depends on the table. If this is desirable, unique indexes should be written with a WHERE clause, for example:
Şöyle yaparız. Böylece aynı email değerine sahip başka kullanıcı yaratılabilir
CREATE UNIQUE INDEX “users_email_unique”ON users(email, deleted_at)WHERE deleted_at IS NULL;
veya şöyle yaparız. Burada email alanı case insensitive olarak düşünüldüğü için case insensitive collation kullanılıyor
CREATE UNIQUE INDEX users_email_unique ON users(email COLLATE case_insensitive) WHERE deleted_at IS NULL;
Hiç yorum yok:
Yorum Gönder