반응형

전체 글 287

[DB] 무결성 제약 조건

개요 무결성 제약조건이란, 일관된 데이터베이스 상태를 정의하는 규칙들을 묵시적 또는 명시적으로 정의한 것이다. DB가 갱신될 때, DBMS가 자동적으로 조건을 검사하므로 응용 프로그램들은 조건을 검사할 필요는 없다. 목록 도메인 제약조건 1. 각 애트리뷰트 값은 원자값이어야 한다. 2. 애트리뷰트 값의 디폴트 값, 가능한 값들의 범위 등을 지정할 수 있다. 3. 데이터 형식을 통해 값들의 유형을 제한하고, CHECK 제약 조건을 통해 값들의 범위를 제한할 수 있다. 위의 예시에서 ID 애트리뷰트는 int로 유형을 제한, 또한 NULL일 수 없다. Age 애트리뷰트는 데이터 형식과 CHECK 제약 조건을 통해 18 이상의 정수로 범위를 제한했다. CHK_Person처럼 여러 개의 애트리뷰트에 걸쳐 도메인 ..

CS/DB 2022.03.18

[DB] 릴레이션 키

개요 릴레이션에서 키란, 각 튜플을 고유하게 식별할 수 있는 하나 이상의 애트리뷰트들의 모임이다. 슈퍼 키, 후보 키, 기본 키, 대체 키, 외래 키가 있다. 슈퍼 키 한 릴레이션 내의 특정 튜플을 고유하게 식별하는 하나의 애트리뷰트 또는 애트리뷰트들의 집합이다. 튜플들을 고유하게 식별하는데 꼭 필요하지 않은 애트리뷰트들을 포함할 수 있다. 후보 키 각 튜플을 고유하게 식별하는 최소한의 애트리뷰트들의 모임이다. 슈퍼 키와의 차이점은 후보 키는 최소성을 만족해야 한다는 것 후보 키도 두 개 이상의 애트리뷰트로 이루어질 수 있다. 이 경우 복합 키라고도 부른다. ex) 수강 릴레이션의 학번-과목번호는 재수강이 없는 한 후보 키가 될 수 있다. 위 그림에서 학번, 과목번호는 같은 값이 여러 개 존재 할 수 있..

CS/DB 2022.03.17

복잡도 함수 표기법

빅($O$) 표기법 정의 : 점근적 상한 어떤 함수 $g(n)$이 $O(f(n))$에 속한다는 말은 $n$이 커짐에 따라 $cf(n)$보다는 작은 값을 가지게 된다는 의미 따라서 $g(n)$은 $cf(n)$에 비해 좋다(빠르다)라고 할 수 있다. 즉, 어떤 알고리즘의 시간복잡도가 $O(f(n))$이라는 것은 입력 $n$에 대해 알고리즘의 수행시간이 늦어도 $cf(n)$은 된다는 말이다. (점근적 상한) 알고리즘의 수행시간이 $cf(n)$보다 느릴 수 없다는 말과 같다. 오메가($\Omega$) 표기법 정의 : 점근적 하한 어떤 함수 $g(n)$이 $\Omega (f(n))$에 속한 다는 말은 $n$이 커짐에 따라 $cf(n)$보다는 큰 값을 가지게 된다는 의미 따라서 $g(n)$은 $cf(n)$에 비해 ..

알고리즘/이론 2022.03.16

[DB] 트랜잭션

개요 트랜잭션이란, DBMS에서 데이터베이스의 상태를 변경시키는 상호작용의 단위, 또는 일련의 연산들을 뜻한다. 성질 1. 원자성(Atomicity) 트랜잭션 연산은 DB에 전부 반영되든지, 전혀 반영되지 않든지 둘 중 하나만 해야함. 모든 명령이 완벽히 수행되어야함. 만약 한 명령이라도 수행 중 오류가 발생하면 지금까지 실행했던 트랜잭션 전부가 취소 되어야함. 2. 일관성(Consistency) 트랜잭션 실행이 성공하면, 언제나 일관성 있는 상태로 변화해야 함. 시스템이 가지고 있는 고정요소가 트랜잭션 수행 전 / 후 상태가 같아야 함. 3. 독립성(Isolation) 한 트랜잭션 실행 중에 다른 트랜잭션 연산이 끼어들 수 없음. 수행 중인 트랜잭션이 완전히 종료될 때 까지, 트랜잭션 끼리 서로를 참조..

CS/DB 2022.03.15

[C++] 깊은 복사와 얕은 복사

기본 복사 생성자는 멤버 대 멤버를 복사한다. 이러한 방식은 "얕은 복사"라고 한다. 힙 영역의 메모리 공간을 참조할 때 얕은 복사의 문제가 발생한다. 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 31 32 33 34 35 36 37 38 39 40 41 #include #include #pragma warning(disable:4996) using namespace std; class Person { private: char* name; int age; public: Person(const char* myName, int myAge) { int len = strlen(myName) + 1; name = ..

언어/C++ 2022.03.08

Hash Table

개요 Hash Table은 Hash 함수를 사용해 key - value를 저장하는 자료구조이다. Hash 함수는 임의의 길이의 값을 고정된 크기의 값으로 변환해주는 함수이다. 위의 그림은 사람의 이름(key)를 hash 함수를 통해 두자리 숫자(index)로 변환한 뒤, 해당하는 bucket에 전화번호(value)를 넣어주는 예시이다. 일반적으로 hash Table은 탐색, 삽입, 삭제에 O(1)의 시간복잡도를 가진다. key에 해당하는 value를 해시 함수로 구한 index로 바로 찾을 수 있기 때문이다. 하지만 적재율이 1 초과(키의 개수가 Hash table의 크기보다 클 경우)될 경우에는 반드시 충돌이 발생하게 된다. 충돌이 발생하면, 최악의 경우 O(n)의 시간복잡도를 가진다. 따라서 hash..

CS 2022.03.04

[Unity] Image의 Image Type

유니티의 이미지 Type 종류에는 4개가 있다. Simple 이미지를 그대로 보여준다. 옵션 Use Sprite Mesh - 그냥 사각형으로 그릴지, 그림에 형태에 맞는 영역으로 그릴지를 결정 Preserve Aspect - 원본 비율을 지켜서 그릴지 결정. Sliced 원본 이미지의 Sprite Editor에서 위의 초록색 점과 같이 영역을 정해줄 수 있다. 이 영역 밖의 이미지는 확대시에 해상도를 그대로 유지한채 그린다. 즉, 중간 부분을 이용해 남는 부분을 채운다. 옵션 Fill Center - 중간 부분을 채울지 말지 결정 Pixels Per Unit Multiplier - 영역 밖의 이미지를 그릴 때의 픽셀의 크기 결정 (1이면 그대로, 작아지면 크게, 커지면 작게) UI 팝업(패널)에 특히 유..

게임 엔진/Unity 2022.03.01

[SourceTree] Merge와 Rebase

한줄 요약 : Rebase를 잘 활용하면 SourceTree의 History를 깔끔하게 관리할 수 있다. Merge의 문제점 여러 사람이 동시에 작업한 경우에 History가 복잡해진다. 사람이 많아지면 많아질수록 그 정도가 매우매우 심해진다. 실제 내역... Branch가 어떻게 나뉘고 합쳐졌는지 알아보기 매우 힘들어졌다. 의미 있는 History를 위해서는 Rebase를 시기적절하게 사용해 줄 필요가 있다. Merge와 Rebase의 차이 출처 : https://geukggom.tistory.com/18?category=883361 이렇게 커밋 2를 분기로 해서 master / testBranch가 나뉘었다. testBranch를 master에 merge해주면? 우리가 일반적으로 아는 것처럼 커밋이 ..

카테고리 없음 2022.02.15
반응형