← Назад к вопросам

Какие знаешь Constraints в PostgreSQL?

1.8 Middle🔥 191 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Constraints в PostgreSQL

Constraints (ограничения) — это правила на уровне базы данных, которые обеспечивают целостность данных и валидность информации. PostgreSQL предоставляет мощный набор инструментов для контроля качества данных.

1. PRIMARY KEY (Первичный ключ)

PRIMARY KEY гарантирует уникальность и обязательность значения. Это комбинация UNIQUE + NOT NULL.

// JPA пример
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(unique = true, nullable = false)
    private String username;
}

2. UNIQUE (Уникальность)

UNIQUE гарантирует, что все значения в столбце уникальны, но позволяет несколько NULL.

@Entity
public class Account {
    @Id
    @GeneratedValue
    private Long id;
    
    @Column(unique = true)
    private String email;
}

3. NOT NULL (Обязательность)

NOT NULL требует, чтобы в столбце всегда было значение.

@Entity
public class Employee {
    @Id
    private Long id;
    
    @Column(nullable = false)
    private String firstName;
    
    @Column(nullable = false)
    private String lastName;
}

4. FOREIGN KEY (Внешний ключ)

FOREIGN KEY обеспечивает ссылочную целостность между таблицами.

@Entity
public class Post {
    @Id
    private Long id;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id", nullable = false)
    private User user;
}

5. CHECK (Проверка условия)

CHECK валидирует данные по произвольному условию.

@Entity
public class Product {
    @Id
    private Long id;
    
    @Column(nullable = false)
    @Min(0)
    private BigDecimal price;
    
    @Min(0)
    private Integer quantity;
}

6. DEFAULT (Значение по умолчанию)

DEFAULT устанавливает значение автоматически, если не указано.

@Entity
public class User {
    @Id
    private Long id;
    
    @Column(columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
    private LocalDateTime createdAt;
    
    @Column(columnDefinition = "VARCHAR(20) DEFAULT 'active'")
    private String status;
}

7. Именованные constraints

Для удобства можно давать имена constraints.

Основные типы constraints

  • PRIMARY KEY — уникальный идентификатор
  • UNIQUE — уникальные значения
  • NOT NULL — обязательное значение
  • FOREIGN KEY — ссылочная целостность
  • CHECK — условная валидация
  • DEFAULT — значение по умолчанию
  • DEFERRABLE — отложенная проверка

Best Practices

  • Используй constraints активно на уровне БД
  • NOT NULL для обязательных полей
  • UNIQUE для альтернативных ключей
  • FOREIGN KEY для связей
  • DEFAULT для часто используемых значений
  • CHECK для валидации доменов