데이터베이스 제약 조건 설계 및 구현

MySQLBeginner
지금 연습하기

소개

이 프로젝트에서는 기본 키, 외래 키, 고유 제약 조건, 기본값 및 검사 제약 조건을 포함하여 데이터베이스 스키마에 다양한 제약 조건을 추가하는 방법을 배우게 됩니다. 이 프로젝트를 완료하면 관계형 데이터베이스에서 데이터 무결성 규칙을 설계하고 적용하는 방법에 대한 이해도가 높아질 것입니다.

👀 미리보기

Database schema constraints preview

🎯 과제

이 프로젝트에서 다음을 배우게 됩니다:

  • salgrade 테이블에 복합 기본 키를 생성하는 방법
  • emp 테이블의 deptno 필드에 외래 키를 지정하는 방법
  • emp 테이블의 ename 필드에서 중복을 방지하기 위해 고유 제약 조건 (unique constraint) 을 사용하는 방법
  • emp 테이블의 comm 필드에 기본값을 설정하는 방법
  • emp 테이블의 hiredate 필드에서 2022 년 2 월 28 일 이후의 입사일을 입력하지 못하도록 검사 제약 조건 (check constraint) 을 사용하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • 데이터베이스 설계에서 데이터 무결성 제약 조건의 중요성을 이해합니다.
  • MySQL 데이터베이스에서 다양한 유형의 제약 조건을 구현합니다.
  • 데이터 품질 및 일관성을 유지하기 위한 모범 사례를 적용합니다.
  • 데이터베이스 제약 조건과 관련된 문제를 해결하고 디버깅합니다.

MySQL 서버 시작 및 데이터베이스 가져오기

이 단계에서는 MySQL 서비스를 시작하고 personnel.sql 데이터베이스를 가져오는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요:

  1. MySQL 시작:

    sudo /etc/init.d/mysql start
  2. personnel.sql 데이터베이스를 MySQL 로 가져오기. 터미널에서 다음 명령을 실행하여 이 작업을 수행할 수 있습니다:

    mysql -u root < /home/labex/project/personnel.sql

이 명령은 root 사용자를 사용하여 personnel.sql 데이터베이스를 MySQL 로 가져옵니다.

✨ 솔루션 확인 및 연습

'salgrade' 테이블에 복합 기본 키 추가

이 단계에서는 salgrade 테이블에 복합 기본 키를 추가하는 방법을 배우게 됩니다. 아래 단계를 따라 이 단계를 완료하세요:

  1. MySQL 터미널에 로그인합니다:

    mysql -uroot
  2. personnel 데이터베이스를 사용합니다:

    USE `personnel`;
  3. grade, losal, 및 hisal 필드를 복합 기본 키로 사용하여 salgrade 테이블에 복합 기본 키를 추가합니다:

    ALTER TABLE salgrade
    ADD PRIMARY KEY (grade, losal, hisal);

이렇게 하면 grade, losal, 및 hisal 필드를 사용하여 salgrade 테이블에 복합 기본 키가 생성됩니다.

✨ 솔루션 확인 및 연습

'emp' 테이블에 제약 조건 추가

이 단계에서는 다음을 배우게 됩니다:

  • 'emp' 테이블의 'deptno' 필드에 'dept' 테이블의 'deptno' 필드를 참조하는 외래 키 (foreign key) 를 지정하는 방법.
  • 'emp' 테이블의 'name' 필드 중복을 방지하기 위해 고유 제약 조건 (unique constraint) 을 사용하는 방법.
  • 'emp' 테이블의 'comm' 필드의 기본값을 100 으로 설정하기 위해 기본값 제약 조건 (default value constraint) 을 사용하는 방법.
  • check 제약 조건을 사용하여 'emp' 테이블의 'hiredate' 필드에 2022 년 2 월 28 일 이후의 입사일을 입력하는 것을 방지하는 방법.

이 단계를 완료하려면 아래 단계를 따르세요.

  1. personnel 데이터베이스를 사용합니다:

    USE `personnel`;
  2. emp 테이블의 deptno 필드에 외래 키를 지정하여 dept 테이블의 deptno 필드를 참조합니다:

    ALTER TABLE emp
    ADD FOREIGN KEY (deptno) REFERENCES dept(deptno);
  3. 고유 제약 조건을 사용하여 emp 테이블의 ename 필드에서 중복을 방지합니다:

    ALTER TABLE emp
    ADD UNIQUE (ename);
  4. 기본값 제약 조건을 사용하여 emp 테이블의 comm 필드의 기본값을 100 으로 설정합니다:

    ALTER TABLE emp
    ALTER COLUMN comm SET DEFAULT 100;
  5. check 제약 조건을 사용하여 emp 테이블의 hiredate 필드에 2022 년 2 월 28 일 이후의 입사일을 입력하는 것을 방지합니다:

    ALTER TABLE emp
    ADD CHECK (hiredate <= '2022-02-28');
✨ 솔루션 확인 및 연습

테이블 구조 확인

이 단계에서는 명령을 사용하여 salgradeemp 테이블의 구조를 표시합니다:

  1. salgrade 테이블의 구조를 표시합니다:

    desc salgrade;
  2. emp 테이블의 구조를 표시합니다:

    desc emp;

다음과 같은 출력을 볼 수 있습니다:

MariaDB [personnel]> desc salgrade;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| grade | int(4)      | NO   | PRI | NULL    |       |
| losal | double(7,2) | NO   | PRI | NULL    |       |
| hisal | double(7,2) | NO   | PRI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.001 sec)

MariaDB [personnel]> desc emp;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| empno    | int(4)      | NO   | PRI | NULL    |       |
| ename    | varchar(20) | YES  | UNI | NULL    |       |
| job      | varchar(20) | YES  |     | NULL    |       |
| mgr      | varchar(20) | YES  |     | NULL    |       |
| hiredate | date        | YES  |     | NULL    |       |
| sal      | double(7,2) | YES  |     | NULL    |       |
| comm     | double(7,2) | YES  |     | 100.00  |       |
| deptno   | int(4)      | YES  | MUL | NULL    |       |
+----------+-------------+------+-----+---------+-------+
8 rows in set (0.001 sec)

축하합니다! 프로젝트를 성공적으로 완료했습니다.

✨ 솔루션 확인 및 연습

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.