일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Java
- sql
- web.xml
- 정의
- eGovFramework
- was
- 오류
- input
- POI
- 암호화
- 과정평가형
- 함수
- Ajax
- spring
- 태그
- array
- Oracle
- eGov
- 개념
- TO_DATE
- CSS
- jQuery
- JVM
- mybatis
- controller
- html
- select
- jsp
- javascript
- json
- Today
- Total
web developer
[sql] sql, database, dbms, schema 개념 이해하기 본문
SQL
SQL (Structured Query Language)
- SQL은 Structured Query Language (구조적 질의 언어)의 줄임말로, 관계형 데이터베이스 시스템(RDBMS)에서 데이터를 관리 및 처리하기 위해 설계된 프로그래밍 언어입니다.
- SQL은 1970년대에 IBM에서 최초 개발되었으며 관계형 모델이라는 이론에서 파생된 특징을 가지고 있는데, 현재 SQL의 표준으로 ANSI SQL이 정립되었습니다.
- 각 DBMS 프로그램에서 ANSI SQL을 기반으로 개발된 개별 SQL을 사용하며 서로 근소한 차이를 보입니다.
SQL 문법
[1] DDL
- Data Definition Language, 데이터 정의 언어
- 각 릴레이션을 정의하기 위해 사용하는 언어
- conceptual schema를 정의하기 위해 사용되는 언어
- internal schema까지 정의할 수 있는 경우도 있음
- CREATE, ALTER, DROP...
[2] DML
- Data Manipulation Language, 데이터 조작 언어
- database에 있는 data를 활용하기 위한 언어
- 데이터를 추가, 수정, 삭제, 검색 등등의 기능을 제공하는 언어
- SELECT, INSERT, UPDATE...
[3] DCL
- Data Control Language, 데이터 제어 언어
- 사용자 관리 및 사용자별로 릴레이션 또는 데이터를 관리하고 접근하는 권한을 다루기 위한 언어입니다.
- GRANT, REVOKE...
오늘날의 DBMS는 DML, VDL, DDL이 따로 존재하기 보다는 통합된 언어로 존재 -> SQL
Database
데이터베이스(Database, DB)
- 전자적(electronically) 으로 저장되고 사용되는 관련있는(related) 데이터들의 조직화된 집합(organized collection)
- 여러 사람이 공유할 목적으로 체계화해 통합, 관리하는 데이터의 집합.
- 스프레드 시트와 기능은 거의 유사하지만 컴퓨터 언어로 제어가 가능하며 앱이나 웹을 통해 공유가 가능하여 전세계 누구나 데이터베이스에 접근하고 편집이 가능하다는 장점이 있습니다.
엑셀 | 데이터베이스 |
통합문서 | SCHEMA |
시트 | TABLE |
행 ex) 1,2,3 | ROW |
열 ex) A, B, C | COLUMN |
DBMS (데이터베이스 관리 시스템, Database Management System)
- 사용자에게 DB를 정의하고 만들고 관리하는 기능을 제공하는 소프트웨어 시스템
RDBMS (관계형 데이터베이스 관리 시스템)
- RDBMS 는 DBMS에 관계형(Relational) 이 추가된 것으로, 즉 쉽게 말하자면 테이블 기반의 DBMS이다.
- 스프레드시트 파일 모음
- 관계형 데이터베이스 모델에서 각 '스프레드시트'는 열(속성)과 행(레코드 또는 튜플)으로 대표되는 정보를 저장하는 테이블
- 관계형 데이터베이스를 만들고 업데이트하고 관리하는 데 사용하는 프로그램
- MySQL, PostgreSQL, MariaDB, Microsoft SQL Server, Oracle Database, ...
- 관계형 데이터베이스의 모든 테이블에는 행에서 고유하게 식별 가능한 기본 키라는 속성이 있으며, 외래 키(다른 기존 테이블의 기본 키를 참조)를 사용하여 각 행에서 서로 다른 테이블 간의 관계를 만드는 데 사용할 수 있습니다.
Schema
스키마(Schema)
- 데이터베이스(Database) 전체 또는 일부의 논리적인 구조를 표현
- 데이터베이스 내에서 데이터가 어떤 구조로 저장되는지를 나타낸다.
- 구체적으로 데이터베이스를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 등을 정의
- 사용자의 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마로 구분
- DBMS는 외부 스키마에 명세된 사용자의 요구를 개념 스키마 형태로 변환하고, 이를 다시 내부 스키마 형태로 반환한다.
three-schema architecture
- 각 레벨을 독립시켜서 어느 레벨에서의 변화가 상위 레벨에 영향을 주지 않기 위함
- 대부분의 DBMS가 three level을 완벽하게 혹은 명시적으로 나누지는 않음
- 데이터가 존재하는 곳은 internal level.
[1] 외부 스키마(사용자 뷰, user views, external views)
- 사용자의 입장에서 정의한 데이터 베이스의 논리적 구조.
- 데이터들을 어떤 형식, 구조, 화면을 통해 사용자에게 보여줄 것인가에 대한 명세를 말하며, 하나의 데이터베이스에는 여러개의 외부 스키마가 있을 수 있다.
- 특정 유저들이 필요로 하는 데이터만 표현.
- 그 외 알려줄 필요가 없는 데이터는 숨김.
- logical data model을 통해 표현.
- 일반 사용자는 SQL을 이용하여 DB를 쉽게 사용할 수 있다.
- 응용 프로그래머는 C, 자바 등의 언어를 사용하여 DB에 접근한다.
[2] 개념 스키마(전체적인 뷰)
- 전체 데이터베이스에 대한 구조를 기술.
- 물리적인 저장 구조에 관한 내용은 숨김.
- 모든 이용자가 필요로 하는 데이터를 총합한 조직 전체의 데이터 베이스로 하나만 존재한다.
- entities, data types, relationships(개체 간의 관계), user operations, constraints(제약조건), 데이터 베이스의 접근 권한, 보안 등에 관한 명세를 나타내고, 집중
- logical data model을 통해 표현.
- 데이터 베이스 관리자에 의해서 구성된다.
[3] 내부 스키마
- 물리적 저장장치의 입장에서 본 데이터베이스 구조.
- 물리적으로 데이터가 어떻게 저장되는지 physical data model을 통해 표현
- data storage, data structure, access path 등등 실체가 있는 내용 기술
- 실제로 데이터베이스에 저장될 레코드의 물리적인 구조, 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 나타낸다.
관계형 데이터베이스의 구성요소
파일 시스템 | 데이터베이스 모델링 | 관계형 데이터베이스 |
파일(File) | 엔티티(Entity) | 테이블(Table) |
레코드(Record) | 튜플(tuple) | 행(Row) |
키(Key) | 식별자(Identifier) | 기본키(Primary Key), Unique |
필드(Field) | 속성(Attribute) | 열(Column) |
- 테이블(Table) : 행(Row)과 열(Column)로 이루어진 데이터 집합을 의미. (=릴레이션(Relation))
- 행(Row) : 관계된 데이터의 묶음. 튜플(Tuple) 또는 레코드(Record)라고도 불림
- 열(Column) : 가장 작은 단위의 데이터를 의미. 필드(Field) 또는 속성(Attribute)라고도 불림
- 키(Key) : 테이블에서 행의 식별자로 이용되는 식별자
- 슈퍼 키(Super Key) : 테이블의 행을 고유하게 식별할 수 있는 속성 또는 속성의 집합 (유일성 만족O, 최소성 만족X)
- 복합 키(Composite Key) : 2개 이상의 속성(Attribute)을 사용한 키
- 후보 키(Candidate Key) : 유일성과 최소성을 만족하는 키 (각 튜플을 유일하게 식별할 수 있는 속성의 집합)
- 기본 키(Primary Key) : 후보 키에서 선택된 키 (null 값 혹은 중복 값으로 가질 수 없음)
- 대체 키(Surrogate Key) : 후보 키에서 선택되지 않은 키
- 외래 키(Foreign Key) : 서로 다른 테이블 간의 관계를 맺어주는 키 (다른 테이블의 기본키를 참조)
When Designing A Database Every Table Should Have A Single Theme.
Must Have Only One Candidate Key. Should Not Have A Surrogate Key. Natural Keys Are Better.
데이터베이스를 설계할 때 모든 테이블은 단일 테마를 가져야 합니다.
하나의 후보 키만 있어야 합니다. 대리 키가 없어야 합니다.
자연 키가 더 좋습니다. 숫자 기본 키가 있어야 합니다.
테이블이 1개로 되어 있는 경우
장점 : 보기 편함
단점 : 수정 어려움
테이블이 n개로 되어 있는 경우
장점 : 수정 편함
단점 : 보기 어려움
이를 해결하기 위한게 관계형 데이터베이스의 JOIN이다.
참고
SQL 쿼리문 실행 순서
1~4번에서 데이터를 다 가져오고 난 다음에 select절을 체크하기 떄문에 select * from 이랑 select에서 컬럼 하나만 가져온 것은 사실상 IO비용이 같다. (인덱스를 제외한 경우에 해당되는 내용)
select 절에서 alias (별칭)을 지정해 놓은 것을 group by에서는 사용할 수 없지만, order by 에서는 select 절 이후의 순서로 작동하기 떄문에 alias(별칭)을 사용할 수 있다.
'SQL' 카테고리의 다른 글
[sql] LAG, LEAD 함수 (1) | 2023.08.22 |
---|---|
[sql] GROUP BY (0) | 2023.08.20 |