본문 바로가기

IT

정규화 (1NF, 2NF, 3NF) / 비정규화 정규화 (Normalization) 데이터베이스의 테이블이 잘 만들어졌는지 평가하고, 잘 만들지 못한 테이블을 고쳐나가는 과정. 테이블을 정규형(normal form)이라고 불리는 형태에 부합하게 만들어나감. 정규화가 필요한 이유? 정규형에 부합하지 않는 테이블들은 삽입, 업데이트, 삭제 이상 현상들이 생기는 등 문제점들이 많기 때문. 정규형(Normal Form) 1NF -> 2NF -> 3NF 순서에 따라 규칙이 누적된다 2NF 는 1NF의 조건을 지키면서 2NF 에 해당되는 규칙도 지켜야되고 3NF 는 2NF의 조건을 지키면서 3NF 에 해당되는 규칙도 지켜야한다. 1NF : 나눌 수 없는 단일 값 테이블이 1NF에 부합하기 위해서는 안에 있는 모든 값들이 나눌 수 없는 단일 값 이어야 한다. 아래.. 2022. 2. 5.
카디널리티 (feat. ERM) 카디널리티 카디널리티는 두 entity type 사이 관계에서 한 종류의 entity가 다른 종류의 entity 몇 개에 대해서 관계를 맺을 수 있는지를 나타내는 개념이다. 1:1 일대일 1:N 일대다 M:N 다대다 이렇게 3가지 관계가 있다. 1:1 관계 일대일 관계는 A entity 하나가 B entity 하나에만 연결될 수 있고, 마찬가지로 B entity 하나도 A entity 하나에만 연결될 수 있는 관계를 의미 한다. 1:1 관계의 예는 법적 부부 관계, 시민과 주민등록증 관계가 있다. 1:N 관계 일대다 관계는 A entity 하나가 B entity 여러 개에 연결될 수 있고, 반대로 B entity는 A entity 하나에만 연결될 수 있는 관계를 의미한다. 1:N 관계로는 쇼핑몰 사이트에.. 2022. 2. 5.
데이터 모델 종류 (릴레이셔널 모델, ERM) 데이터 모델 데이터 모델이란, 다양한 데이터 요소들을 이해하고 사용하기 편한 형태로 정리해놓은 모형을 의미한다. 우리가 데이터를 저장하려고 하는 대상 : Entity(개체) Entity에 대해서 저장하려고 하는 특징 : Attribute(속성) Entity들 사이 생기는 연결점 : Relationship(관계) 여러 데이터 요소들에 있는 규칙 : Constraint(제약 조건) 이 네 가지 요소들을 파악한 후, 이 내용들을 발전시켜 데이터 모델들을 만드는 과정을 데이터 모델링이라고 부른다. 릴레이셔널 모델 우리에게 가장 익숙하고 가장 널리 사용되는 모델은 릴레이셔널 모델이다. 릴레이션은 데이터를 로우와 컬럼으로 정리한 테이블, 또는 표를 의미한다. Entity는 테이블, attribute은 컬럼, rel.. 2022. 2. 4.
[MySQL] ALTER TABLE (ADD, DROP, RENAME,MODIFY) 컬럼추가 하기 (ALTER TABLE , ADD) student 테이블에 칼럼을 하나 추가해 보자 테이블에 `컬럼` 추가하려면 ALTER TABLE 테이블이름 ADD 컬럼이름 데이터타입 속성 ALTER TABLE student ADD gender CHAR(1) NULL; DESC student; #student 테이블 정보 보기 결과 화면 > 컬럼명 바꾸기 (ALTER TABLE , RENAME COLUMN TO) 컬럼명을 바꿔보자 student_number -> registration_number ALTER TABLE 테이블이름 RENAME COLUMN 기존 컬럼명 TO 새로운 컬럼명; ALTER TABLE student RENAME COLUMN student_number TO registration_.. 2022. 2. 3.
[MySQL] 테이블 컬럼 정보 보기 DESCRIBE (DESC) 테이블 컬럼 정보를 한 눈에 보여주는 DESCRIBE 이런식으로 해당 테이블의 컬럼 구조, 각 컬럼의 데이터 타입, 속성을 볼 수 있다. Field : 컬럼의 이름 Type : 컬럼의 데이터 타입 Null : 컬럼의 Null 속성 유무 Key : Primary Key, Unique 속성 여부 Default : 컬럼의 기본값 Extra : AUTO_INCREMENT 등의 기타 속성 DESCRIBE를 DESC라고 줄여서 써도 된다. 2022. 2. 3.
[MySQL] 테이블 컬럼 값 생성, 수정, 삭제 (CREATE, UPDATE, DELETE) animal_info 라는 테이블 생성하기 id : Primary Key로 사용할 컬럼, 데이터 타입 : INT AUTO_INCREMENT 속성 주기 type : 동물 종류(사자, 코끼리 등), 데이터 타입 : VARCHAR, 최대 길이 : 30자 name : 동물 이름(리오, 조이 등), 데이터 타입 : VARCHAR, 최대 길이 : 10자 age : 나이, 데이터 타입 : TINYINT sex : 성별, 데이터 타입 : CHAR, 최대 길이 : 1자 weight : 몸무게, 데이터 타입 : DOUBLE feature : 특징 묘사, 데이터 타입 : VARCHAR, 최대 길이 : 500자 entry_date : 동물원에 들어온 날짜, 데이터 타입 : DATE feature .. 2022. 2. 3.
[MySQL] 데이터베이스 컬럼의 데이터타입 컬럼의 데이터타입 (datatype) 사용할 수 있는 데이터 타입은 DBMS마다 조금씩 차이가 있다. MySQL의 데이터 타입들을 살펴보자. MySQL의 데이터 타입은 일반적으로 세 가지 카테고리로 분류할 수 있다. Numeric types(숫자형 타입) Date and Time types(날짜 및 시간 타입) String types(문자열 타입) 1. Numeric types(숫자형 타입) 숫자를 나타내기 위해서 사용되는 데이터 타입. 숫자형 타입은 다시 정수형 타입과 실수형 타입으로 나눌 수 있는다. (1) 정수형 타입 말 그대로 정수값을 저장하는 타입. 여기에 해당하는 타입들은 그것이 나타낼 수 있는 정수값의 범위에 차이가 있다. 1) TINYINT : 작은 범위의 정수들을 저장할 때 쓰는 데이터 .. 2022. 2. 2.
[MySQL] 데이터베이스 생성하기 (아래 나오는 화면들은 Workbench 화면들 입니다) (Workbench : MySQL 워크벤치는 SQL 개발과 관리, 데이터베이스 설계, 생성 그리고 유지를 위한 단일 개발 통합 환경을 제공하는 비주얼 데이터베이스 설계 도구) 새로운 데이터 베이스 생성 명령문 CREATE DATABASE 데이터베이스 이름이 기 존재하지 않는 경우에 이 이름으로 생성하라 CREATE DATABASE IF NOT EXISTS DB이름 ; 데이터 베이스를 지정한 후에 테이블 만들기 버튼 클릭 USE 테이블 만들 데이터베이스 이름; 실행 후 테이블 생성 버튼 클릭 Table Name 을 지정 여기선 student 로 지정함 아래 Column Name 빨간네모 박스친 부분 처럼 빈 곳 더블클릭하면 Column Name 지정.. 2022. 2. 2.
[MySQL] Join (LEFT, RIGHT, INNER) / UNION LEFT OUTER JOIN (= LEFT JOIN) 왼쪽 테이블 기준으로 오른쪽 테이블을 합침 SELECT i.id, i.name, s.item_id, s.inventory_count FROM item AS i LEFT OUTER JOIN stock AS s #테이블에 alias 붙여줌 ON i.id = s.item_id #테이블 조인 조건 조인할 때는 SQL 문이 길어지기 때문에 테이블 이름에 alias를 붙여주는 게 좋다. RIGHT OUTER JOIN (= RIGHT JOIN) 오른쪽 테이블 기준으로 왼쪽 테이블을 합침 SELECT i.id, i.name, s.item_id, s.inventory_count FROM item AS i RIGHT OUTER JOIN stock AS s #테이블에 a.. 2022. 2. 1.
[MySQL] 뷰 (VIEW) 만들기 뷰 : 조인 등의 작업을 해서 만든 '결과 테이블' 이 가상으로 저장된 형태 일시적으로 생성한 결과 테이블을 저장해둔 것 뷰(VIEW)는 가상테이블이라고도 한다. #AS 뒤에 나오는 쿼리문의 결과 테이블을 VIEW 로 저장하라 CREATE VIEW three_tables_joined AS SELECT i.id, i.name, AVG(star) AS avg_star, COUNT(*) AS count_star FROM item AS i LEFT OUTER JOIN review AS r ON r.item_id = i.id LEFT OUTER JOIN member AS m ON r.mem_id = m.id WHERE m.gender = 'f' GROUP BY i.id, i.name HAVING COUNT(*) .. 2022. 2. 1.
[MySQL] 서브쿼리 사용법 서브쿼리 : SQL 문 안에 부품처럼 들어가는 SELECT 문 sub (하위의, 일부분의) Query (데이터베이스에 보내는 요청) 서브쿼리를 쓸 땐 괄호로 감싸줘야함 서브쿼리는 HAVING 절, SELECT 절, WHERE 절, FROM 절 등에서 사용할 수 있다. HAVING 절에 있는 서브쿼리 예시 쿼리문 > SELECT i.id, i.name, AVG(star) AS avg_star FROM item AS i LEFT OUTER JOIN review AS r ON r.item_id = i.id GROUP BY i.id, i.name HAVING avg_star 서브쿼리를 포함하는 전.. 2022. 2. 1.
[MySQL] SELECT 문 각 절들의 사용 순서, 실제 실행 되는 순서 SELECT 문의 각 절들은 먼저 써야 하는 순서들이 정해져있다. 이 순서는 반드시 지켜야 함 더 앞에 나와야 하는 순서대로 보면 1. SELECT 2. FROM 3. WHERE 4. GROUP BY 5. HAVING 6. ORDER BY 7. LIMIT 이 순서대로 사용해야 한다. 쓸 때는 위 순서대로 써줘야 하는데 실제 해석 및 실행은 아래의 순서대로 된다. FROM WHERE GROUP BY HAVING SELECT ORDER BY LIMIT 어떤 식으로 해석 및 실행되는지를 하나씩 차례대로 살펴보자 FROM : 어느 테이블을 대상으로 할 것인지를 먼저 결정 WHERE : 해당 테이블에서 특정 조건(들)을 만족하는 row들만 선별 GROUP BY : row들을 그루핑 기준대로 그루핑. 하나의 그룹은.. 2022. 1. 26.
[MySQL] 문자열 관련 함수 (SUBSTRING, LENGTH, UPPER 등) MySQL 문자열 관련 자주 쓰이는 함수 모음 SUBSTRING, LENGTH, UPPER, LOWER, LPAD, RPAD, TRIM, LTRIM, RTRIM 1. SUBSTRING 예시 쿼리문> # 회원들이 사는 주요 지역의 고유값 개수 # '서울' '경기' 등 맨 앞 2자리 추출하기 위해 SUBSTRING 사용 SELECT (SUBSTRING (address, 1, 2)) AS region_count FROM member ; # 중복제거, 고유한 값 추출 하기 위해 DISTINCT 사용 SELECT DISTINCT ((SUBSTRING (address, 1, 2))) AS region_count FROM member ; # COUNT : 말 그대로 카운트! SELECT COUNT (DISTINCT .. 2022. 1. 26.
[MySQL] GROUP BY , HAVING, WITH ROLLUP GROUP BY 칼럼들을 어떠한 조건의 그룹으로 묶어서 그룹별 집계를 보고 싶을 땐 GROUP BY를 사용 한다. GROUP BY 로 그루핑 해주고 집계함수를 사용하면 그루핑 된 각 그룹에 대해서 집계함수 들이 각각 실행된다. (GROUP BY 를 쓰지 않았을 때는 테이블 전체 row 가 하나의 그룹인 것) 예시 쿼리문 > SELECT gender, COUNT (*) AS COUNT, #COUNT (*) 는 조회 되는 row 의 개수를 구해주는 표현식 AVG (height), MIN(weight) FROM member GROUP BY gender ; 출력 결과 > gender COUNT AVG (height) MIN(weight) male 987 179 55.8 female 1523 165 41.3 예시.. 2022. 1. 26.
[MySQL] 컬럼 이름 바꿔서 보여주기 Alias (AS) 컬럼 이름 바꿔서 보여주는 것을 Alias (별명) 라고 한다. 컬럼명이 height 인데 보여줄 때 '키' 라는 단어로 보여주고 싶다면 AS 를 사용해서 명명 해주면 된다. AS 로 컬럼 Alias(별명) 붙여주기 SELECT email, height AS 키, weight AS 몸무게, weight / (height/100) * (height/100) AS BMI FROM member; (참고 : 칼럼끼리 계산은 + 더하기 - 빼기 * 곱하기 / 나누기 % 나머지 구하기 이렇게 가능) Alias 에 공백이 포함되면 작은 따옴표로 감싸줘야한다. SELECT email, height AS 키, weight AS 몸무게, weight / (height/100) * (height/100) AS 'BMI 지수.. 2022. 1. 26.
[MySQL] NULL 이 있는 로우 조회하기 NULL 은 값이 없음을 나타내는 단어다. 데이터 테이블에 값이 없는 로우가 있을 수 있다. 회원 가입할 때 선택 값으로 넣어둔 항목들은 유저가 회원 가입시 빈 값으로 두고 넘어 갈 수 있기 때문에 그 부분은 NULL 이 된다. 데이터 추출 시 NULL 인 부분들을 조회 하고 싶을 때 어떻게 조회 하는지 알아보자 IS NULL NULL 인 로우 조회 # member 테이블에서 address 칼럼이 NULL 로우들 조회 SELECT * FROM member WHERE address IS NULL; IS NOT NULL NULL 이 아닌 로우 조회 # member 테이블에서 address 칼럼이 NULL 이 아닌, 값이 있는 로우들만 조회 SELECT * FROM member WHERE address IS .. 2022. 1. 26.
[구글 스프레드시트] Filter 함수로 조건 걸어 출력하기 (Ft. 드롭다운메뉴) Filter 함수는 offset 함수 + if 함수 .. 이런 느낌.. 조건에 맞는 데이터들만 촤르르 출력해주는 기능이다. Query 함수도 조건에 충족하는 데이터들을 촤르르 뿌려주는 함수인데 Query 함수 보다 훨 간편히 쓸 수 있고 비슷한 기능을 가진 함수가 Filter 함수다. Fiter 함수를 아래와 같이 쓸 수 있다 선택한 월에 따라 해당되는 외화 값 출력 어떻게 했는지 하나씩 뜯어보자 일단 필터함수는 아래와 같이 셋팅 해서 쓸 수 있다. = FILTER ( 범위, 조건1, [조건2, …] ) = FILTER ( 데이터 테이블에서 데이터 뿌려줄 범위 설정, 데이터 뿌려줄 조건1 , 데이터 뿌려줄 조건2 ..... ) 위 그림에서 F1 : H 가 데이터 테이블이다. 여기서 F 칼럼인 '월' 로 .. 2022. 1. 24.
[MySQL] DATE 관련 SQL 함수 모음 (CURDATE, DATEDIFF 등) DATE 데이터 타입을 갖는 컬럼의 값들을 다룰 때 자주 쓰는 함수들 모음 1. 연도, 월, 일 추출 연도 : YEAR ( ) 월 : MONTH ( ) 일 : DAYOFMONTH ( ) # member 테이블에 birthday 날짜의 연도가 1998인 데이터 출력 SELECT * FROM member WHERE YEAR(birthday) = '1998'; # member 테이블에 birthday 날짜의 월이 6,7,8인 데이터 출력 SELECT * FROM member WHERE MONTH(birthday) IN (6,7,8); # member 테이블에 birthday 날짜의 일이 15일~17일인 데이터 출력 SELECT * FROM member WHERE DAYOFMONTH(birthday) BETWE.. 2022. 1. 23.
[MySQL] 대소문자 구분해서 검색하기 _ BINARY 데이터베이스의 테이블에 적용된 기본 설정 중, 문자열이 동일한지 확인할 때, 대소문자를 구별하지 않겠다고 설정 되어있는 테이블들이 있다. 이런 경우 대소문자가 달라도 알파벳만 같으면 같다고 판단이 되어버린다. 이 설정에 상관없이 대소문자를 구분해서 검색하는 방법이 있을까? 바로 BINARY 를 사용하면 가능하다. LIKE BINARY '%g%' SELECT * FROM member WHERE sentence LIKE BINARY '%g%'; #member 테이블에 sentence 칼럼에 소문자 g가 포함된 데이터 출력 SELECT * FROM member WHERE sentence LIKE BINARY '%T%'; #member 테이블에 sentence 칼럼에 대문자 T가 포함된 데이터 출력 BINARY.. 2022. 1. 23.
[MySQL] % ' " _ 문자로 쓰고 싶을 땐 이스케이핑 원래 특정 의미('임의의 길이를 가진 문자열')를 나타내던 문자(%)를 그 특정 의미가 아니라, 일반적인 문자처럼 사용하고 싶을 땐 이스케이핑(escaping) 을 해야한다. 어떤 문자가 그것에 부여된 특정한 의미, 기능으로 해석되는 게 아니라 그냥 단순한 문자 하나로 해석되도록 하는 것을 이스케이핑이라고 한다. % 는 'LIKE에서 쓰이는 표현식'으로 , ‘임의의 길이를 가진 문자열’을 의미하는데 그냥 문자로 쓰고 싶다면 % 앞에 역슬래쉬(백슬래쉬, backslash) 기호를 붙여주면 된다. 백슬래쉬는 키보드상에 엔터키 위에 원화 표시(\) 되어있는 키다. SELECT * FROM member WHERE sentence LIKE '%\%%' #member 테이블에 sentence 칼럼에 문자 % 가 포.. 2022. 1. 23.
[MySQL] WHERE 절 _ 기본적인 조건 표현식 모음 (LIKE, BETWEEN, IN 등) 1. 부등호, 등호 ( =, >=, , = 27 ; SELECT * FROM member WHERE age 27 ; SELECT * FROM member WHERE age < 27 ; member 테이블에서 age 칼럼 값이 27과 같지 않다 SELECT * FROM member WHERE age != 27 ; SELECT * FROM member WHERE age 27 ; 2. 사이의 값 BETWEEN A AND B member 테이블에서 age 칼럼 값이 18 부터 34 .. 2022. 1. 23.
CSS 선택자 선택하는 방법 - 태그, 아이디, 클래스, 속성 CSS 선택자를 이용해서 애널리틱스, 구글 태그매니저 등에서 웹페이지 내의 특정 위치를 지정해야 하는 경우들이 있다. 자주 쓰는 CSS 선택자들을 알아보자 1. 태그 이름 특정 태그 전체를 선택하려면 태그 이름을 사용한다. CSS 선택자 의미 li 모든 li 태그 p 모든 p 태그 2. 아이디 특정 아이디의 태그를 선택하려면, 아이디 앞에 #을 붙인다 CSS 선택자 의미 #search 아이디가 search인 태그 #top_menu 아이디가 top_menu인 태그 3. 클래스 특정 클래스의 태그를 선택하려면, 클래스 앞에 . 을 붙인다 CSS 선택자 의미 .pr 클래스가 pr인 태그 .hd 클래스가 hd인 태그 4. 속성 속성의 이름과 값으로 태그를 선택하려면, [name="value"] 형식으로 적는다 .. 2022. 1. 21.
[Python] 팰린드롬 palindrome 거꾸로 해도 같은 단어인지인지 확인하기 파이썬으로 Palindrome (팰린드롬) 인지 확인하기 방법 1) 제일 짧은 코드 ( 2줄로 가능 ) # 팰린드롬인지 분별해서 true or false 를 반환해주는 함수 def is_palindrome(word): return word == word[::-1] # 테스트 print(is_palindrome("네이처루")) print(is_palindrome("kyayk")) print(is_palindrome("토마토")) 실행화면 > 방법 2) 위 코드 풀어서 쓰기 def is_palindrome(word): list_word = list(word) reversed_list = list_word[::-1] if list_word == reversed_list: return "True" else: r.. 2022. 1. 21.
[Python] 데이터 시각화 Seaborn 라이브러리 (Jupyter Notebook) 데이터 시각화를 손쉽게 도와주는 Seaborn은 matplotlib를 기반으로 하는 Python 데이터 시각화 라이브러리이다. 통계 그래픽을 그리기 위한 고급 인터페이스를 제공한다. Seaborn 라이브러리에 대한 정보는 아래 사이트에서 참고! https://seaborn.pydata.org/ Seaborn 라이브러리를 이용해서 여러가지 그래프를 만들어보자 histogram box plot violin plot strip plot swarm plot scatter plot kde plot lm plot [ 예시 1 ] body.csv 를 다운받아서 Jupyter notebook 루트 폴더에 data 폴더를 만들어 거기에 넣어둔다 쥬피터 노트북에 아래와 같이 코드를 작성한다. import pandas as.. 2022. 1. 20.
728x90
반응형