본문 바로가기

분류 전체보기

(354)
JDBC를 활용한 CRUD 와 SOLID 원칙 콘솔을 활용한 간단한 퀴즈 게임 만들어 보기DB, 테이블 설계기본 데이터 입력(정규화)자바측 라이브러리 설정자바측 기능 구현 및 테스트리팩토링 1. MySQL DB, 테이블 설계-- 테이블 생성create database quizdb;use quizdb;create table quiz( id int auto_increment primary key, question varchar(500) not null, answer varchar(500) not null);desc quiz;-- 기본 샘플 데이터 입력insert into quiz(question, answer) values('대한민국의 수도는?', '서울'),('한반도의 남쪽에 위치한 나라는?', '대한민국'),('세계에서 가장 높은 산은?..
JDBC 트랜잭션 관리와 배치 처리 트랜잭션 관리(commit, rollback)트랜잭션은 여러 SQL 문을 하나의 작업 단위로 묶어주는 것을 의미한다. commit은 트랜잭션을 완료하여 변경사항을 저장하고, rollback은 트랜잭션을 취소하여 변경사항을 되돌린다.  트랜잭션의 개념과 중요성트랜잭션의 개념트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적인 작업 단위를 의미한다. 여러 SQL 문이 하나의 작업으로 묶여서 실행된다.트랜잭션은 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)의 특성을 갖는다. 이를 ACID 특성이라고 한다.원자성 (Atomicity)원자성은 트랜잭션의 모든 작업이 성공적으로 완료되거나, 전혀 실행되지 않은 상태를 보장힌다. 트랜..
제 2정규화(Second Normal Form, 2NF) 💡 제2정규형 (2NF): 1NF를 만족하며, 모든 비기본 키 속성이 전체 기본 키에 대해 완전 함수적 종속을 가져야 합니다. 즉, 기본 키의 일부에만 종속된 속성이 없어야 한다. 2NF를 만족하지 못하는 데이터 예제학생들이 수강하는 과목과 그 과목의 담당 교수에 대한 정보를 포함하는 테이블을 설계.여기서 pk는 {학생ID, 과목코드}의 복합 키이다. 수강 정보 테이블학생ID과목코드과목명담당 교수1MAT101수학김교수1SCI101과학이교수2MAT101수학김교수2ENG101영어박교수위 테이블에서 '과목명'과 '담당 교수'는 과목코드에 부분적으로 종속되어 있다. 즉, 학생ID와는 직접 적인 관련이 없다. 이는 2NF를 위반하는 데이터의 형태 이다.  2NF 문제 해결2NF를 만족시키기 위해 부분 종속성을 ..
제 1정규화(First Normal Form, 1NF) 테이블(Relation)이 제 1정규형을 만족했다는 것은 아래 세 가지 조건를 만족했다는 것을 의미한다.어떤 Relation에 속한 모든 Domain이 원자값(atomic value)만으로 되어 있다.모든 attribute에 반복되는 그룹(repeating group)이 나타나지 않는다.기본 키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야 한다. 1. 원자값이 아닌 데이터제 1정규형의 첫 번째 조건은 모든 도메인이 원자값으로 구성되어야 한다는 것원자값이 아닌 예 (수강 과목)학생ID이름수강 과목1홍길동수학, 과학2이순신역사, 미술, 음위 표에서 '수강 과목' 필드에 여러 과목이 쉼표로 구분되어 들어가 있어, 이 필드가 원자값이 아님.  2. 반복 그룹이 있는 데이터제 1정규형의 두 번째..
[MySQL] 인라인 뷰 (from절) 과 같은 값을 join으로 활용 From 절에 사용하는 인라인 뷰 활용 문제 현재 다니고 있는 매니저들의 평균 연봉 구하기select emp_no, 평균연봉 from (select emp_no, avg(salary) as 평균연봉 from salaries as sgroup by emp_no) as avg_salarywhere emp_no in (select emp_no from dept_manager where to_date = '9999-01-01');   내가 짠 코드인라인뷰, 중첩 서브쿼리를 동시 사용해서 문제를 풀었는데 위와 같은 결과 집합을 join을 활용해서 다시 만들어봤는데결과가 위 코드와 다르게 나왔다.select d.emp_no, avg(s.salary), d.to_datefrom dept_manager as djoin..
서브 쿼리 ( subquery ) 서브 쿼리 subquery란?서브쿼리(subquery)는 SQL 문장 내에서 다른 SQL 쿼리를 내포하는 구문이다. 보통 소괄호 안에 작성되며, 메인 쿼리(main query) 또는 외부 쿼리(outer query)라고 하는 더 큰 SQL 쿼리의 일부로 존재한다. 서브쿼리는 메인 쿼리에 의해 반환된 데이터를 기반으로 추가적인 조건을 적용하거나, 메인 쿼리의 조건을 정의하는 데 사용된다.  문법에 형태 살펴 보기select * from reservationwhere name in( select name from customer where address ='서울' );  서브쿼리를 사용하는 이유복잡성 감소: 복잡한 쿼리를 더 작고 관리하기 쉬운 부분으로 나누어 처리할 수 있다.재사용성: 같은 서브쿼리를 여러..
쇼핑몰과 카테고리 2단계 tb_categories 테이블Field NameData TypeDescriptionConstraintsExample Valuescategory_idINT카테고리의 고유 IDPRIMARY KEY, AUTO_INCREMENT1, 2, 3parent_idINT상위 카테고리의 IDFOREIGN KEY, NULL 가능NULL, 1category_nameVARCHAR(100)카테고리 이름NOT NULL"남성복", "팬츠", "셔츠"category_idparent_idcategory_name1NULL남성복2NULL여성복31팬츠42팬츠51셔츠62셔츠73면바지 (남성복 →팬츠 → 면바지)84면바지 (여성복 → 팬츠 → 면바지)93슬랙스 (남성복 →팬츠 → 슬랙스 )104슬랙스(여성복→팬츠 → 슬랙스 )create da..
쇼핑몰과 카테고리 1단계 tb_categoriesField NameData TypeDescriptionvaluecategory_idint카테고리 고유 ID1, 2, 3, 4,category_namevarchar(100)카테고리 이름"상의", "하의", "아우터"create table tb_categories( category_id int auto_increment primary key, category_name varchar(100) not null);insert into tb_categories(category_name) values('상의');insert into tb_categories(category_name) values('하의');insert into tb_categories(category_name) value..

728x90