- Database
- 동시에 여러사람들이 정보를 공유하고 사용할 목적으로 만든 집합체
- 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고 구조화 한 것.
- 과거
- 프로그램 1개당 데이터 파일 1개 형태로 존재.
- 데이터가 갱신될 때마다 프로그램을 변경하거나 갱신해야하는 단점 발생.
- 데이터 파일 형태로 존재하여 데이터를 관리하는데 불편함이 많음.
- 현재
- 다수의 프로그램이 하나의 데이터 베이스를 사용하여 데이터의 변화에도 프로그램을 수정할 필요가 없음.
- 다수의 유저가 사용하더라도 동일한 데이터를 가지고 사용할 수 있어 동시성이 좋음.
- 데이터 관리가 용이함.
- RDB(Relational Database Management System ) = RDBMS
- 관계형 데이터 베이스.
- 관계를 기반으로 한 DB 개체의 내부 관계가 아닌 외부의 관계를 적용한 것.
- 즉, 테이블과 테이블 사이의 관계가 맺어지는 DB형태.
- 종류
- Oracle
- Mysql
- DB2
- Marina DB
- NoSQL ( Not only SQL )
- RDB와 다르게 Table - Column 과 같은 스키마 개념이 없다.
- 즉, 데이터 관계와 정해진 규격이 없다.
- 단순 검색 및 저장 작업에 매우 최적화된 저장 공간이다.
- 관계 정의가 없어 join이 불가능하다. 서로의 관계를 정의할 수 없다.
- BigData의 발전에 있어서 Hadoop System과 함께 발전해 나가고 있는 새로운 DB의 유형이다.
- RDB vs NoSQL
- 안전하고 현존하는 가장 인기있는 DB인 RDB를 두고 NOSQL이라는 새로운 DB형태가 나왔느냐? 모든 것은 돈! 비싸다.
- RDB는 가격이 비싸다. Unix 라는 운영체제를 기반을 둔 서버를 활용해야 한다. : Nosql 등장 배경 1
- Scale Up : 뛰어난 성능을 지속적으로 업그레이드 가능한 서버를 계속 업그레이드 하는 형태. ( 하나의 서버 )
- 문제점 - 얼마까지 업그레이드를 해야하는지 예상할 수가 없다. 예상한다고 하더라도 고가의 장비들이라 적용하기 힘듬.
- Scale Out : 여러대의 서버를 네트워크 형태로 분산하여 하나의 데이터베이스 인 것처럼 활용하는 방식
- ETL vs SAO : Nosql 의 등장 배경 2
- ETL ( Extract : 추출 , Transform : 변환, Load : 적재 )
- ETL 순으로 정형화된 데이터를 저장한다.
- 첫 데이터 구조를 잘해놓지 않으면 또 다시 모델링을 적용해야한다. 재구축은 비용 및 시간을 엄청나게 소요한다.
- 구조화되지 않은 데이터 즉, 마구잡이로 넣어놓을 경우 비싼 DB가격으로 인해 비용은 물론, Stroage 가격이 많이 요구된다.
- 재활용성이 떨어진다.
- SAO (Stream : 생성 Acquire : 쌓기 Organize : 조직화)
- SAO 순으로 비정형화된 데이터를 저장한다.
- 데이터 통으로 저장되어있어 데이터 재활용성이 높다.
- Hadoop 시스템 적용으로 인해, 저렴한 가격으로 서버를 구성할 수 있다.
- Table : Entity 라고도 표현함. Instance 의 집합이라고도 함.
- Row : Tuple, Instance 라고 표현함. 데이터를 저장할 때 각 컬럼 attribute의 집합체. 한 Set으로 보면 될 듯.
- Column : attribute, 데이터 set의 각각의 데이터에 대한 속성 또는 Head로 생각하면 될 듯. 사과의 크기, 색, 원산지와 같은 의미.
- Ex ) 사과 Table
각각의 Attribute 명은 크기, 색, 원산지, 가격 이라는 속성을 가진다.
사과 Table
idx 크기 색 원산지 가격 ( Attibute )
1 10 빨강 한국 3,000 (Row, Instace )
2 12 노랑 중국 3,00
3 15 초록 미국 3,500
4 9 검정 일본 2,000 - 데이터 모델링
- 모든 시스템의 뿌리 : 모델링이 된 모델을 되돌릴 경우 프로젝트 전체가 흔들릴 수 있다.
- 관계
- 식별자 :
- UID( Unique IDentifier )
- 하나, 혹은 하나 이상의 Attribute 로 구성.
- 최소한의 Attribute로 구성하는 것이 좋다.
- 반드시 하나 이상의 UID를 가져야한다.
- Table에서 Select할 경우 식별자 하나로서 검색이 가능한 Attribute로 구성.
- Primary Key : UID를 얘기한다. ( 부모에게서 상속받지 않은 Key )
- Foreign Key : 관계 속성, 부모에게 상속받은 속성 )
- 식별 : 부모의 식별자를 식별자로 상속받고 자신의 식별자 또한 포함한다. ( 부모의 식별자만을 받을 경우 그냥 같은 테이블에 두는 것이 낫다. 나눌 필요도 없고 )
- 비식별 : Primary Key 이 외의 관계, 자신의 일반속성에 부모의 식별자를 가지고 있는 것.
- 수업시간에 많이 물어보던 질문 ( 조원들 )
- 필수 vs 선택
- 필수 : 데이터 모델링에서 반드시 포함한다. 또는 1개 이상의 정보를 포함한다. 와 같은 단어가 있을 경우 필수 항목으로 설정
- 선택 : ~ 하고, 하지만 과 같이 확실하게 표현되지 않은 부분에 있어서는 선택으로 표시한다.
- 위와 같은 얘기가 없더라도 주문과 주문상세와같이 주문상세는 주문이 없을 경우 생성이 될 수가 없는 엔티티이다. 그러므로 주문상세는 반드시 주문정보를 포함하고 있어야 한다. 주문 또한 주문상세를 반드시 포함하고 있어야 한다. 물론, 위와 같은 경우와 다르게 카드 계좌와 같은 관계에있어서 카드는 반드시 계좌정보를 포함하고 있어야하지만, 계좌는 카드가 있을 수도 없을 수도 있는 부분이기 때문에 선택으로 표시할 수 있다.
'BIGDATA > 데이터 모델링 & SQL' 카테고리의 다른 글
#04. MySql Sub Query Limits 적용. (0) | 2016.09.29 |
---|---|
#03. SQL JOIN 그림. (0) | 2016.06.30 |
#2. SQL 기본 [ USER 생성 및 수정, 데이터 타입 ] (0) | 2016.06.26 |
#0. 데이터 및 사용자 생성 [ 실습 데이터 ] (0) | 2016.06.26 |