SEB_BE 33일차 - ERD 설계

subimm_·2022년 10월 7일
0

코드스테이츠

목록 보기
33/83

Daily coding

// 이중 for문으로 배열의 요소인 문자열 하나씩 순회
for(int i = 0; i < arr.length; i++) {
String str = arr[i];
for(int j = 0; j < str.length(); j++) {
...
}

💡 오늘의 학습목표

  • ERD
  • SQL More

ERD 설계 (instagram)

  • 레퍼런스
CREATE TABLE `users` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `username` varchar(50),
  `password` varchar(50)
);

CREATE TABLE `posts` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `image` blob,
  `message` text,
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  `total_likes` INT DEFAULT 0,
  `total_comments` INT DEFAULT 0,
  `user_id` INT
);

CREATE TABLE `post_comments` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `comment` varchar(255),
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  `user_id` INT,
  `post_id` INT
);

CREATE TABLE `post_likes` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  `user_id` INT,
  `post_id` INT
);

CREATE TABLE `follow_follower` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `follower_id` INT,
  `user_id` INT
);

CREATE TABLE `posts_hashtags` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `hashtag_id` INT,
  `post_id` INT
);

CREATE TABLE `hashtags` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `name` char(50)
);

ALTER TABLE `posts` ADD FOREIGN KEY (`user_id`) REFERENCES `users`(`id`);

ALTER TABLE `follow_follower` ADD FOREIGN KEY (`user_id`) REFERENCES `users` (`id`);

ALTER TABLE `post_comments` ADD FOREIGN KEY (`post_id`) REFERENCES  `posts`(`id`);

ALTER TABLE `post_comments` ADD FOREIGN KEY (`user_id`) REFERENCES `users` (`id`);

ALTER TABLE `post_likes` ADD FOREIGN KEY (`user_id`) REFERENCES `users` (`id`);

ALTER TABLE `post_likes` ADD FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`);

ALTER TABLE `posts_hashtags` ADD FOREIGN KEY (`hashtag_id`) REFERENCES  `hashtags`(`id`);

ALTER TABLE `posts_hashtags` ADD FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`);

ALTER TABLE `follow_follower` ADD FOREIGN KEY (`follower_id`) REFERENCES  `users`(`id`);

🔍 SQL More

📖 데이터베이스 정규화

  • 데이터 중복(Data Redundancy)
    실제 데이터의 동일한 복사본이나 부분적인 복사본
    문제점(일관된 자료 처리 어려움, 저장 공간 낭비, 데이터 효율성 감소)
  • 데이터 무결성(Data Integrity)
    데이터의 수명 주기 동안 정확성과 일관성을 유지하는 것
  • 데이터 이상 현상(Anomaly)
  1. 갱신 이상
  2. 삽입 이상
  3. 삭제 이상

📖 SQL 종류

  • DDL
    데이터를 정의할 때 CREATE DROP 등 테이블과 같은 오브젝트 정의
  • DML
    데이터를 저장할 때 INSERT DELETE UPDATE
  • DCL
    데이터베이스에 대한 접근 권한 GRANT REVOKE
  • DQL
    정해진 스키마 내에서 쿼리할 수 있는 언어 (DML의 일부분) SELECT
  • TCL
    DML을 거친 데이터의 변경사항 수정 COMMIT ROLLBACK

SQL Advanced

  • CASE
    if문과 같은 기능
SELECT CASE
			WHEN CustomersId <=10 THEN 'GROUP1'
            WHEN CustomersId <=20 THEN 'GROUP2' // 11~20 사이인 경우 그룹2로 분류
            ELSE 'GROUP3'
         END
      FROM customers
  • SUB QUERY
SELECT CustomerId, CustomerId = (SELECT CustomerId FROM customers WHERE CustomerId=5)
FROM customers
WHERE CustomerId < 8

서브쿼리에서는 IN과 NOT IN 사용 가능
EXIST로 참 거짓 리턴

회고

드디어 다음주면 스프링 시작이다,,,살짝만 훑어봐도 너무 어려울 것 같아서 걱정이 된다. 그래도 며칠 널널해서 좋았는데ㅠㅠㅠ이제 진짜 본격적으로 공부해야된다고 생각하니 더 하기가 싫은,,미리 강의도 들었어야 했는데 공부습관은 쉽게 바뀌지 않는구나ㅎㅎ

profile
코린이의 공부 일지

0개의 댓글