TODO
타임어택 문제 설명 강의(9~)
DB특강(10~17?)
db연동
git 강의 2주차-1
cs 강의 (http/https)
- 데이터베이스는 한마디로 데이터의 집합.
- 데이터베이스를 관리하고 운영하는 소프트웨어를 DBMS(Database Management System)
- 다양한 데이터가 저장되어 있는 데이터베이스는 여러 명의 사용자나 응용 프로그램과 공유하고 동시에 접근이 가능.
- SQL: DBMS에서 사용하는 언어
간단하게 SQL은 틀이 잡혀있는 덜 유연한 언어, NoSQL은 틀이 잡혀있지 않아 유연한 언어- mysql naming convention 참고 링크
- DBMS 종류
- 계층형 DBMS
- 망형 DBMS
- 관계형 DMBS
- 관계형 DBMS(Relational DBMS)는 줄여서 RDBMS라고 부릅니다. MySQL뿐만 아니라, 대부분의 DBMS가 RDBMS 형태로 사용됩니다. RDBMS의 데이터베이스는 테이블(table)이라는 최소 단위로 구성되며, 이 테이블은 하나 이상의 열(column)과 행(row)으로 이루어져 있습니다.
-- 데이터베이스 생성
CREATE database sparta_test;
use sparta_test;
-- 학생 테이블 생성
CREATE TABLE student(
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(50) NOT NULL,
email varchar(50) UNIQUE
);
-- 도시 테이블 생성
CREATE TABLE city(
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(50) NOT NULL
);
-- 도시 데이터 입력
insert into city (name)
values("서울"),("도쿄"),("상하이"),("뉴욕"),("파리");
-- 학생 데이터 생성
insert into student (id, name, email)
values(1, "정지우", "wldn0229@naver.com");
-- 학생 테이블 수정 (city_id 추가)
ALTER TABLE student ADD column city_id int, ADD CONSTRAINT `fk_city_table_id` FOREIGN KEY student(city_id) REFERENCES city(id);
-- 학생 이메일 수정
update student set email = null where id = 1;
-- 학생 데이터 삭제
DELETE
FROM
student
WHERE
id = 1;
-- 전체 학생 조회
SELECT
*
FROM
student s
-- db연결 테스트 테이블
create table `user` (
id int primary key auto_increment,
name varchar(10) not null
);
select * from `user` u;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
crossorigin="anonymous"
/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
crossorigin="anonymous"
></script>
<script>
function save_user() {
let userName = $('#user-name').val();
$.ajax({
type: 'POST',
url: '/api/user/post',
data: {name: userName},
success: function (response) {
alert(response['msg']);
window.location.reload();
}
});
}
</script>
</head>
<body>
<div id = 'user'>
<input type="text" id="user-name" placeholder="이름">
<button onclick="save_user()">등록</button>
</div>
</body>
</html>
from flask import Flask, render_template, request, jsonify
from sqlalchemy import create_engine, text
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html')
@app.route('/api/user/post', methods=['POST'])
def save_user():
# userName = {'name': request.form['name']}
userName = request.form['name']
sql = 'INSERT INTO user(name) VALUES(%s)'
app.database.execute(sql, (userName)).lastrowid #실행한 테이블의 마지막 행 아이디를 가져옴.
return jsonify({'msg':'등록성공'})
if __name__ == '__main__':
app.config.from_pyfile("config.py")
database = create_engine(app.config['DB_URL'], encoding='utf-8', max_overflow=0)
app.database = database
app.run('0.0.0.0', port=5000, debug=True)
db = {
# 데이터베이스에 접속할 사용자 아이디
'user': 'root',
# 사용자 비밀번호
'password': '비공개',
# 접속할 데이터베이스의 주소 (같은 컴퓨터에 있는 데이터베이스에 접속하기 때문에 localhost)
'host': 'localhost',
# 관계형 데이터베이스는 주로 3306 포트를 통해 연결됨
'port': 3306,
# 실제 사용할 데이터베이스 이름
'database': 'sparta_test'
}
DB_URL = f"mysql+mysqlconnector://{db['user']}:{db['password']}@{db['host']}:{db['port']}/{db['database']}?charset=utf8"
개념적 모델링
: 개체와 개체들 간의 관계에서 ER다이어그램을 만드는 과정
ER모델
: 세상의 모든 사물을 개체(entity)와 개체간의 관계(relaitonship)로 표현
- 개체는 독립적인 의미를 지니고 있는 유무형의 사람 또는 사물로 개체의 특성을 나타내는 속성에 의해 식별됨. 개체들끼리 서로 관계를 지님.
- ER모델로 ER다이어그램을 만들 수 있음.
- 개체는 ㅁ, 개체의 속성은 ㅇ 그리고 개체 사이의 관계는 ◇로 표현됨.
- ER 다이어그램 연습 - https://itwiki.kr/w/ER_다이어그램
- ERD 툴 추천 - https://gitmind.com/kr/er-diagram-tool.html
ERD(개체관계도)
: 데이터와 그들 간의 관계를 사람이 이해할 수 있는 형태로 명확하게 표현하기 위해서 가장 널리 사용되고 있는 모델 개념적 모델링의 대표적인 도구
💡 정규화의 목적, 목표
중복 데이터를 없애고 관계를 단순하게 가져 간다!
제1정규화: 원자성
제2정규화: 완전 함수적 종속 (부분 종속 제거)
제3 정규화: 이행 종속 제거
정규화 연습(아래 링크를 보면서 정규화 하는법을 연습)
https://mjn5027.tistory.com/46
https://yaboong.github.io/database/2018/03/09/database-normalization-1/
https://ko.wikipedia.org/wiki/제2정규형
1단계. 누가 이 작업 할 것인지 정한다. - Issue
2단계. 각자 맡은 것을 작업한다. - Branch
3단계. 각자 작업을 프로젝트에 합친다. - merge
(경우에 따라). 작업한 내용을 리뷰하고 최종적으로 프로젝트에 반영한다. - PR 후 merge
- 프로젝트에서 issue(이슈)는 프로젝트에서 해결해야하는 문제로 아래같은 것이 있어요.
- 버그(프로그램이 원하는 대로 동작하지 않는 것)를 신고 (Bug report, 버그 리포트)
- 기능 추가 등의 프로젝트 개선 제안 (enhancement)
- 위 문제들을 해결하기 위한 작업단위
많은 걸 배우셨네요 잘 보고 갑니다