CHECK
CHECK to prosty constraint pozwalany na sprawdzanie jakiegoś warunku. Nie wiem, jak jest to naprawdę wewnętrznie zaimplementowane w PostgreSQL, ale wydaje mi się, że NOT NULL może być właśnie takich checkiem. Oto przykład definicji takiego constrainta:
ALTER TABLE posts ADD CONSTRAINT valid_post_type CHECK (type in ('Rumor', 'NewsArticle'))
Jak widać sprawdzamy, czy pole type tabeli posts zawiera się w tablicy dopuszczalnych wartości. Zastosowanie takiego konkretnego constrainta jest oczywiste - zapobiega on istnieniu rekordów nienależących do istniejących podklas w modelu STI (które mogłyby powstać np. w wyniku usunięcia jakiejś podklasy albo ręcznych zmian w bazie