작성자와 글을 표로 나누고 다시 붙입니다.
글마다 작성자 이름과 이메일을 본문에 반복해 넣으면, 이메일이 바뀔 때 그 사람의 모든 글을 고쳐야 한다. 작성자는 표로 나누고, 글은 작성자의 번호만 가진다.
create table authors (
id bigint generated always as identity primary key,
name text not null,
email text not null unique
);
alter table posts
add column author_id bigint references authors (id);
references authors (id)는 외래 키다. posts.author_id에는 authors.id에 있는 값만 들어간다. 없는 번호를 넣으면 Postgres가 거절한다.
select posts.title, authors.name
from posts
join authors on authors.id = posts.author_id;
join은 글의 author_id와 작성자의 id가 같은 행을 붙인다. 작성자가 없는 글은 이 결과에 나오지 않는다. 그것도 보려면 left join을 쓴다.
posts.id만으로 제목이 정해지면 된다.posts가 아니라 authors에 둔다.나눈 뒤에도 화면에서는 한 줄로 보여야 하면, 그때 join한다. Supabase에서는 이 외래 키가 있어야 관계로 같이 읽을 수 있다.