inflearn logo
강의

Course

Instructor

[Daily Completion Challenge] <From Planning to Launch with FastAPI> with the Author

Section 8.5: Implementing the Fetch Calendar Reservation API (p321~p338)

4주 3회차 과제

Resolved

38

do

2 asked

0

데이터베이스 고윳값 제약으로 예방하는 구현에 대해서 조사했습니다.

 

  1. 동일 일자와 동일 타임슬롯인 경우 중복

Booking에 unique index를 생성하는 것인데 동일 일자 (when)과 동일 타임슬롯(time_slot_id) 조건을 생성하면 됩니다.

 

CREATE UNIQUE INDEX uq_booking_slot ON bookings (when, time_slot_id);
class Booking(SQLModel, table=True):
    __tablename__ = "bookings"
    __table_args__ = (
        UniqueConstraint("when", "time_slot_id", name="uq_booking_slot"),
    )

 

  1. attendance_status 필드값이 cancelled인 경우

PostgreSQL의 경우 partial unique index가 가능합니다. where를 사용해서 field가 cancelled가 아닌 경우에 unique 제약을 걸면 됩니다.

 

CREATE UNIQUE INDEX uq_booking_slot ON bookings (when, time_slot_id) WHERE attendance_status <> 'cancelled' ;
class Booking(SQLModel, table=True):
    __tablename__ = "bookings"
    __table_args__ = (
        UniqueConstraint("when", "time_slot_id", name="uq_booking_slot"), postgresql_where=text("attendance_status <> 'cancelled'")
    )

 

다중 컬럼에 대한 unique는 종종 사용하는 방법이었는데 where를 이용해서 조건을 설정할 수 있는 건 이번에 첨 알았습니다. 필요하면 python에서 처리하곤 했었는데 데이터베이스 기능으로 이용하는게 레이스 컨디션도 피할 수 있고 장점이 있어보이네요.

 

실무에 적용할때도 꼭 이용해보겠습니다.

python aws tdd FastAPI 북-챌린지

Answer 1

0

hannal

정석으로 잘 구현하셨어요. 👍

SQLite에서는 동작하지 않는 방식이고, 실 서비스에서 여러 사용자가 접근하는 용도로 SQLite를 사용하지는 않지만, SQLite에서 고윳값 제약을 조건부로 적용하는 효과를 보는 방법도 한 번 고민해보세요. 가령, 버저닝(versioning)을 한다면, SQLite에서도 비슷한 효과를 볼 수 있는데, SQLite를 위해서가 아니더라도 버저닝을 활용하는 정책이나 기능이 필요하다면 고려해볼 수 있지요.

4주 1회차 과제

0

44

2

4주 5회차 과제

0

44

1

4주 5회차 과제 제출

0

52

2

4주 4회차 과제 제출

0

62

2

351쪽 질문

0

52

2

4주 3회차 과제

0

49

2

refresh() 메서드와 픽스처에 대해 질문이 있습니다.

0

59

2

4주 2회차 과제 질문

0

57

3

4주 1회차 과제

0

53

2

4주 1회차 과제

0

44

2

4주 3회차 과제

0

55

2

4주 1회차 과제

0

52

2

4주 5회차 과제

0

38

2

4주 1회차 과제

0

30

2

4주 1회차 과제

0

25

2

4주 4회차 과제 제출

0

36

2

4주 1회차 과제 제출합니다.

0

43

1

4주 2회차 과제

0

49

1

patch 요청시 payload가 넘어가지 않습니다.

0

60

3

4주 1회차 과제

3

119

2

페이지 144 코드 문의

0

61

3

책과 github 코드가 다릅니다 p130

0

50

2

120페이지 코드 질문드립니다.

0

48

2

테스팅과 학습법의 관계 (?)

0

67

2