T'SPACE

다채로운 에디터들의 이야기

728x90
반응형

컴퓨터공학/데이터베이스 DB 15

데이터 베이스 정규화 Normalization

Schema Decomposition 위 이미지는 Schema Decompositon의 예제이다 예상하시다 시피, 스키마를 분해하는데에는 엄청나게 많은 방법이 있다. 그러면 많은 방법들 중, 좋은 분해는 어떻게 해야하냐? Minimze RedundancyAvoid Information Loss (Lossless-join)Preserve the FDs (Dependency Preserving)Ensure good query performance위 조건들을 만족 시키는게 이상적인데 더 자세하게 살펴보자 Lossless-JoinsInformation Loss위와 같이 테이블을 분해하면, 원본 테이블로 복구하는 것은 불가능하다즉, 정보 손실이 일어난 샘이다 그래서 정보 손실이 없는 Join을 수행하려하는데Inf..

데이터 베이스 설계 이론 Design Theory

데이터베이스 SQL문도 공부하느라 정신 없는데 설계이론 까지 공부해야하느냐? 아래 시나리오들을 살펴보자 다음은 제대로 설계되지 못한 데이터베이스의 예시이다위와 같이 Student, Course, Room 이 있는 테이블이 있다 하자예시에는 한개의 수업만 있지만 여러수업이 있고 여러수업이 다 한 강의실에서 강의를 하면Redundant Storage, 쓸모 없는 저장 공간을 차지하게 된다 Update Anomaly수업 한개의 강의실 하나를 업데이트하면 Inconsistent 한 Data를 가지게 된다 Insert Anomaly 또한 한 강의에 대한 정보를 입력하려하는데위와 같이 Student에 데이터가 없으면 테이블에 Tuple을 추가할 수가 없다. Delete Anomaly한 강의에 또한, 모든 학생들이 ..

데이터 베이스 권한 Authorization

DB에서느 모든 유저들이 아무짓이나 하도로 허락되지 않는다 특정 유저들은 특정 권한을 가지며 이걸 privilege라고 부른다 이러한 privilege는 Database Administrator (DBAs)들로 부터 부여된다 GRANTselect/insert/update/delete/all 위 내용들이 유저들에게 주어질 수 있는 권한들이다 아래와 같은 문법으로 부여 가능하다grant update (budget) on departmentto faculty;SelectRelation내 Tuple들을 Read 할 수 있는 권한을 주는 Authorization UpdateRelation내 아무 Tuple을 Update할 수 있도록 하게 해주는 Authorization-> 그러나 모든 Tuple에게 Update권..

데이터베이스 Transaction 트랜잭션

Transaction(TXN)은 한개 이상의 Operation들의 Sequence이다 (Read or Write) 왜 이런 Transaction의 정의가 필요하나?실제 현실에서는어떤 일은 일어나거나 안일어난다 그 중간은 없다 내가 화나서 친구를 한대 때리고싶다 치자화나서 참으면 내가 안때린거다1대를 때리거나 안떄리거나이지, 0.5대를 때릴 수는 없다0.5배의 힘으로 때리는건.... 그것도 1대다 ㅋㅋㅋㅋ 그래서 프로그램에서는 여러 statement들을 묶어서 Transaction으로 만들 수 있다 START TRANSACTION; UPDATE Bank SET amount = amount - 100 WHERE name = 'bob'; UPDATE Bank SET amount = amount +100 W..

데이터베이스 제약조건 Integrity Constraints

Integrity Constraint는 데이터베이스에 실수로 피해를 주지 않게 만들어 놓은 제약조건들입니다 -> 데이터 일관성 Data Consistency를 유지하기 위함이죠 그래서 실생활 예시들로는- 은행 계좌는 잔고가 0원 이상이여야한다- 은행 직원은 시급이 5000원 이상이여야한다- 고객들의 번호 형식은 000-0000-0000 이여야 한다 등이 있다 그래서 제약조건은 크게 2가지로 분류 할 수 있는데요 한 Relation을 대상으로:not nullprimary keyuniqueCheck(c) c:condition여러 Relation들을 대상으로foreign keys그래서 복합적으로 활용되는 SQL 코드를 확인해보면CREATE TABLE employees( id INT, first_name VAR..

데이터베이스 뷰 View

데이터베이스에서는 모든 유저가 아무 데이터나 접근하게 허락하는 것은 좋은 구조가 아닙니다기밀내용이 있을 수도 있거나단순하게 일반 유저들에게 너무 데이터가 많아 복잡할 수도 있습니다그래서 예를들어 누군가 강사의 성함이랑 부서를 알고싶어하지만굳이 강사의 급여를 공개할 필요가 없을 때 에는아래처럼 SELECT문을 사용하면 되는데Select id, name, dept_namefrom instructor;-> 실제 테이블 (relation)이 아닌 가상의 relation은 view라고 합니다 하지만 실제로 View를 어떻게 정의하는지 알아볼까요CREATE VIEW V AS  이 형식의 SQL로 하면되는데 위의 시나리오 같은 경우 어떻게 되는지 봅시다create view faculty asselect id, nam..

전공생의 데이터베이스 수업 수강 전 SQLD 합격 후기

SQLD (SQL Developer) 자격증 안내: 준비부터 합격까지 완벽 가이드​안녕하세요! SQLD (SQL Developer) 자격증에 대한 정보와 준비 방법을 자세히 소개해드리겠습니다.SQLD는 데이터베이스 분야에서 중요한 자격증으로, 많은 분들이 취득을 고려하고 계십니다.이 글에서는 SQLD의 개요부터, 준비 방법, 그리고 유효 기간, 그리고 제가 어떻게 합격했는지까지 모든 것을 다루어보겠습니다.​SQLD란 무엇인가요?SQLD (SQL Developer) 자격증은 SQL을 활용하여 데이터베이스를 설계하고 운영하는 능력을 검증하는 자격증입니다. SQLD 자격증을 취득하면 데이터베이스에 대한 이해도를 높일 수 있으며, 데이터 관련 업무에 필요한 기본적인 역량을 증명할 수 있습니다.​SQLD 시험 정..

Correlated Subquery 상관 서브쿼리

서브쿼리 SubqueryDML의 서브쿼리DELETE서브쿼리는 WHERE 절에서 사용될 수 있습니다.DELETE FROM ... WHERE ... 예시)강사의 평균 급여보다 낮은 급여를 받는 모든 강사 삭제 DELETE FROM instructorWHERE salary  스칼라 Scalar 서브쿼리문제: 일부 튜플이 삭제되면 평균이 변경됨→ 하지만 SQL은 먼저 평균을 계산하고 그 값과 비교합니다INSERTR에 튜플 삽입원래는 다음과 같습니다INSERT INTO R VALUES (attributes)R에 튜플을 삽입하기 위해서브쿼리를 사용하면INSERT INTO R subquery삽입할 일부 튜플을 관계에서 찾기 위해 UPDATE서브쿼리는 WHERE 절에서 사용될 수 있습니다UPDATE ... SET ....

SQL 서브쿼리 Subquery

서브쿼리평균 급여보다 높은 급여를 받는 사람은 누구인가요?→ 서브쿼리를 활용할 수 있습니다 메인 쿼리: 어떤 직원들이 평균 급여보다 높은 급여를 받고 있나요?서브쿼리: 평균 급여는 얼마인가요?다른 쿼리 내에 중첩된 SFW 표현식더 큰 쿼리 내에 중첩된 SQL을 포함합니다외부 쿼리 - 내부 쿼리여러 절에서 사용할 수 있습니다WHERE 절스칼라 서브쿼리단일 상수를 반환하는 서브쿼리WHERE 절에서 서브쿼리를 상수처럼 사용하여 모든 연산자를 사용할 수 있습니다집합 멤버십집합 멤버십에는 IN, NOT IN, EXISTS, NOT EXISTS 연산자를 사용합니다값이 서브쿼리의 결과 관계에 있는지 확인하는 조건집합 비교집합 비교에는 ANY (SOME), ALL을 사용합니다서브쿼리의 결과 관계의 임의 값 또는 모든 ..

외부 조인과 내부 조인 Inner Join and Outer Join

JOIN 표현식다중 테이블에 대한 쿼리왜 우리는 다중 테이블을 사용할까요?단일 테이블:데이터 교환(공유)이 더 쉽습니다하지만 데이터 중복, 이상 현상, 확장성, 유연성 문제가 있습니다다중 테이블:데이터 업데이트가 더 쉽습니다각 개별 테이블에 대한 쿼리가 더 빠릅니다다중 테이블에 대한 쿼리는 다음과 같이 구현할 수 있습니다:FROM 절에 테이블을 나열동일한 이름의 속성이 있는 경우, "."을 사용→ Cartesian Product 카티션 곱(Cross join), JoinSELECT nameFROM Student, EnrolledWHERE sid = student_idCartesian Product 카티션 곱 (Cross Join)두 관계에 동일한 이름의 필드가 있는 경우, 속성 이름에 해당 속성이 원래 ..

728x90
반응형