피곤핑
코딩일탈
피곤핑
전체 방문자
오늘
어제
  • 분류 전체보기
    • Kotlin & Java
    • Spring
      • Spring Security
      • Spring
    • 네트워크
    • JavaScript & Node js
    • Docker
    • Python3
    • Unity
    • 딥러닝
    • 객체지향프로그래밍
    • Error 보고서
    • 나의 이야기 & 회고
    • HTML & CSS
    • Archive
    • 독서

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • Client
  • JavaScript
  • 개발자취업
  • nodejs
  • 티스토리챌린지
  • 항해99
  • 코딩테스트준비
  • 99클럽
  • TiL
  • 오블완

최근 댓글

hELLO · Designed By 정상우.
피곤핑

코딩일탈

0925 서버프로그래밍 MSSQL_SERVER DB
Archive

0925 서버프로그래밍 MSSQL_SERVER DB

2019. 9. 25. 18:23

오늘 머먹지 - DB 설계


Feedback

 - 다른 서버에서 다이어그램을 열려할 때 꺼지는 현상이있는데 이거는 버그인걸로,,,,,

  -> 낮은 버전을 깔아도되고,,,, (트러블 슈팅 - 삽질?)

 

 - 에러메세지가 없는경우 > window > event viewer 가서 확인해보기 > 오류라고 떡하니 있음,,,,

   > DataDesigners.dll 에 문제가 있는걸로 보여짐 > + error 붙여서 구글링 해보기 > SSMS 18.1 Crashes when Opening~~~ 이게 정확히 우리가 겪고있는 현상에 대한 .... 이걸 보셈 > 근데 해결방법은 없었음..ㅎ > 원인을 모르겠음,,,, > 포기하려는 찰나에 > 새로운 다이어그램 만들기 하면 ... .일시적으로 해결되는 것을 알 수 있었음.

 

 - 어떨때 smalldatetiem을 쓰는지? 

 - 몇장을 쓰는지? TicketCount

 - RemaingTicketCount 이런식으로 긴게 사실 나을 수도 있음!

 - 한사람당 한번만 투표하게 한다면 Vote 테이블에 PlayerID, Date를 두개를 묶어서 기본키!

 

 - 누구의 말을 따라서 식당을 갔을지

 - 만약 메뉴를 통해서 투표를 하려면 메뉴의대한 중복도 처리해야하고 그 음식점에서 이 음식을 팔고있는지도 체크해야함 (도서관사례로 연결지을 수 있음 MetaBook, Book)

 

 - 코드테이블 -> 나중에 설명해주세욤

 

- 양쪾에 키가있는 1:1 관계는 사실 테이블을 합칠수도 있음

 

* 사람 테이블에서 picture를 추가하고 싶을때 그안에 있으면 데이터를 불러올때 꽤나 많은 시간이 걸림 (10000명이있을때) 그래서 이때 picture테이블을 따로 떼서 1:1 관계로 만듦 -> 이는 정규화를 거스르는일, 역정규화라고 부름

=> 이처럼 성능상의 이유로 1:1 데이터를 만듦!  

 

 - ERWin..? 

 

 - naming convention (이름규약)

Pascal : 각 단어의 첫 글자를 다 대문자로 -> StudentId (C# - 나머지)

Camel : 파스칼이랑 같은데 제일 첫글자는 소문자로 (C# - 지역변수, 매개변수)

Snake : this_is_snake (파이썬같은경우는 이렇게 씀)

 --> 셋중에 팀장님이 쓰는걸로 따라 써라! 

 --> 아니면, 그언어에서 가장 보편적으로 쓰이는 케이싱이 뭔지 찾아보고 그것을 받아들이셈

     (무엇보다 중요한건 일관성!)

 

 - 최고 존엄의 아들이 있을경우 코인같은건 필요가 없을테니까,,,, NULL값을 할수 있도록 

 

 - Vote안에 IsOK가 있으면 안됨

 1) 나는 00를 안가겠따 - 거부권을 학생테이블이 가지면 됨!

     학생 - RestaurantId를 가지면됨 (VetoRetaurant) NULL 가능

 2) 오늘만 00를 안가겠다

     Vote테이블에는 수강생수만큼 꼭 생겨야되는데 Veto는 없을수도 있다.....  -> 때문에 별개의 테이블을 만듦 (Veto)

    Veto - Date, StudentId, RestaurantId => 두개이상 VETO하고 싶으면 세개를 다 키로 

 


모두 지우고 다시 복구하는 법

 

1. 데이터베이스 > 우클릭 > 테스크 > 백업 > 경로/위치 확인 == 백업 성공

2. 과감하게 삭제

3. 복원하기

  기본을 C루트로 받았기때문에 폴더가 생겨있고 안에 BackUp이라는 폴더가있음!

  * Data 폴더안에있는 db를 복붙하면 다 잠겨있어서 안됨! 

  ex) t2.bak - 우클릭 복원 > 원본 > 디바이스(E) > 백업미디어 : 파일 > 추가

 

1. 우클릭 > 테스크 > 스크립트 생성

2. 전체데이터베이스 및 모든 데이터베이스 개체 스크립링 > 다음 > **고급** > 서버 버전에 대한 스크립트 호환 수준을 꼭 결정해주어야함!!! SQL SEVER 2017 > 스크립링할 데이터 형식 : (스키마만 -데이터구조만내보내는거) 스키마 및 데이터 > 새쿼리창에 저장 > 다음 > 다음

3. 쿼리문이 보임! 

 

* db 관리중 가장 중요한것은 매일밤 3시에 백업을 하는건데 이거를 수동적으로 할 수 는 없는것. 그렇기때문에 자동화 시켜놓아야함 이방법들은 다 구현되어있음!! - 할수있다는것만 알고 넘어가기


 

* 기본 디비가 master로 되어있는데 이걸 꼭 Ewig 디비로 바꾸어 주어야함!! - 자주하는 실수

 

 - 코드는 상수로 만들어 쓰는게 좋은 방법

 - chinook의 genre도 int로 넣어있음!

 - 첫번째는 int형이고 두번째는 nvarchar 이런걸 lookuptable?? 이라부름

 

 * code류의 테이블을 다모아서 Code테이블을 만들면 좋음! 

 - 두개의 테이블만있으면 여러타입을 모두 처리할 수 있음! -(그런데 지금 연결이 안되있는데 어떻게 코드를,,?)

코드 카테고리 db를 통해서 코드를 분류함

 

 * 투표가 언제 닫히느냐?

 1) 반장이 만들고 닫고 

 2) 모든 학생이 투표하면 닫히는 

 

 

2번을 따를 때, Date, PlayerCount를 넣어놓고 PlayerCount에 맞는 투표가 있을때 투표가 닫히게끔!


지금부터는 데이터 다뤄보깅

SQL - 1) DDL

         2) DML - [CRUD] CREATE, READ, UPDATE, DELETE

 

procedural(절차적) vs set-based(집합이론-데이터베이스) 

db에서는 1명을 지우나 1000명을지우나 똑같음 !!!! 

 

 * 디비 주석

 

 - 디비 공부

microsoft docs 이걸 보시길! - 현존하는 완벽한 설명!!..  

 

 - BNF -> 어떤 언어의 규칙을 설명하기위한,,,! 

 

1. 

 

2. 

 

 

3. 실행 단축키 F5

 

4. 토마스만 실행하고 싶을 때

 

5. 아이디사양을 켜서 자동 증가하도록 해보자 - 이럴땐 아이디 값을 지정하면 안됨

 

6. 위처럼 김태희를 해버리면 모든 이름이 다 김태희로 바뀌어버림 그렇기때문에,,, WHERE 절이 있는 것,,,,

 

7. 삭제,,

 

8. SELECT


프로시저 (함수)

함수는 반환값이 있는데 

프로시저는 어떤 일을 하긴하지만 반환값이 없음!

 

왜 사용? - 프로시저는 거의 장점만있음! 무조건 만들어 쓰기1

 

1. 아래보다 복잡한 코드 만들기 위해 프로시저 만들어놓고 호출하기!!! 

 

2. 코드 구현하기

 

 

3. 뷰 만들기

 


트랜잭션 (OR, NOTING)

 

커서는 굉장히 성능이 안좋음 - SQL이랑 안맞음

트리거 - 이것도 가급적,,,, 사용을 자제,,,,, 

인덱스 - 각 컬럼에 달 수있음

  ex) 트랙테이블 - select * from track albumId = 1 이런경우에 db가 처음부터 쭉 훑는 수밖에 없음 그런데 이때 albumId에다가 인덱스를 붙여주게 되면 시간이 비약적으로 축소됨!! 

  > 기본키 설정하는 곳에 인덱스키가 있음! > 추가 > 컬럼명(오름/내림차순) > 다음부터는 상당히 빠르게 검색이 됨!

  -> 인덱스만 잘 써도 성능이!! 쭊 올라감!! .. 

  -> 가장 단가높게 일하고 돈받는 사람,, db 튜닝하는 사람

  단점 : 책으로 비유하자면 더 많은 페이지, 많은 시간, 새 페이지가 추가되면 목차(인덱스)도 또 바뀌어야함

           또한 여, 남의 경우 성비가 50:50이거나 두개 중에 한개인경우는 사실 걸어도 차별성이 없음! 

          => 잘 분산되어있는 데이터에 인덱스를 걸어주어야 함!!!! 

'Archive' 카테고리의 다른 글

0926 C#과 DB 연동 프로그래밍 : EWIG 02  (0) 2019.09.26
0926 C#과 DB 연동 프로그래밍 : EWIG 01  (0) 2019.09.26
0924 서버프로그래밍  (0) 2019.09.24
0906 10-인터페이스  (0) 2019.09.06
0906 09-가상메서드-추상메서드  (0) 2019.09.06
    'Archive' 카테고리의 다른 글
    • 0926 C#과 DB 연동 프로그래밍 : EWIG 02
    • 0926 C#과 DB 연동 프로그래밍 : EWIG 01
    • 0924 서버프로그래밍
    • 0906 10-인터페이스
    피곤핑
    피곤핑

    티스토리툴바