본문으로 건너뛰기
제품 -> ERD가격문서블로그로그인EnglishERD 시작하기

관계와 외래 키

관계(ref)는 테이블 사이의 외래 키를 표현합니다. Ainecto에서는 캔버스에서 직접 연결하거나 테이블 편집 패널에서 FK를 관리할 수 있습니다.


관계 만들기

캔버스에서 만들기

  1. source 테이블의 컬럼 위에 마우스를 올립니다.
  2. target 테이블의 컬럼으로 드래그합니다.
  3. 기본 cardinality >로 ref가 만들어집니다.
  4. 필요하면 편집 패널에서 이름, cardinality, referential action을 조정합니다.

테이블 편집기에서 만들기

테이블을 선택하고 Foreign Keys 섹션에서 FK를 추가합니다. source 컬럼, target 테이블, target 컬럼을 선택하면 pending FK가 만들어집니다.


자동 제안

Ainecto는 컬럼 이름을 바탕으로 FK 후보를 제안합니다. 예를 들어 user_id 컬럼이 있고 users.id가 있다면 이를 연결 후보로 보여줍니다.

명명 규칙을 일관되게 유지하면 초기 스키마 설계 속도가 크게 빨라집니다.


Cardinality

기호의미
>Many-to-one
<One-to-many
-One-to-one
<>Many-to-many

관계 타입은 캔버스의 연결선에 표시되는 cardinality notation을 결정합니다.


Pending changes 모델

테이블 편집기에서 FK 변경은 pending workflow를 따릅니다.

  1. 새 FK를 Add하면 pending addition으로 표시됩니다.
  2. 기존 FK를 Edit하면 변경이 staged 상태가 됩니다.
  3. FK를 Delete하면 제거 예정으로 표시됩니다.
  4. Save를 누르면 pending 생성, 수정, 삭제가 함께 커밋됩니다.

이 방식은 컬럼 이름 변경과 FK 변경처럼 관련된 작업을 원자적으로 적용합니다.


On Delete / On Update

각 관계는 referential action을 지원합니다.

Action동작
No Action참조 row가 있으면 delete/update 거부(기본값)
Cascade참조하는 row도 자동 delete/update
Set NullFK 컬럼을 NULL로 설정
Set DefaultFK 컬럼을 기본값으로 설정
RestrictNo Action과 유사하지만 즉시 검사

관계를 만들거나 편집할 때 설정합니다.


관계 편집과 삭제

  • Edit: 캔버스의 관계선을 클릭하거나 Refs 탭에서 관계를 찾아 편집기를 엽니다.
  • Delete: 관계를 선택하고 Delete/Backspace를 누르거나 편집 패널의 delete 버튼을 사용합니다.

  • table_id 같은 naming convention을 따르면 FK 자동 제안이 잘 동작합니다.
  • pending 모델은 partial save를 막습니다. 마음이 바뀌면 저장하지 않고 편집 패널을 닫아 pending 변경을 버릴 수 있습니다.
  • On Delete Cascadeorders가 삭제될 때 order_items를 함께 삭제하는 것처럼 child table에 유용하지만, 공유 reference table에는 신중하게 사용하세요.