데이터베이스

정은지·2022년 8월 22일
0

dbstudy

목록 보기
1/2
post-custom-banner

데이터베이스가 나오기 이전에는 파일시스템이 존재함
데이터베이스는 여러명이 들어가서 동시에 사용 가능함
(데이터베이스가 나오기 전 )파일 시스템은 : 둘이상 접근 불가능

  • 데이터베이스 관리 시스템 DBMS 란?
    : 데이터베이스를 저장하고 관리하는 역할을 하는 소프트 웨어
    종류 ↓
    no sql 문서형 db 특징 : db가 JSON으로 되어있음
    relation db : 시장에서 가장 많이 사용함

오라클 - 자바 배포하는 회사 , 오라클 회사에서 제일 잘 팔리는거 Oracle(DE), MySQL도 팜

ROB : 관계형데이터베이스
Documnet : 문서형데이터베이스
관계형이라는 이름을 가지고 있으면 다 고만고만하다 (Rleational)
오라클이랑 마이sql 배우는데 당장은 오라클만 배운대요

오라클 다운로드

https://www.oracle.com/datavase/technologies/xe-prior-release-downloads.html
접속한 뒤 다운로드, 알집풀기
exe파일 실행


-계정이름은 정해져있고
비밀번호만 설정하는 창

오라클 run실행

conn 입력 (커넥션 약자)
system 입력
패스워드에서 숫자 1 4번 후 엔터(초기에 설정한 비밀번호)
connected 뜨면 성공
show user 명령어 입력
user is system 뜸

명령프롬프트 와서 sqlplus 입력 (sqlplus.exe를 실행하겠다는 명령어)
그럼 유저이름 물어봄

아이디 system
비번 1111

gdj파일에 sqlplus없는데 실행될 수 있는 이유 >> 환경변수를 설정해서(path)

자바는 환경변수 설정해줘야하는데 sql는 자동으로 설정됨

path설정의 뜻 : 요 폴더에 저장된 모든 파일들은 어디서든 실행할 수 있다

오라홈 : 오라클이 설치된 디렉터리 (C:\oraclexe\app\oracle\product\11.2.0\server)
(bin폴더로 path 설정 해주어야함)

자바홈 : 자바가 설치된 디렉터리

경로 확인

conn 아이디 하면 바로 비번 치고 연결 가능
conn 아이디/비번 --> 보안은 개나 준 방법(비번 보여서)

sql은 오늘만 한다

비번 모를 때 sys계정으로 접속하는 방법 ↓


"as SYSDBA" 그대로 쓰면 됨

명령어 입력 : conn sys /as sysdba

입력하면 패스워드 입력하라고 나옴

명령프롬프트 exit 하면 현재 실행중인 파일 종료(sqlplus)

종로된 상태에서
sqlplus / assysdba
입력

DB 사용할려면 접속을 먼저 해야함
system계정으로 접속하는건 dba들이라고 함. 데이터베이스관리자들.
개발자들은 system 계정으로 접속 X
dba들이 개발자들한테 사용자계정 하나 만들어줌

사용자계정을 만들 때 생성과 권한 작업을 수행해주어야함. (이 작업은 아무나 하는게 아니고 관리자만 할 수 있음)

사용자계정 만드는 법(creat문)

  1. system 으로 접속
  2. 사용자쿼리문 만들기
  3. 사용자 권한 부여하기

DB는 쿼리문과의 싸움

사용자 쿼리문 만드는 명령어
CREATE USER USER1 IDENTIFIED BY 1111; (*정해진 구문)
(BY 뒤에는 비번설정)
(★관리자가 내릴 수 있는 쿼리문임)
끝에 ; 해주기

-> 성공티비~

Structured
Query
Language
-> SQL 약어

생성자 만든 후 user1에 접속해보기

실패. 권한이 없어서
권한 종류 - 읽어볼 숭 ㅣㅅ는 사람, 데이터객체를 만ㄴ들수잇는사람, 다할 수 있는 사람.
현재 user1 계정은 어떠한 권한도 없음
그래서 권한 설정해주어야함
접속실패하면 로그인이 풀림
그래서 다시 system 으로 접속해주어야함

권한 부여하는 쿼리문
GRANT CONNECT TO USER1;
(*쿼리 끝나면 세미콜론(;)해주기)

성공.
커넥트 권한 안주면 접속 안됨

접속권한만 준 경우 - 뭘 못 만들음

crate table a_tbl (NO NUMVER); -- (모두 대문자, 언더스코어 사용가능)
TABLE이라는 객체를 만드는 초간단 쿼리임
현재 접속 권한만 가지고 있는 상태. 만드는 능력이 없어서 엔터를 누르면 오류남(실패)
RESOURCE 권한이 있는 상태에서 사용할 수 있는 쿼리문

권한 회수하는 법 (시스템만 할 수 있음-시스템으로 접속하기)
REVOKE CONNECT FROM USER1

: USER1으로부터 권한 회수하겠다는 뜻
현재 USER1, 2

권한주는 쿼리문
GRANT RESOURCETO USER1;
(커넥 권한이 있어야 이 권한을 줄 수 있음)

GRANT CONNECT, RESOURCE TO USER1;
:한꺼번에 해결하는 쿼리문

성공
접속도 할 수 있고 , 데이터베이스 자원을 맘대로 사용가능
일반적인 개발자는 보통 이 권한들을 가지고 있음

CREATE반댓말이 DROP임

DROP USER - 유저 삭제
DROP TABLE - 테이블 삭제

USER1에서 접속한 상태에서 USER1 삭제 불가능

DROP을위해서 SYSTEM 접속해야함

SYSTME 접속 후 삭제 시도. 오류남.
USER1에는 테이블이 있는데 이것도 함께 제거할거면 CASCADE 명령어 추가!

DROP USER USER1 CASCADE;
테이블이랑 유저 같이 삭제함

테이블 드랍은 해당 유저로 접속해서 삭제해야함

-시스템에서 접속한 상태로 드랍테이블하니까 오류남

접속배움
사용자 생성, 삭제 배움 (테이블여부에따라서 삭제)
사용자 권한 부여 / 회수

권한
관리자가 또 다른 관리자를 만드는 방법

GRANT DBA TO USER1
관리자 권한 부여
관리자 계정권한(DBA)을 받으면
접속 그냥 되고 테이블도 그냥 만들 수 있고 유저도 만들 수 있음

SYSTEM 계정에는 테이블 만들면 안됨

SELECT TABLE_NAME FROM DBA_TABLES;
테이블의 이름을 확인하고 갯수를 확인하는 명령어

오후 SQL의 디벨롭더 다운로드 할거임
https://www.oracle.com/tools/downloads/sqldev-downloads-2041.html


첫번째는 자바 1.8 포함
현재 컴은 자바 11이라 2번째꺼 다운
SQL의 디벨롭더는 자바 설치 안해놓으면 안돌아감

DB 누구에게 무슨 권한 무슨 권한 줄 수 있음

오라클 관리자 계정 1. sys 2. system (sys안에 system있음)

as sysdba 관리자
as stsoper 사용자

데이터베이스에선 카멜페이스 네이밍이 없음-내부에서 대소문자 구분이 안됨. 밑줄로 단어 연결하기
conn scott/TIGER
conn SCOTT/TIGER

데이터베이스 사용자 목룍

Data가 있으면 그 데이터를 설명하기 위한 데이터를 meta라고 함
1. 데이터딕션어리 System Catalog = Data Dictionary
2. 데이터 사전의 종류
-DBA : 데이터베이스 전체에 포함된 모든 객체에 대한 정보
-USER
: 자신이 생성한 모든 객체에 대한 정보
-ALL_ : 자신이 생성한 모든 객체+다른 사용자가 생성한 객체 정보 중 볼 수 있는

  1. 사용자 목록 확인

dba_users

DESC dba_users (DESC : 디스크라이브 줄임말)
-> dba_users의 데이터 컬럼을 조회

표에서 열을 '칼럼'이라고 함

SELECT USERNAME FROM DBA_USERS; : DBA의 테이블로부터 USERNAME을 보여달라는 명령어

→응답 확인

수업에서 사용할 계정 : 활성화

SCOTT, HR

RDB 기본용어 - 이론
RDB 키(KEY) - 이론
RDB 모델링 - 이론
RDB 오브젝트 생성 - 이론/실습
DDL 데이터 정의어
정규화 - 이론


쿼리문 실습

SCOTT 계정

-오라클데이터베이스를 배포할 때 미리 만들어 둔 계정

  • SYS 계정 접속
  • SCOTT 계정 잠금 해제

경로 : C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin
에서 scott.sql 메모장 찾기 -쿼리문 적혀있는거임

경로 복사한 후
Run sqlcommad 들어가서
@경로\파일명(scott.sql)입력
show user(현재사용자) 명령어 입력

user가 soctt으로 된거 확인하기
왜 soctt이나면 쿼리문에 유저를 scott으로 바꾸는게 있었기 때문임 ~

HR 계정

  • 테이블까지 만들어져있어서 불러다가 실행할 필요 없음
  • hr 계정 활성화 하는 법
  1. 관리자 계정 접속 : conn sys / as sysdba
  2. HR 계정 잠금해제 : alter user hr account unlook;
  3. HR 계정 비밀번호 변겅 : alter user hr identified by 1111;
  4. HR 계정 접속 확인 : conn hr/1111

관계형 데이터베이스 (RDB)

-단점 : 구조가 복잡해질수록 성능 최적화가 반드시 필요함
우리가 작성하는 쿼리문 - 어떻게든 돌아가는 쿼리문,

테이블(=릴레이션=R) 구성(★외우기)

  • 행 ㅡ : 로우, 레코드, 튜플 (제목은 row로 보지 않음)
  • 열 ㅣ : 칼럼, 필드, 속성

테이블 용어 (★외우기)

  • 도메인 : 한 칼럼이 가질 수 있는 값의 범위(집합)
  • 차수 : degree, 한 테이블에 있는 칼럼의 개수
  • 기수 : Cardimality, 한 테이블에 있는 로우의 개수

오라클 데이터 타입

  1. CHAR(SIZE) : 고정 길이 문자 타입(1~2000바이트)
  2. VARCHAR2(SIZE) : 가변 길이 문자 타입(1~4000바이트)
  3. NUMBER(p,s) : 정밀도(p), 스케일(s)로 표현되는 숫자 타입
    -정밀도(p) : 정수 + 소수점 모두 포함하는 전체 유효 숫자가 몇개냐 ??...유효숫자에서 0 제외됨.
    -스케일(s) : 소수 몇 자리냐?? 소수점 자리수를 의미함.
    예시)
    NUMBER : 최대 38자리 숫자(22바이트)
    NUMBER(3) : 최대 3자리 정수
    NUMBER(5,2) : 전체 5자리, 소수점 2자리 실수(100.45) -- 소수점 빼고 전체 5자리, 소수점 2자리.
    NUMBER(2,2) : 1 미만의 소수점 2자리 실수는 3,2 아님. 0은 제외.

테이블 생성

  1. 제약조건의 이름을 지정하지 않는 방법이 있고 (SYS로 시작하는 임의의 제약조건이름이 지정)-이름을 안줘도 이름이 생김
  2. 제약 조건의 이름을 지정하는 방법이 있다

제약조건 생성

  1. 테이블 생성할 때 함께 지정하는 방법 - 옆에다가 적는 방법, 아래에 몰아서 적는 방법이 있음
  2. 테이블 생성한 뒤 테이블 수정하면서 지정 - ALTER 사용, 이름 줄려면 CONSTRAINT 사용함

제약조건 - 데이터 사전 - 다 테이블 이름임. 이미 만들어진 테이블

  1. DBA_CONSTRAINTS
  2. USER_CONSTRAINTS
  3. ALL_CONSTRAINTS

제약조건 종류

제약 조건 5개
NOT NULL,
UNIQUE,
CHECK,
PK,
FK
(NOT NULL빼고 이름 주기 가능, 일반적으로 PK, FK에 이름 붙임)

키(key) 란?

밑줄표시 되어있음

슈퍼키 : 테이블의 각 로우들을 식별할 수 있는 칼럽 또는 칼럽의 집합
판단 기준 :

후보키

-최소한의 칼럼(가장 적은 수의 칼럼)으로 구성된 슈퍼키만 선정한 것
후보키는 유일성+최소성의 특징을 가짐

기본키 (★졸중)

-후보키 중에서 dba가 선택한 키를 의미
-기본키는 유일성+최소성의 특징을 가짐
-기본키는 ★개체 무결성★의 특징을 가짐
★NOT NULL : 널(NULL)값을 가질 수 있음
★UNIQUE : 중복된 값을 가질 수 없음

기본키의 종류 2가지
1. 자연키 - 원래있는 데이터 이름, 성별, 나이. 등
2. 인공키(Artifical key) - 원래 없는데 만들어서 주는거 (너는 1번해라)
auto increment값 - 자동으로 증가되는 데이터

고객 테이블의 기본키 선정사유
*고객번호 - 고객이 추가될 때마다 번호를 하나씩 증가
*아이디 - 아이디를 이메일로 변환시켜서 쓸 예정이면 아이디를 기본키로 써도 되는데 아이디자체가 의미가 달라질 수 있어서 기본키로 부적절함
*휴대폰 번호 - 휴대폰번호가 없는 사람이 있음. 식별 불가능함
*주민번호 - 모든 고객이 서로 다른 값을 가지고 있으므로 not null+uniqie 모두 만족/근데 주민번호가 필수 수집이 아니라서 null이 될 수 있음, null값이 될 수 있으므로 기본키로 부적절함

대체키(Alternate Key)
-기본키로 선정되지 못한 애들

참조무결성 : 내가 참조하는 pk

pk가 먼지 fk(외래키-다른테이블 참조하는 키-unipue하지않음)가 먼지 이해하기??

테이블을 드랍하고자 할 때,
다른 테이블에서 PK를 참조하고 있는 FK가 있을 경우,
PK을 먼저 삭제해야 FK가 있는 테이블을 삭제할 수 있다.

ALTER TAVLE 테이블 이름
	DROP CONSTRAINT 제약조건이름
    
    OR
    
ALTER TAVLE 테이블 이름
	DROP PRIMARY KEY;
    

.

참고. 외래키 제약조건을 무시하고 테이블 삭제
순서에 상관없이 삭제할 수 있음
DROP TABLE STUDENT CASCADE CONSTRAINTS;
DROP TABLE SUBJECT CASCADE CONSTRAINTS;
DROP TABLE ENROLL CASCADE CONSTRAINTS;

외래키(FK)

다른 테이블과 관계를 맺기 위해서 설정하는 키(key)
외래키는 참조무결성의 특징을 가짐. pk의 도메인의 값만 가진다는 뜻
기본키와 연결됨.

만약 회원이 탈퇴하면 회원목록에서 사라짐
이 회원을 참조하고 있던 게시글목록은 참조무결성에 위배됨
이럴때는 1. 회원이 쓴 글 삭제. 2. null값을 채움.
1,2를 실행하는 쿼리문 작성

외래키와 기본키의 관계는 부모-자식 과 같다.

슈퍼키(후보키(대체키(기본키)))

외래키 제거
-- DEPARTMENT 테이블의 DEPT_NO 칼럼을 참조하는 외래키 제약조건을 제거해야
-- DEPARTMENT 테이블의 DEPT_NO 칼럼에 추가된 기본키 제약조건을 제거할 수 있음

1:M 관계

-한 쪽의 엔티티가 관계를 맺은 다른 엔티티 쪽의 여러 객체를 가질 수 있다.
-현실 세계에서 가장 흔한 관계이다.
-삼발이 있는 쪽이 M임
-실선, 점선 가능
점선이면 null값 가능
실선은

일대다 관계의 테이블 만들 때 고려해야될 것들
1. 명청
- 부모테이블 : 일(1), PK를 가진 테이블
- 자식 테이블 : 다(M), PK를 가진 테이블
2. 생성 - 순서가 있음
- 부모 테이블을 먼저 만들어야함. 자식테이블을 나중에 생성!
3. 삭제
- 생성의 역순으로.

M:N 관계

양쪽에 삼발이 표시 있음
데이터베이스 논리적구현에서는 다대다관계는 불가능함!!
기억하기 다대다관계안됨 실제로 1:M관계밖에 안됨

그래서 1:M N:1로 해줘야함

데이터베이스 생성 계획

↓ 데이터베이스 요구 분석
↓ 개념적 설계 (그림그리기, 다이어그램 만듦)
↓ 논리적 설계 (한글로 테이블 뽑아봄)
↓ 물리적 설계
↓ 보안 설계(사용자의 권한 설정) -- 안함
↓ 데이터베이스 생성 계획 및 생성

데이터베이스의 요구사항 분석


-사원번호 pk 임 밑줄있어서
-사원과 프로젝트는 다대다 관계. 그림으로 표현가능하지만 실제로는 안됨. 1:n임

데이터베이스 오브젝트 설계

[not null]primary key -- not null 생략가능...?

기본키와 기본키를 참조하는 외래키는 타입이 똑같이야 한다 . 크기까지 !
칼럼의 이름은 달라고 상관없음.

★암기하기
DDL -데이터 정의어 1. 데이터베이스 추가,수저으삭제
-데이터베이스 객채 추가, 수정, 삭제
-작업취소가 불가느임
DDL - Create, Alter, Drop, Rename

데이버 테이스 객체 (사용자, 테이블등 )
추가 : CREATE USER, CREATE TATBLE'
수정 : ALTER USER, LATIER TABLE
삭제 : DROP USER, USER, TABLE

SQL DEVELOP어쩌고 사용하기

맨 왼쪽 아래에 성공 나와야함.
비번 TIGER


NULL가능하다는 뜻

SOCTT계정이 가지고 있는 EMP테이블

CREATE TABLE -> MODELING
MODELING -> CREATE TABLE
둘 다 가능

constraint : 제약 조건

무결성 제약조건
1. not null - null값을 허용하지 않음
2. unique 중복 값을 허용하지 않음
3. primary key - 각 레코드를 구별하는 칼럼 (not null, unique)
4. foreing key - 다른 테이블

3,4가 많이 쓰임

글자길이에 변동이 많으면 varchar를 사용하고 (var:길이가 변하는 문자열)
일정하면 CHAR(SIZE)

주인이 테이블 이름 앞에 붙을 수 있음 (오너)

디벨롭퍼를 이용한 테이블 만들어보기



접속을 하고 실행을 해야함 접속 안하고 실행하면 접속할거냐는 창이 뜸

post-custom-banner

0개의 댓글