생계/DA2023. 12. 12. 17:43

1. 관계의 의미

우리가 많이 사용하는 RDBMS 의 'R' 은 Relational 이라는 관계형을 의미한다. 
데이터를 테이블형태로 구조화 하여 사용하는 것이 특징이고, 테이블과 테이블에는 관계라는 것을 설정할수있다
관계라는 것은 내가 어디에서 왔는가를 의미한다. 조인과는 다른 개념이다. 
나와 1촌인 부모-자식 에만 관심이 있고, 할아버지-손자 의 관계는 관심이 없다. 
부모없는 자식, 아버지와 할아버지가 같은 모델은 잘못된 모델이다.   

2. 관계의 구현

데이터모델링에서 관계라는 것은 논리적인 표현이고, 결국 관계란 자식의 컬럼으로 표현되며, 
물리적으로 이를 구현한 형태가 외래키 (FK) 이다. 

요즘은 참조 제약조건을 DBMS 단의 FK 로 구현하지 않는 추세인데, 이유는 아래정도가 있다.

- 개발 편의성
 이관작업시 데이터 선후 관계를 고려해야함.
 ogg는 데이터간의 관계를 따지지 않기때문에 일시적 오류 가능성
- lock 의 전이, 데드락 발생 가능성
 
정말 필수적인 테이블에만 일부 FK를 생성해서 운영하곤 한다. 
dbms 단에서 제약조건을 처리하지 않는것이지, 아예 참조제약조건을 무시하는 것이 아니다. 
application 레벨에서 참조 제약조건을 수행하는 로직을 추가해야 한다.  

논리모델에서는 관계를 표현해야 하지만 물리모델에서 FK 를 생성하는 가는 전략적 문제이다. 
다만 FK 를 생성하지 않으니 논리모델에서 관계를 생략하는 것은 덜 완성된 모델이다. 

* 관계가 생략될수 있는 경우
 - 기준엔터티
  환율엔터티의 경우, 
 - 가공엔터티
  
 - 외부엔터티 
  외부의 시스템의 참조하는 경우
   

3. 속성과 관계 누락
속성은 있지만 관계가 안그려진것 -> 속성을 보고 관계가 누락된것을 발견할수 있으니 불행 중 다행
속성표현X, 관계는 그려진 경우 -> 존재하지 않음
관계없는데 관계가 그려진 경우 


4. 식별/비식별 관계 

관계는 부모의 식별자를 물려받는 것. 
이때 부모의 식별자가 자식의 식별자에 포함이 되면 식별관계가 되고, 부모-자식 간 강한 종속성이 나타남. (부모없는 자식x)
반면, 부모의 식별자가 자식의 일반속성으로 가게되면 부모-자식간의 약한 종속성이 나타나고 부모와 독립적으로 존재할수 있다.

* 유의 사항 
- 부모의 일부만 물려받지 않는다. 
- 부모의 속성을 물려받지 않는다. 


6. 관계의 단절 필요성

조상이 많은 경우 계속해서 식별관계로 그릴경우 식별자가 비대해진다.
이런 모델에서 조인을 걸 경우 SQL 이 복잡해지는 단점이 있다.
이때 인조식별자를 만들어 비식별 관계로 만드는 것을 고려한다.
자식이 많을 경우에도 고려할수 있다. 

반응형

'생계 > DA' 카테고리의 다른 글

데이터 모델링 식별자 선정  (0) 2024.10.09
모델링에 대한 생각  (0) 2023.12.27
이력 모델  (0) 2023.12.09
엔터티 통합과 분리  (0) 2023.12.09
엔터티 유형 분류  (0) 2023.11.29
Posted by 돌고래트레이너
생계/DA2023. 12. 9. 21:49



1. 이력모델 개념

데이터 모델링에서 '이력', '이력데이터' 는 많이 사용되는 용어 인데 그 개념이 모호하거나 
이력이 아닌것을 이력이라고 부르는 등 이치에 맞지 않게 사용되는 경우가 종종 보인다. 

어느 글에서 이력은 '시간에 따라 발생하는 데이터 형식' 이라고 정의한 것을 보았는데, 
이것은 일반적인 트랜잭션과도 차이점이 없다. 

주문과 같은 일반적인 트랜잭션을 '발생내역' 이라고 한다면 변경된 속성값을 일자에 따라 관리하는 "이력" 을 '변경이력' 이라고 구별 할 수 있다. 
변경이력을 다시 정의하면 현재 유효하지 않은 과거 데이터 라고 할수 있다. 
이력모델 이라고 부를수 있는것은 '변경이력' 이고, 원천모델이 나오고 나서야 이력모델이 도출되는 것이다. 
즉, 원천모델이 없는데 이력엔터티라고 부르고 있다면 엔터티의 정의를 다시 한번 살펴볼 필요가 있다. 


2. 발생내역 vs 변경이력 

- 발생내역(트랜잭션)
  insert 의 형태 (ex. 주문, 접속ip로그..)
  pk변경, 데이터변경 

- 변경내역 (찐 이력)
  update & insert 형태 (ex. 비밀번호변경 이력)
  pk동일, 데이터변경 
 
ex) 개인경력 엔터티가 있다면..
사번
일자
소속
경력상세 
=> 시간에 따른 경력쌓인 것(발생내역)

    과거의 경력데이터가 변경된 경우(변경내역 발생) -> 변경전 데이터를 관리할거면 이력엔터티 도출, 아니면 업데이트하고 완료


3. 이력엔터티와 원천엔터티 분리 or 통합

- 분리가 원칙 
엔터티 순수성이 유지 되어야 확장이 가능 -> 원천모델이 자식엔터티가 있다면 분리가 원칙 
잘못된 데이터 하나가 전체 엔터티의 데이터 신뢰도를 떨어트림 

이력+원천 통합 모델의 자식은 일자속성은 상속되지 않는 이상한 케이스 발생 => '$'


- 통합하는 경우 
업무적으로 이력/원천데이터가 빈번히 같이 사용된다면 한곳에 사용할수도 있다 
=> 원천에 일시 속성이 추가되어 사용하는것. 성능적 관점. 반정규화 일종 

이력+원천을 통합해서 쓴다면 해당 엔터티의 이름은 '~이력' 이라고 쓰지 않는다. 
오직 이력데이터만 있는 엔터티에게만 ~이력 이라고 명명한다. 


4. 이력관리 모델 형태/유형

- 이력관리 유형(레벨)
 1) 엔터티 레벨 (스냅샷)
   *장: 변경 시점의 다른 속성 값 파악 쉽다, 설계가 쉽다. 
   *단: 공간낭비, 어떤속성이 변경되었는지 1row 만 가지고 알수없다
   원천 형상 바뀌면 이력도 변경 해줘야 함
   자식이 있다면 스냅샷 

 2) 속성 레벨
   *장: 공간 절약, 무엇이 변경된 속성인지 파악 쉽다, 원천형상에 독립적 => 컬럼추가 필요 X
   *단: 변경시점의 다른속성값 알기 어려워. 원천테이블의 이력요건 속성이 추가되면 비효율 증가 

* 추가적 방식(vertical) 
 - 종(vertical)테이블 방식
    
 - 통합이력 
   *장: 업무변경에 유연하다
   *단: 구조가 데이터가 되어 파악 쉽지않다 

 3) 속성그룹 레벨
   같이사용되는 속성들 묶어서 관리 
   *장: 비교적 공간 절약, 
  
* 원천이 종속이면 이력도 종속 
 
 
- 이력관리 형태 
  1) 점이력 
변경시점만 관리 
특정시점의 값 찾기 어려움 

ex)   
SELECT A.기관코드, A.기관거래등급
  FROM 기관정보 A, 
     ( SELECT 기관코드, MAX(적용일자)
 FROM 기관정보 
WHERE 적용일자 <='20080701'
GROUP BY 기관코드 
  )B
 WHERE A.기관코드 = B.기관코드 
   AND A.적용일자 = B.적용일자 
;   

  2) 선분이력
시작시점/종료시점 관리 
특정시점의 값 찾는 것에 유리 

SELECT 기관코드, A.기관거래등급
 FROM 기관정보 A
WHERE '20081201' BETWEEN 시작일자 AND 종료일자 
;

선분이라는 것은 시작점,끝점이 이어진 2차원 형태인데 현재의 RDB 에서는 이를 구현할수 없다
(xmltype 도 있는데 선분타입이라는 것을 못만들 이유는 없을것 같다)
편의상 시작점, 끝점을 속성으로 만들어 선분을 구현했으나(흉내냈으나) unique 제약조건 등을 걸수가 없다.
이력에서 사용하는 선분은 겹치는 지점없이 이어져야(unique 해야) 하지만 이를 DB에선 표현 못함.
겹치거나 누락되는 지점이 발생되는것을 제약조건 등으로 막을수 없다. 
 
 * 선분이력의 자식 => 상속되지 않는 시작/종료일자 속성
 pk에 컬럼추가를 할때 시작 vs 종료  무엇을 추가를 할까 => 종료 : only 성능관점 
 
  - pk결정
  부모pk + 1) 종료일자
                 2) 시작일자 
                 3) 순번

논리적으로는 부모pk속성 + 시작,종료속성 모두를 상속해야 함  
 * 중복 row 는 존재하지 않는다. => 부모에 존재한 row 는 자식에 나오지 말아야함
   

반응형

'생계 > DA' 카테고리의 다른 글

모델링에 대한 생각  (0) 2023.12.27
RDBMS 에서의 관계 라는 것  (0) 2023.12.12
엔터티 통합과 분리  (0) 2023.12.09
엔터티 유형 분류  (0) 2023.11.29
논리 데이터 모델링 절차  (0) 2021.10.16
Posted by 돌고래트레이너
생계/DA2023. 12. 9. 21:33


데이터 모델링에서 엔터티 통합과 분리는 다음과 같은 경우에 수행한다 

# 엔터티 통합

1. 데이터의 성격(주제)이 유사한 경우
2. 식별자가 동일하면서 유사한 속성이 존재하는 경우
3. 식별자는 다르지만 기초 속성이 유사한 경우

통합을 고려할 때는 다음 조건을 모두 만족해야 한다
- 별개의 요건으로 사용되지 않고 주로 같이 조회된다
- 통합해서 성능 문제를 일으키지 않는다
- 현행 데이터가 존재하며 마이그레이션하는 데 문제가 없다

# 엔터티 통합의 주요 장점

1. 확장성 향상: 비슷한 유형의 업무 발생시 스키마 변경을 최소화하면서 코드 값 등의 인스턴스 추가로 업무 수용 가능
2. 유지보수 효율성: 엔터티 개수가 감소하여 데이터베이스의 유지보수가 쉬워집니다
3. 개발 용이성: 엔터티 통합에 따른 배타 관계 해소로 액세스 경로의 효율성이 향상되고, 단순한 SQL 작성 가능
4. 모델의 단순성, 가독성 향상: 슈퍼타입, 서브타입에서 발생하는 비즈니스 요건(관계)를 명확히 표현할 수 있다
5. 조인 발생 최소화: 정보가 한 곳에 집약되어 있어 조인 발생을 최소화하여 성능 저하를 예방 가능


# 엔터티 분리

1. 속성에 대한 제약 조건을 정확하게 지정해야 하는 중요한 데이터 값을 입력해야 할 경우
2. 엔터티에 속한 속성이 많아 성능이나 관리 측면에서 좋지 않은 영향을 미칠 때
3. 사용 빈도에 따라 자주 사용되지 않는 속성이나 덜 중요한 속성을 분리할 때
 

반응형

'생계 > DA' 카테고리의 다른 글

RDBMS 에서의 관계 라는 것  (0) 2023.12.12
이력 모델  (0) 2023.12.09
엔터티 유형 분류  (0) 2023.11.29
논리 데이터 모델링 절차  (0) 2021.10.16
데이터 표준화 관련 (용어 단어 도메인 코드)  (0) 2020.01.30
Posted by 돌고래트레이너
생계/DA2023. 11. 29. 17:54

엔터티는 모델링에서 기본에 해당하고 상당히 중요한 부분이다.

 

엔코아 식 분류
 - key : 최초부터 창조된 엔터티, 주로 데이터 발생의 주체나 목적어
 - main : 업무의 주요 행위 데이터를 발생시키는 주체
 - action : 실제 발생하는 내역 업무
 
김기창DA 님 분류
 - 기준엔터티
    업무의 기준이 되는 데이터를 관리하는 엔터티
    환율·우편번호·이자율·코드 등의 업무적으로 참조되는 데이터를 관리하는 엔터티
    RI 제약이 존재하는지 숙고해야.
    ex) 기준데이터가 바뀌면 참조하던 것들이 바뀌어야 하는가? 과거시점이니 놔두는가?
       
 - 실체엔터티
   실체의 존재(Existence)와 연관된 데이터를 관리
   실체가 발생시킨 데이터를 관리하지는 않는다. (ex. 실체가 고객일때 계약, 출금 등의 이벤트)
   인조 식별자가 집합의 성격을 더 직관적, 명확하게 해줌 ex) 고객번호 
 - 행위엔터티
   어떤 실체의 업무 행위나 활동에 의해서 생긴 원천(Raw) 데이터
   특징은 주 식별자가 복잡하다. 주로 업무식별자 
   하위 엔터티가 소수로 존재, 굳이 인조 식별자를 사용할 필요X
 - 가공엔터티
    원천데이터를 가공하여 생긴 데이터를 관리하는 엔터티. 집계, 요약, 임시 데이터를 관리하는 엔터티

출처: https://dataprofessional.tistory.com/21 

반응형

'생계 > DA' 카테고리의 다른 글

RDBMS 에서의 관계 라는 것  (0) 2023.12.12
이력 모델  (0) 2023.12.09
엔터티 통합과 분리  (0) 2023.12.09
논리 데이터 모델링 절차  (0) 2021.10.16
데이터 표준화 관련 (용어 단어 도메인 코드)  (0) 2020.01.30
Posted by 돌고래트레이너
생계/AWS2023. 11. 21. 15:07

 

 

인스턴스 유형 명명 규칙

Amazon EC2는 요구 사항에 가장 적합한 유형을 선택할 수 있도록 다양한 인스턴스 유형을 제공합니다. 
인스턴스 유형 이름은 패밀리, 세대, 프로세서 패밀리, 추가 기능 및 크기를 기준으로 지정됩니다. 
인스턴스 유형 이름의 첫 번째 자리는 인스턴스 패밀리를 나타냅니다(예: c). 
두 번째 자리는 인스턴스 세대를 나타냅니다(예: 7). 예를 들어 세 번째 위치는 프로세서 패밀리를 나타냅니다(예: g). 
마침표 앞의 나머지 문자는 인스턴스 스토어 볼륨과 같은 추가 기능을 나타냅니다. 마침표(.) 뒤는 인스턴스 크기(예: small 또는 4xlarge, 베어 메탈의 경우 metal)입니다.




# 인스턴스 패밀리
C – 컴퓨팅 최적화
D - 고밀도 스토리지
F - FPGA
G - 그래픽 집약적
Hpc – 고성능 컴퓨팅
I – 스토리지 최적화
Inf – AWS Inferentia
M – 범용
Mac – macOS
P – GPU 가속
R – 메모리 최적화
T – 버스트 가능한 성능
Trn – AWS Trainium
U – 고용량 메모리
VT - 비디오 트랜스코딩
X – 메모리 집약적

# 프로세서 패밀리
a - AMD 프로세서
g – AWS Graviton 프로세서
i - 인텔 프로세서

# 추가 기능
d – 인스턴스 스토어 볼륨
n - 네트워크 및 EBS 최적화
e - 추가 스토리지 또는 메모리
z - 고성능
flex – Flex 인스턴스

 

 

참조 : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/instance-types.html#instance-type-names

 

Amazon EC2 인스턴스 유형 - Amazon Elastic Compute Cloud

Amazon EC2 인스턴스 유형 인스턴스를 시작할 때 지정하는 인스턴스 유형에 따라 인스턴스에 사용되는 호스트 컴퓨터의 하드웨어가 결정됩니다. 각 인스턴스 유형은 서로 다른 컴퓨팅, 메모리, 스

docs.aws.amazon.com

 

AWS instance class 에 따른 제약 사항 (r7g) 

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.Performance.html 기반 편집

반응형
Posted by 돌고래트레이너
생계/MySQL2023. 11. 6. 17:50

mysql 자주쓰는 함수 정리해보자 

1) 문자열 

SELECT SUBSTR(STMT,2,3)                  -- 문자열 자르기
            , CHAR_LENGTH(STMT)            -- 문자열길이
            , LENGTH(STMT)                         -- 문자열길이 (byte)
            , REVERSE(STMT)                      -- 거꾸로 출력
            , CONCAT(STMT,'AAA','!@#')      -- 문자열 붙이기 ||
  FROM (
               SELECT 'ABC테스트123!@#' STMT FROM DUAL;
              )A;

2) 날짜 

- 현재시간 

select now()                  -- sysdate
  , curdate()                    -- trunc(sysdate)
 , date_add(now(), interval 1 second)   -- 기준시간 + 1초 
 , date_add(now(), interval 1 minute)    -- 기준시간 + 1분  
 , date_add(now(), interval 1 hour)        -- 기준시간 + 1시간  
 , date_add(now(), interval 1 day)        -- 기준시간 + 1일
 , date_add(now(), interval 1 month)    -- 기준시간 + 1달 
 , date_add(now(), interval 1 year)       -- 기준시간 + 1년
 , date_sub(now(), interval 1 second)
 , date_sub(now(), interval 1 minute)
 , date_sub(now(), interval 1 hour)
 , date_sub(now(), interval 1 day)
 , date_sub(now(), interval 1 month)
 , date_sub(now(), interval 1 year)
 , date_format(now(), '%Y%m%d%H%i%s')  -- 시간을 문자열로
 , str_to_date('20241119', '%Y%m%d%H%i%s')   -- 문자열을 시간으로 
  from dual
;
  

반응형
Posted by 돌고래트레이너
생계/AWS2023. 11. 6. 11:18

 

EC2 : Elastic Compute Cloud. Iaas 로 AWS에서 제공하는 서버형태

RDS : Relational Database Service. DBaas 로 AWS에서 제공하는 DB서비스  

EBS : (Elastic Block Store) : EC2용으로 제공하는 확장 가능한 고성능 블록 스토리지 서비스. 
AMI : (Amazon Machine Image)  EC2에 연결된 모든 EBS volume 의 동시 백업
Snapshot : 선택한 EBS volume 만을 백업 

프로비저닝 : 사용자 요구에 맞게 시스템 자원을 할당, 배치, 배포 해두었다가 필요시 즉시 사용가능 상태로 미리 준비해두는것 
S3 : (simple storage service)
AWS IAM : aws Identity and Access Management)
WAP : (wireless application protocol)
WAF : (web application firewall) 

ELB : elastic load balancer
 

베어메탈 : 가상화 기술을 사용하지 않고 물리적으로 분리된 CPU, 메모리 등의 컴퓨팅 자원을 단독으로 할당 받아 사용할 수 있는 고성능 클라우드 컴퓨팅 서비스

Elastic 이란 말이 자주 나오는데 찰랑이는 머릿결로 유명한 카피문구 "엘라스틴 했어요" 라는 말처럼

탄력있고 유연하게 서비스를 제공한다는 것이 클라우드 컴퓨팅의 가장 큰 레거시 환경과의 차이점이다. 

blue-green-deployment (블루그린 배포) : AWS에서 제공하는 무중단 배포 기법 (blue : product / green : staging)

cut-over : 신규 시스템으로 전환

리전(Region) : AWS 를 서비스 하는 단위 지역  ex) 서울

AZ (Availability Zone) : 가용영역, 하나의 리전 내에 위치한 IDC  ex) seoul 리전의 목동, 일산 등

Edge location : AWS의 CDN 서비스인 CloudFront 를 위한 캐시서버들의 모음

반응형
Posted by 돌고래트레이너
생계/MySQL2023. 10. 23. 18:01

mysql 에서 DB정보들 확인하는 법 

1) TABLES  
- show tables from dbname like '%ABC' => 테이블 리스트 
- show create table TABLE_NAME; => DDL 확인
- show columns from TABLE_NAME; == desc TABLE_NAME
- show table status from dbname like '%ABC' => table info
 * 참조제약조건
 select constraint_name, table_name
   from information_schema.referential_constraints
  where constraint_schema='SCHEMA_NAME'
    and referenced_table_name='TABLE_NAME';


2) USER 
- select * from mysql.user => 유저리스트 
- show grants for 'user'@'ip'; => 권한 확인 

3) DB 
- show variables like '%server%'
- select database(); => 현재접속 DB
- select user();    => 현재접속 user 
- select version(); => 버전정보 == show variables like 'version'.
- show processlist => select * from performance_schema.processlist;

- show events => select * from information_schema.events;

 

반응형
Posted by 돌고래트레이너
생계/Oracle2023. 9. 20. 15:01

1) test 유저 생성

create user test identified by "Passw0rd";
grant connect to test;

2) wallet 용 tns alias 추가 
cd $ORACLE_HOME/network/admin
vi tnsnames.ora

WAL_TEST = 
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xx.xx.xxx)(PORT=1521))
)
(CONNECT_DATE=
(SERVICE_NAME=DFS)(SERVER=DEDICATED)
)
)


3) conn script 

cd /home/oracle/

-- vi p_test.sql
conn test/"Passw0rd" @WAL_TEST
show user;
select count(*) from all_objects;
exit;

-- vi np_test.sql
conn /@WAL_TEST
show user;
select count(*) from all_objects;
exit;


4) make wallet

-- wallet 저장 디렉토리 생성
mkdir $ORACLE_HOME/network/admin/wallet

-- wallet 생성, wallet 패스워드 입력
orapki wallet create -wallet "wallet 디렉토리" -auto_login_local

-- credential 생성, alias, 계정/비번 wallet 패스워드 입력 
mkstore -wrl "wallet 디렉토리" -createCredential WAL_TEST test Passw0rd

=> wallet 비밀번호 입력 

-- sqlnet.ora 에 wallet dir 추가 

cd $ORACLE_HOME/network/admin

vi sqlnet.ora

WALLET_LOCATION=
(SOURCE=
(METHOD=FILE)
(METHOD_DATA=
(DIRECTORY= "wallet 디렉토리")
))

SQLNET.WALLET_OVERRIDE = TRUE
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_VERSION = 0

5) 실행

cd /home/oracle/

ss
@p_test

@np_test


-- ### wallet 관리 #######

select *
  from v$encryption_wallet
;


-- credential list 확인 

mkstore -wrl "wallet 디렉토리" -listCredential


-- credential list 삭제 
mkstore -wrl "wallet 디렉토리" -deleteCredential WAL_TEST


-- credential 비번 수정 
mkstore -wrl "wallet 디렉토리" -modifyCredential WAL_TEST test pass1234

-- wallet 비번 수정 
orapki wallet change_pwd -wallet "wallet 디렉토리" -oldpwd "Passw0rd" -newpwd "oracle123"


-- wallet 삭제 
rm *wallet*

반응형
Posted by 돌고래트레이너
생계/OERR2023. 7. 27. 17:52

오라클 인스턴스 재기동시 alert log 에 여러 내용들이 찍히는데 

patch 정보도 같이 올라온다. 이때 temp 사이즈가 너무 작으면 patch 정보 못담아서 에러가 나기도 한다. 

보통 적당하게 temp 사이즈를 잡기 때문에 이부분에서 에러날일이 없지만 테스트 용으로 복사하면서 템프를 너무 작게 잡을경우 발생할수 있다 

 

반응형
Posted by 돌고래트레이너