테이블

- 데이터는 테이블에 저장
- 테이블은 행과 열로 구성
- 모든 행에는 동일한 수의 열이 존재
- 각 열은 데이터 유형으로 정의
엔티티(Entity)

- 엔티티는 논리 수준에서의 개념이고, 테이블은 물리 수준에서의 개념
- 즉, 엔터티는 실제 항목 또는 가상 항목을 나타낼 수 있음
- 엔터티는 상호작용을 가능하게 하는 관과(relationship)으로 연결 가능
- 예) 고객이 제품을 주문
정규화

- 스토리지 감소
- 데이터 중복 방지
- 데이터 품질 향상의 방향
관계

- 기본 키 및 외래 키는 관계를 정의하는 데 사용
- 데이터 중복이 존재하지 않습니다(3NF의 키 값 제외)
- 쿼리에서 테이블을 함꼐 조인하면 데이터가 검색됨
인덱스(Index)

- 더 빠른 데이터 검색을 위해 검색 쿼리를 최적화
- SQL 문에서 데이터를 검색하기 위해 읽어야 하는 데이터 페이지의 양을 줄임
- 쿼리에서 테이블을 함께 조인하면 데이터가 검색됨
뷰(View)

- 쿼리 결과 집합을 기반으로 하는 가상 테이블
- 쿼리를 단순화 하기 위해 뷰가 만들어짐.
- 관계형 데이터를 단일 창(뷰)로 결합
SQL QUERY(Structed Query Language)
- SQL은 RDB와 함께 사용할 수 있는 표준 언어
- SQL 표준은 ANSI 및 ISO에 의해 유지관리
- 독자적인 RDBMS 에는 T-SQL, PL/SQL, pgSQL과 같은 SQL의 자체 확장이 존재
SQL문의 유형
DML(Data Manipulation Language)
- 데이터 조작 언어
- 데이터를 쿼리하고 조작하는데 사용
SELECT:
테이블에서 선택/읽기
INSERT
테이블에 새 행 삽입
UPDATE
테이블의 기존 행 편집/업데이트
DELETE
테이블의 기존 행 삭제
SELECT EmployeeId, YEAR(OrderDate) AS OrderYear FROM Sales.Orders
WHERE CustomerId = 71 GROUP BY EmployeeId, YEAR(OrderDate) HAVING COUNT(*) > 1
ORDER BY EmployeeId, OrderYear;
INSERT INTO Sales.OrderDetails
(orderid, productid, unitprice, qty, discount) VALUES (10255,39,18,2,0.05)
INSERT INTO Sales.OrderDetails
(orderid, productid, unitprice, qty, discount)
VALUES
(10256,39,18,2,0.05), (10258,39,18,5,0.10);
DDL(Data Definition Language)
- 데이터 정의 언어
- 데이터베이스 개체를 정의하는 데 사용
CREATE
테이블이나 뷰와 같은 새 개체를 데이터베이스에서 만듭니다.
ALTER
개체의 구조를 수정합니다. 예를 들어 테이블을 변경하여 새 열을 추가합니다.
DROP
데이터베이스에서 개체를 제거합니다.
RENAME
기존 개체의 이름을 바꿉니다.
CREATE TABLE Mytable
(Mycolumn1 int NOT NULL PRIMARY KEY, Mycolumn2 VARCHAR(50) NOT NULL , Mycolumn3 VARCHAR(10) NOT NULL
DCL(Data Control Language)
- 데이터 컨트롤 언어
- 보안 권한 관리에 사용
- GRANT
- REVOTE
- DENY
IaaS와 Paas의 비교

| 항목 | 물리적 | IaaS | PaaS |
|---|
| 서버 위치 | 내 서버실 | 클라우드(VM) | 클라우드 |
| 관리 주체 | 전부 내가 함 | OS 이상 내가 함 | DB만 내가 함 |
| 초기비용 | 높음 | 중간 | 낮음 |
| 유연성 | 매우 높음 | 높음 | 중간 |
| 유지보수 편의성 | 낮음 | 중간 | 매우 높음 |
Azure에서 제공하는 3가지 SQL 서비스

| 구분 | 서비스 이름 | 분류 | 관리 범위 | 설명 |
|---|
| 1️⃣ | Azure VM SQL Server | IaaS (Infrastructure as a Service) | OS, DB 설정 등 대부분 사용자가 관리 | 클라우드에서 가상머신(VM)을 빌려 직접 SQL Server 설치 |
| 2️⃣ | Azure SQL Managed Instance | PaaS (Platform as a Service) | 일부 관리 자동화 (백업, 패치 등) | 온프레미스 SQL Server와 거의 동일한 기능을 제공하는 완전관리형 서비스 |
| 3️⃣ | Azure SQL Database | PaaS (Platform as a Service) | 거의 전부 Azure가 관리 | 완전한 클라우드 네이티브 단일 DB 서비스, 사용자는 데이터만 관리 |
1. Azure VM SQL Server

- 사용자가 온프레미스 하드웨어를 관리할 필요 없이 클라우드에서 SQL Server 정품을 사용할 수 있는 IaaS 솔루션
- 온프레미스 SQL SERVER와의 호환성 보장
- OS 업그레이드, 소프트웨어 업그레이드, 백업, 복제 등의 모든 작업은 고객이 관리
- 데이터베이스 당 요금이 아닌 서버 및 라이선스 요금 결제
2. Azure SQL Managed Instance

- 컴퓨팅 리소스를 미리 프로비전한 다음 미리 프로비전한 컴퓨팅 수준까지 개별 Manged Instanced 여러 개를 배포 가능
- 자동 백업, 소프트웨어 패치, 데이터 베이스 모니터링 및 기타 관리 작업
- 온 프레미스 sql server와 100% 가까이 호환
- 다른 AZRUE 서비스에서 지원됨
3. Azure SQL DB

- 사용자가 클라우드에서 관리형 데이터베이스 서버를 만든 다음 서버에서 데이터베이스를 배포하는 PaaS 제품
- 최소한의 관리 작업만 수행하면 되는 저가형 옵션
- 애플리케이션 디자인을 유동적으로 조정할 수 있는 신규 클라우드 프로젝트에 가장 적합
- 로드가 변경될 수 있는 시스템 지원
- 시스템을 다시 시작하지 않고도 빠르게 스케일 업 및 스케일 다운 가능
SQL Managed Instance Vs. SQL DB

인증 및 엑세스 제어

역할 기반 액세스 제어(Azure RBAC)
- AZURE 리소스 액세스 권한이 있는 사용자 및 이러한 사용자가 해당 리소스로 수행할 수 있는 작업을 관리 가능
- 역할 할당을 사용하여 리소스 액세스를 제어
- 역할 할당은 다음 3요소
- 보안 주체: AZURE 리소스 액세스를 요청하는 사용자나 서비스를 나타내는 개체
- 역할: 권한 컬렉션
- 범위: 액세스 권한이 적용되는 리소스 집합의 목록
읽기 전용 복제본

- 읽기 복제본은 BI 및 분석과 같은 읽기 집약적인 워크로드의 성능과 규모를 개선하는 데 도움이 됩니다.
- 주 서버와 복제본 서버 간 데이터 동기화가 지연되어도 되는 시나리오에서는 읽기 복제본 기능을 사용하는 것이 좋습니다.
- 재해 복구 계획에서는 주 서버와 다른 Azure 지역에 복제본을 만듭니다. 그러면 특정 지역에서 재해가 발생하는 경우 주 서버의 데이터 대신 복제본을 사용할 수 있습니다.
- 복제본 서버의 데이터 스토리지가 워크로드에 영향을 주지 않고 자동으로 증가합니다
MySQL DB로 memo 앱 만들기

MySQL Connector 라이브러리
- Python에서 MySQL DB에 연결하고 조작하기 위해 사용되는 도구
- Oracle에서 공식적으로 지원하는 라이브러리
- 순수 Python으로 작성되어 있어 추가 종속성이 없음
- 다른 라이브러리에 비해 속도가 느림
import mysql.connector
cnx = mysql.connector.connect(
host="127.0.0.1",
port=3306,
user="root",
password="password",
database="database_name"
)
cursor = cnx.cursor()
cursor.execute("SELECT * FROM table_name") results = cursor.fetchall()
cnx.close()
pip install mysql-connector-python