사진에서 표시한 두 테이블중 reservationseat 에서 예매좌석이름과 예매하면 seat 의 좌석이름과 조인을 해야 할거 같은데요 어떤식으로 조인을 해야 한 사람이 한 좌석 예매를 하면 다른 사람이 예매를 못하게 할 수 있을까요?
by 마농
[2020.03.26 15:33:03]
1. 조인은 이름으로 하면 안되고 코드로 해야 합니다.
2. 중복 방지를 위한 그룹핑 기준은 스케줄코드가 될 듯 합니다.
- 해당 스캐줄코드에 좌석코드가 중복인지 체크하세요.
SELECT COUNT(*) cnt
FROM reservation r
, reservationseat rs
WHERE r.rcode = rs.rcode
AND r.shcode = '예약스케줄코드'
AND rs.rscode = '예약좌석코드'
;
-- cnt 가 0 이면 예약 진행
-- cnt 가 0 이 아니면 "한 발 늦었군요~" 오류 메시지
by neuclear
[2020.03.26 17:01:36]
아 그렇군요 즉, CNT는 겹치는게 있으면 1이 카운트 되는것이군요
정말 감사합니다(_ _)
by neuclear
[2020.03.26 17:06:59]
저 그런데 reservation r과 reservationseat rs에서 rs는 알겠는데 reservation.rcode는 seat테이블의 scode를 의미하는 것인가요?
by 마농
[2020.03.26 17:14:12]
reservation 의 rcode 는 해당 테이블의 PK 인 예매코드 이고
reservationseat 의 rscode 가 좌석코드라고 생각했습니다.
그런데 그게 아니라면??? 뭔가 좀 이상하네요. 테이블 설계가...
1. 우선 RSCODE 가 과연 좌석코드가 맞는지 의문이네요?
- 맞다고 생각해서 작성해 드리긴 했지만. 지금 보니 아닌 것 같네요.
- reservationseat 테이블에 좌석코드인 scode 가 있어야 할 것 같네요.
2. seat 테이블과의 조인은
- 좌석명이 필요할 때 조인 하는 것이고
- 지금은 좌석명이 필요한게 아니라 조인이 필요 없습니다.
- 다만 위에서 언급했듯이 scode 항목이 설계에서 빠진 듯 하네요.
by neuclear
[2020.03.27 09:21:44]
그러면 SCODE가 RESERVATIONSEAT에 연결하면 LOOP가 생기는데 상관 없나요?
by 마농
[2020.03.27 12:52:00]
"연결", "LOOP" 라는 단어가 왜 나오는지 모르겠습니다.
reservationseat 테이블에 scode 라는 컬럼이 있어야 할 것 같다고 했습니다.
네, 맞습니다.
reservationseat 의 테이블명 자체가 reservation + seat 의 의미죠.
각 테이블의 키를 참조하는 형태로 설계 되었어야 합니다.
그래서 저는 당연히 rscode 가 좌석코드 이겠거니 하고 생각했던건데.
자세히 보니 아닌 듯 하여 설계에 문제가 있는 것 같다고 다시 답변 드린 것입니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.