SQL - 문제 미리보기

문제 1753

medium
다음 테이블 생성 구문에서 빈칸에 들어갈 올바른 제약조건은?
```sql
CREATE TABLE Orders (
OrderID int PRIMARY KEY,
CustomerID int ______,
OrderDate datetime DEFAULT GETDATE(),
TotalAmount decimal(10,2) ______ (TotalAmount > 0),
______ (CustomerID) REFERENCES Customers(CustomerID)
);
```
목적: CustomerID는 필수 입력, TotalAmount는 양수만 허용, CustomerID는 Customers 테이블을 참조
A. `NOT NULL`, `CHECK`, `FOREIGN KEY`
B. `UNIQUE`, `DEFAULT`, `FOREIGN KEY`
C. `NOT NULL`, `UNIQUE`, `PRIMARY KEY`
D. `DEFAULT`, `CHECK`, `INDEX`

정답: A


각각의 비즈니스 요구사항에 맞는 적절한 제약조건 조합입니다.

완성된 테이블 구문:
```sql
CREATE TABLE Orders (
OrderID int PRIMARY KEY,
CustomerID int NOT NULL, -- 고객ID 필수 입력
OrderDate datetime DEFAULT GETDATE(), -- 주문일시 기본값
TotalAmount decimal(10,2) CHECK (TotalAmount > 0), -- 양수 금액만 허용
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) -- 고객 테이블 참조
);
```
각 제약조건의 역할 분석:

1. CustomerID int NOT NULL:
```sql
-- 목적: 모든 주문은 반드시 고객과 연결되어야 함
-- 효과: NULL 값 입력 시 오류 발생

INSERT INTO Orders (OrderID, CustomerID, TotalAmount)
VALUES (1, NULL, 100.00);
-- Error: Cannot insert NULL into NOT NULL column 'CustomerID'

INSERT INTO Orders (OrderID, CustomerID, TotalAmount)
VALUES (1, 12345, 100.00);
-- Success: 유효한 고객ID 입력
```
2. TotalAmount CHECK (TotalAmount > 0):
```sql
-- 목적: 주문 금액은 반드시 양수여야 함 (비즈니스 규칙)
-- 효과: 0 이하의 값 입력 시 오류 발생

INSERT INTO Orders (OrderID, CustomerID, TotalAmount)
VALUES (2, 12345, -50.00);
-- Error: CHECK constraint violation

INSERT INTO Orders (OrderID, CustomerID, TotalAmount)
VALUES (2, 12345, 0);
-- Error: CHECK constraint violation (0은 양수가 아님)

INSERT INTO Orders (OrderID, CustomerID, TotalAmount)
VALUES (2, 12345, 150.75);
-- Success: 양수 금액
```
3. FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID):
```sql
-- 목적: 유효한 고객만 주문할 수 있도록 보장
-- 효과: 존재하지 않는 고객ID 입력 시 오류 발생

-- 먼저 Customers 테이블에 고객이 있어야 함
INSERT INTO Customers (CustomerID, CustomerName) VALUES (100, 'John Doe');

-- 이제 해당 고객의 주문 생성 가능
INSERT INTO Orders (OrderID, CustomerID, TotalAmount)
VALUES (3, 100, 200.00); -- Success

-- 존재하지 않는 고객으로 주문 시도
INSERT INTO Orders (OrderID, CustomerID, TotalAmount)
VALUES (4, 999, 300.00);
-- Error: FOREIGN KEY constraint violation
```

💡 학습 팁

이 문제를 포함한 SQL 과목의 모든 문제를 순차적으로 풀어보세요. 진행상황이 자동으로 저장되어 언제든지 이어서 학습할 수 있습니다.