Mysql_개념_Day_02
참고도서
RDBMS(관계형 데이터베이스)
속성,column,feild, (속성의 수 /디그리/차수)
튜플 row record (튜플의수 = 카디널리티/기수)
전체적인 것 스키마
전체를 인스턴스
도메인이란? 속성이 가질수있는 값의 범위 : 도메인
ex)학년 1~3, 1,2,3만 가질수잇다. 이것이 외에 가질수없다.
-
릴레이션의 특징
-단일 값을 가진다.(도메인은 단일값 같은말)
제1 정규화, (2개로된거 쪼개는것)
-키
기본키PK (후보키중 하나를 선정하여 대표로 삼는 키) null 안됨, 중복 안됨
외래키FK
연쇄적으로 실행된다.
p90
관계대수 : 수학(코드가 만들었다.)
sql문
실행할때,
구조정의
양쪽에 2개 에 있는 것 하나만 추출하고
하나만 있는 것은 전부 추출하여
전부추출하는것이다.
그래서 속성의 순서와 도메인이 같아야 한다.
첫번째에만 있고 두번쨰에는 없는 것빼버리는 것.
ex)
열은 더하고행은 곱한다.
p109
110p
기호를 알아야한다.★★★ 해석을 한다.
문제풀이
p313
★★★순서암기(요-설-(개논물)-데)
모델링(=설계)
요구사항 수집 및 분석 : 최대한 많이 데이터를 모은다.
개념적 모델링 : 최대한 많은 데이터 중에서 뽑아낸다 - 이것이 개념적 모델링.(추상화를 한다)
ERD(객체관계다이어그램) - 개략적인것만 써놓는다.
(개략-핵심,전체뼈대)
논리적 모델링 : 머리속에 개념을 잡고, 논리적으로 정리
(구체화) RDBMS, 정규화(테이블 문제없이 나누는 작업)
물리적 모델링 : 컴퓨터에 구조를 잡는다.
(역정규화 (정규화의반대)
p317
ERD 관계도 그리기, 순서도(흐름)
p318
p319
p321
p323
p327 그림만
관계설정만 할줄알면된다. 1진인지 뭐 그런것까지 몰라도댄다.
o<이거 합친거 뭐에요?
p389
ERD(1개를 2개로 나누눈작업을, 정규화라한다.. 나누기어렵다)
3가지특징이 있어야 한다.
1)삽입이상
- 투플 삽입 시 특정 속성에 해당하는 값이 없어 NULL 값을 입력해야 하는 현상
Null값 문제
2)삭제이상
- 투플 삭제시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상
(하나만 지우고 싶었는데, 다른것까지지워지는 경우)
3)수정(갱신)이상(업데이트)
- 투플 수정시 중복된 데이터의 일부만 수정되어 데이터들의 불칠치 문제가 일어남
불일치문제 발생, 데이터의 무결성이 깨진다.
‘이상현상’이라는 문제점이 생기고, 없애려고 ‘정규화’ 라는 것이 생긴다.
나눌만한 특별한 이유가 있어야한다.
#원인이 있기때문에, 결과가 있다.
불편함점이 있기때문에, 나누게 된다.
p403
★어렵다
그림을 알아라.
A -> B
A를 B의 결정자
B를 A의 종속자
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
클래스가 하나의 테이블이다.
1.DB
2.테이블
3.삽입
4.관계설정
새로쓰기
/*
DDL(데이터 정의어) : 정의어 create(생성) alter(변경) drop(삭제)
DML(데이터 조작어) : insert(삽입) delete(삭제) update(갱신) select(검색)
DCL(데이터 제어어) : revoke(권한회수) grant(권한설정)
TCL - rollback(트랜잭션 되돌리기), commit(트랜잭션 완료)
데이터베이스 구축
요구사항 수집/ 분석 - > 설계(개념모델링,논리적모델링,물리적모델링), 데이터베이스 구축
비절차적언어(내가만드는대로 만들어진다)
*/
-- 1. 데이터베이스 생성
drop database if exists prod_db; -- 만약 prod_DB가 있으면 삭제하라
create database prod_db; -- prod_db(데이터베이스 생성)
show databases; -- 데이터베이스가 생성됫는지 확인하는 문법('s'자 붙여야한다.)
show tables; -- 테이블 보고싶다면 tables ('s'자 붙여야한다.)
-- 2. db을 사용한다(열기)
use prod_db; -- prod_db 안에서 작업하겠다.
-- 3. 테이블 생성 : order 테이블 생성
/*
-- 잘못된 생성의 예) : 부모가 없는데, 참조한다고 한다.
create table orderTBL(
orderid int primary key not null, -- 제약조건
dateOrder date null,
pcode char(10), -- 생략하면 null값 허용 한다는 뜻
custid char(10),
amount int not null,
-- 외래키 설정 참조하는 키 참조되는_테이블명(컬럼명)
foreign key (pcode) references productTBL(pcode) -- productTBL(pcode) 부모를 생성도 안했는데, 참조한다고 하는 경우이다.
-- 마지막은 ,(콤마) 안찍는다.
); -- 대소문자 구분하지 않는다.
*/
-- drop table orderTBL;
drop table if exists orderTBL; -- 있으면 삭제, 없다면 아무 실행 안한다.
create table orderTBL(
orderid int primary key not null, -- 제약조건
dateOrder date null,
pcode char(10), -- 생략하면 null값 허용 한다는 뜻
custid char(10),
amount int not null
);
-- 테이블 내용 확인
select orderid, dateOrder, pcode, custid, amount from orderTBL;
select * from orderTBL; -- 모든 테이블 다 보여달라
-- 4. product 테이블생성
create table productTBL(
pcode char(10) not null primary key,
pname varchar(100) not null,
price int not null,
region varchar(100) not null
);
select * from productTBL;
-- insert into 테이블명(컬럼명,.....) values(값1, ...);
insert into productTBL(pcode, pname, price, region) values("ba123","바나나",2300,"필리핀");
-- 홑따옴표, 쌍따옴표 둘중하나로 통일해서 값을 집어넣는것이 좋다.
insert into productTBL values("ba123", "사과",1000,"대구"); -- 실행하면 오류가 떨어진다 : 프라이머리키로 사용했다. 중복안된다.,null 안된다. : 안된다.
insert into productTBL values("ba231", "사과",1000,"대구"); -- 기본키는 중복되면 안된다. 그래서 바꿔준다. -> ba123 > ba231 : 된다.
insert into productTBL values("or321", null,1000,"대구"); -- not null( pname varchar(100) not null,)로 잡았다. : 안된다.
insert into productTBL values("or321",1000,"대구"); -- 컬럼수가 4개가 들어가야되는데 3개만써서 안된다. : 안된다.
insert into productTBL values("or321","오렌지",1000,"대구"); -- 컬럼수가 4개가 들어가야되는데 3개만써서 안된다. : 된다.
-- 개체무결성, 참조 무결성
-- 만들떄 부모를 먼저 만들고 그 다음에 자식
-- 지울때 자식먼저 지우고 그 다음에 부모