티스토리 뷰
01 | sqld
오답 정리
데이터 모델링 시 유의점
데이터 정의를 데이터 사용 프로세스와 분리하여 유연성을 높여야 한다. 프로그램과 테이블 간의 연계성을 높이는 것은 안된다. 이는 업무 변경에 의해 데이터 모델이 취약하게 하기 때문이다.
엔터티 명칭
약어 사용 x, 업무에서 주로 사용되는 용어로, 단수명사, 유일하게 이름이 부여되어야 함.
ERD와 UML
관계에는 존재에 의한 관계, 행위에 의한 관계가 존재. ERD 는 이를 구분하지 않고 단일화되어 표기함.
UML 에는 연관관계와 의존관계가 존재하고 이를 점선과 실선으로 다르게 표현.
관계에 대한 설명
관계의 표기법은 관계명, 관계차수, 선택성(선택사양) 으로 이루어짐
선택사양은 필수인지 선택인지
엔터티 간 관계 도출 시의 주의사항
1. 두 개의 엔터티 간 연관 규칙이 있는가
2. 엔터티 간 정보조합이 발생하는가
3. 규칙이 서술되어 있는가
4. 연결 가능하게 하는 동사가 존재하는가
성능 데이터 모델링
분석 / 설계 단계에서 데이터 베이스 처리 기능을 트랜잭션 발생 등을 통해서 향상 시킬 수 있도록 노력해야 한다.
절차
1. 모델링 시에 정규화를 정확하게
2. 데이터베이스 용량 산정을 수행
3. 트랜잭션의 유형을 파악
4. 용량과 트랜잭션 유형에 따라서 반정규화 수행
5. 이력모델, pk fk 슈퍼타입 / 서브타입 조정 수행
6. 성능관점에서 데이터 모델을 검증.
정규화가 항상 조회 성능을 저하시키지 않는다. ex. 중복된 데이터의 제거
정규화
1차 정규화 : 테이블의 컬럼이 하나의 값을 갖도록 테이블을 분해하는 것
ex) 좋아하는 음식을 조사하는데 누군가가 두개 이상을 답했다면 이를 여러 행으로 분리
2차 정규화 : 완전 함수 종속을 만족하도록 테이블을 분해.
완전 함수 종속은 기본키의 부분집합이 결정집합이 되어서는 안된다는 것이다. 기본키 중에 특정 컬럼에만 종속된 컬럼이 없어야 하는 것.
문제에서는 관서번호에만 속하는 속성들이 존재했고 이를 분리했기에 2차 정규화라고 할 수 있음.
3차 정규화 : 기본키가 아닌 일반 열에 의존하는 열이 있다면 이를 삭제해야 함.
ex) 직원 테이블에 부서이름 컬럼이 있고 부서 테이블에도 부서 이름 컬럼이 있는 경우
=> 직원 테이블의 부서이름 컬럼을 삭제해야 함. 메모리가 낭비되기 때문에!
비절차적 데이터 조작어와 절차적 데이터 조작어
비절차적 데이터 조작어 : 사용자가 무슨 데이터를 원하는지만 명시함
절차적 데이터 조작어 : 어떻게 데이터를 접근해야 하는지도 명시.
SQL server 에서는 여러 개의 컬럼을 동시에 수정하는 것을 지원하지 않는다.
외래키
테이블 생성 시에 생성 가능
여러개 가능
null 값 가능
참조 무결성제약 받을 수 있음
* 참조무결성?
데베에 저장된 값들에 대하여 제한을 통해 데이터를 신뢰할 수 있게 함. 일관성 유지.
영역 무결성 : 한 컬럼에 대해 null 값 허용 여부와 타당한 데이터 값들을 지정.
참조 무결성 : 기본 키와 참조 키 간의 관계가 항상 유지됨.
참조되는 테이블의 행을 참조하는 참조키가 존재하는 한 삭제될 수 없고, 기본 키도 변경될 수 없음.
개체 무결성 : 테이블의 모든 행들이 유일한 식별자를 가질 것을 요구함.
개발하는 과정에서 테이블을 전부 삭제하려고 하는데, 로그를 남기고자 한다면
DROP TABLE ____ 이 아니라,
DELETE FROM ____ 을 해야 한다.
DELETE, TRUNCATE, DROP 의 구분
- DELETE는 수동 커밋, 나머지는 자동 커밋
- TRUNCATE은 undo 를 위한 데이터를 만들지 않음(자동커밋, 되돌릴 수 x) 그래서 delete보다 빠름. (delete는 undo 있음)
SAVE TRANSACTION 트랜잭션을 저장하는 경우에는 롤백을 하더라도 롤백의 시점에서 SAVEPOINT 까지만 롤백이 가능함.
NULL 조건절에서는
IS NULL 혹은 IS NOT NULL 을 써야 한다.
' ' 공백 문자열
오라클에서는 ' '를 null 로 인식하며 sql server 에서는 ' ' 공백 문자열로 인식한다.
따라서 where 를 사용할 때에도 이에 맞추어 사용해야 한다.
시간 나타내기
1/24/60은 1분이기에
1/24/(60/10)은 10분을 의미한다.
02 | 크롤링
headless chrome
#headless chrome
from selenium import webdriver
#옵션을 선택할 수 있도록
options = webdriver.ChromeOptions()
#옵션을 선택
options.add_argument('headless')
chromedriver = '/Users/jinseunghee/Documents/chromedriver'
driver = webdriver.Chrome(chromedriver,options=options)
driver.get("https://heethehope.tistory.com/")
#브라우저가 실제로 실행이 되지 않음. (띄우지 않음)
elem = driver.find_element_by_tag_name("h1")
print(elem.text)
driver.quit()
headless chrome 으로 옵션을 선택하고 실행을 하게 되면, 실제로 브라우저가 띄워지지 않고 실행이 가능하다.
이를 통해서 크롤링이 잘 이루어지지 않는 사이트들을 크롤링할 수 있다.
options.add_argument("window-size=1920x1080")
options.add_argument('User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36')
options.add_argument("lang=ko_KR")
options.add_argument("disable-gpu")
이를 위해서는 options 를 할당한 코드 아래에 위와 같이 넣어주면 된다.
window-size 는 윈도우의 사이즈를 담아 요청을 보내는 것이다.
User - Agent 는 사용자 소프트웨어의 정보를 담는 것이고, lang 은 말그대로 사용자의 언어, disable-gpu는 렌더링에 있어서 그래픽 카드를 사용할 것인지, cpu 를 사용할 것인지 선택하는 것이다. (여기서는 cpu를 선택한다는 의미이다. 그래픽 카드를 사용하면 오류가 나는 경우가 종종 있기 때문이다.)
03 | 독서
1일 1로그 100일 완성 IT지식 ~5장
'TIL - 2022' 카테고리의 다른 글
[TIL 008] 20220313 (0) | 2022.03.14 |
---|---|
[TIL 007] 20220308 (0) | 2022.03.09 |
[TIL 005] 20220304 (0) | 2022.03.05 |
[TIL 004] 20220303 (0) | 2022.03.04 |
[TIL 003] 20220302 (0) | 2022.03.02 |