본문으로 바로가기

데이터베이스 모델링

category MySQL 2024. 5. 31. 16:08

시나리오 1

  • 고객에 방문 기록과 방문한 사람이 어떤 상품을 구매 하였는지 기록을 남겨 보자.

insert into usertbl(userName, birthyear, addr, mobile) 
values ('이승기', 1987, '서울', '011-111-1111'),
		('김경호', 1971, '전남', '019-333-3333'),
        ('윤종신', 1969, '경남', ''),
        ('임재범', 1963, '서울', '016-666-6666'),
        ('은지원', 1978, '경북', '011-888-8888'),
        ('조관우', 1965, '경기', '011-999-9999'),
        ('김범수', 1979, '경남', '011-222-2222'),
        ('조용필', 1950, '경기', '011-444-4444'),
        ('바비킴', 1973, '서울', '011-000-0000'),
		('성시경', 1939, '경남', null);
       
-- 구조 확인
desc usertbl;

-- 다른 테이블 삭제 하고자 하는 테이블을 참조 하고 있다면
-- 테이블 삭제가 바로 안된다. (굳이 삭제하고 싶다면 참조 테이블 먼저 삭제해야한다)
drop table usertbl;
drop table buytbl;

-- 데이터를 삭제 하는 명령어 이다
-- delete from usertbl;

 

시나리오 2

구매를 상태와 비 구매 상태 구분하기 --> L 자 모양으로 만들어지게 된다

 

시나리오 3

데이터 베이스에 고객 테이블과 구매 테이블 만들어서 불필요 공간 없애기

insert into buytbl(userName, prodName, price, amount)
values  ('김범수', '운동화', 30, 2),
		('김범수', '노트북', 1000, 1),
        ('조용필', '모니터', 200, 1),
        ('바비킴', '모니터', 200, 5),
        ('김범수', '청바지', 50, 3),
        ('바비킴', '메모리', 80, 10),
        ('성시경', '책', 15, 5),
        ('은지원', '책', 15, 2),
        ('은지원', '청바지', 50, 1),
        ('바비킴', '운동화', 30, 2),
        ('은지원', '책', 15, 1),
        ('바비킴', '운동화', 30, 2);

select * from buytbl;

 

시나리오 4

고객 테이블에 중복 회원(중복 없애기) --> 고객 이름에 PK(기본키 설정)

 

 

 

시나리오 6

PK : FK 관계 만들기

중요 : 현실세계를 모델링할때 아주 많이 사용되는 설계 1: N 관계

학생 : 성적 ---> 1 : N

직원 : 급여 ---> 1 : N

-- 데이터 집합 생성 
create database db_tenco_market;

-- 사용 
use db_denco_market;

-- db 삭제 명령어 
-- drop database db_denco_market;

-- 사전 기반 지식 : mysql 은 대소문자를 구별하지 않습니다. 
-- 단, 구분 하는 RDBMS 도 있습니다. 

--  테이블 설계 하기 

-- 고객 테이블 생성 
create table userTBL(
   userName char(3) not null primary key, 
   birthYear int not null, 
   addr char(2) not null,
   mobile char(12)
);

show tables;
select * from userTBL;
desc userTBL;

-- 구매 테이블 생성 
create table buyTBL(
	id int not null auto_increment, 
    userName char(3) not null, 
    prodName char(3) not null, 
    price int not null, 
    amount int, 
    primary key(id),
    foreign key(userName) references userTBL(userName)
);

show tables;
select * from buyTBL;
desc buyTBL;

  

   foreign key (userName) references userTBL(userName):

  • 이 구문은 외래 키(foreign key)를 정의하는 데 사용됩니다.
  • 외래 키는 한 테이블의 열에 대해 다른 테이블의 열을 참조하는데 사용됩니다. 이를 통해 테이블 간의 관계를 설정하고 데이터 무결성을 유지할 수 있습니다.
  • 예를 들어, 위의 구문은 현재 테이블의 userName 열을 외래 키로 정의하고, 이 외래 키가 userTBL 테이블의 userName 열을 참조하도록 설정합니다. 이는 현재 테이블의 userName 열이 userTBL 테이블의 userName 열에 있는 값 중 하나여야 한다는 의미입니다.

     auto_increment:

  • 이는 열에 대한 속성으로, 해당 열의 값이 자동으로 증가하도록 설정합니다.
  • 보통 이 속성은 주로 기본 키(primary key) 열에 사용되며, 새로운 레코드가 삽입될 때마다 자동으로 값이 증가하여 고유한 식별자를 생성합니다.
  • 일반적으로 auto_increment 속성은 정수 데이터 타입에만 사용됩니다. 대표적으로 INT나 BIGINT와 같은 정수형 데이터 타입과 함께 사용됩니다.
  • 예를 들어, id INT AUTO_INCREMENT PRIMARY KEY 와 같이 정의하면 id 열은 자동으로 1씩 증가하는 고유한 값을 가지게 됩니다. 새로운 레코드가 삽입될 때마다 자동으로 증가하는 식별자가 생성됩니다.

'MySQL' 카테고리의 다른 글

테이블 생성과 제약 사항 연습  (0) 2024.05.31
테이블에 데이터 입력  (0) 2024.05.31
데이터베이스 구축 절차  (0) 2024.05.31
샘플 데이터 구축하기  (0) 2024.05.31
데이터베이스란  (0) 2024.05.31