Types, NULL and schema design
Choose types that match the domain and decide deliberately whether NULL is allowed.
What you will be able to do
- Use timestamptz, not timestamp, for real-world events.
- Use numeric for money; floating point is for measurements.
- Normalize repeated data until you have a measured reason to denormalize.
In plain English
PostgreSQL has rich types: timestamptz, numeric, jsonb, arrays and enums. Prefer timestamptz for moments in time and numeric for exact money. NULL means unknown, not zero or empty string.
create table certificates (
id text primary key,
holder_name text not null,
issued_at timestamptz not null default now(),
score numeric(5,2) not null check (score between 0 and 100),
expires_at timestamptz,
metadata jsonb not null default '{}'::jsonb,
constraint expiry_after_issue
check (expires_at is null or expires_at > issued_at)
);Your turn
MediumAdd an expiry constraint
Create a certificates table with issued_at and expires_at and a constraint that expiry is after issue.
SQL · starter
create table certificates ();Check your understanding before moving on.
Knowledge checkQuestion 1
Which type is best for an exact monetary amount?
Select an answer to continue
Study tools
Make it yours.
Keep a private note for this lesson, then turn the key ideas into flashcards you can revisit.
Sign in to save notes and flashcards.Both are private to your account and stay with your progress.
Sign inFinished reading?
Lock in what you just learned.
0%
Mark this lesson complete to save your place and move one step closer to the certificate.