• 정규화란?
    • 함수적 종속성 등의 종속성 이론을 이용하여 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정
    • 제 1, 2, 3, BCNF, 4, 5 정규형이 있으며, 차수가 높아질수록 만족시켜야 할 제약조건이 늘어남.
    • 데이터베이스의 논리적 설계 단계에서 수행
    • 논리적 처리 및 품질에 큰 영향을 미침
  • 목적
    • 데이터 구조의 안정성을 최대화.
    • 어떠한 릴레이션이라도 데이터 베이스 내에서 표현 가능하게 만듬.
    • 효과적인 검색 알고리즘을 생성 할 수 있음.
    • 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지
    • 데이터 삽입 시 릴레이션을 재구성할 필요성을 줄임
  • Anomaly(이상)의 개념 및 종류
    • 개념 : 정규화를 거치지 않으면 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조직 시 예기치 못한 곤란한 현상이 발생
    • 종류 : 
      1. 삽입 이상(Insertion Anomaly) : 데이터를 삽입할 때 의도와는 상관없이 원하지 않는 값들로 인해 삽입할 수 없게 되는 현상
      2. 삭제 이상(Deletion Anomaly) : 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는, 즉 연쇄 삭제가 발생하는 현상
      3. 갱신 이상(Update Anomaly) : 튜플에 있는 속성값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 불일치성(Inconsistency)이 생기는 현상
  • 정규화 과정
    • 제 1정규형 (1NF) : 릴레이션에 속한 모든 도메인이 원자값만으로 되어 있는 릴레이션
    • 제 2정규형 (2NF) : 릴레이션 R이 1NF이고, 키가 아닌 모든 속성이 키본키에 대하여 완전 합수적 종속 관계를 만족함
    • 제 3정규형 (3NF) : 릴레이션 R이 2NF이고, 키가 아닌 모든 애트리뷰트가 기본키에 대해 이행적 종속 관계를 이루지 않도록 제한한 관계형
    • Boyce-Codd 정규형 (BCNF) : 
      • 릴레이션 R에서 결정자가 모두 후보키인 관계형
      • 3NF에서 후보키가 많고 서로 중첩되는 경우에 적용하는, 강한 제 3규형이라고도 함
      • 키가 아닌 모든 속성은 각 키에 대하여 완전 종속해야 하고, 키가 아닌 모든 속성은 그 자신이 부분적으로 들어가 있지 않은 모든 키에 대하여 완전 종속해야 함
      • 어떤 속성도 키가 아닌 속성에 대해서는 완전 종속할 수 없음
    • 제 4정규형 (4NF) : 릴레이션 A -> B가 성립하는 경우 R의 모든 속성이 A에 함수적 종속이면 이 릴레이션 R은 제 4정규형에 속함
    • 제 5정규현(5NF / PJ / NF) : 릴레이션 ㄲ의 모든 조인 종속성(JD)의 만속이 R의 후보키를 통해서만 만족 될 때 그 릴레이션은 R은 제 5정규형 또는 PJ / NF에 속함


※ 완전 함수적 종속성  (완전 종속) : 복합키 모두가 함수적 종속성을 가지는 것

   부분 함수적 중속성  (부분 종속) : 복합키 중 하나가 함수적 종속성을 가지는 것

   이행적 함수적 종속성 : A->B 이고 B->C 이면 A->C


※ 정규형 과정 정리

 

- 출처 : http://blog.naver.com/seong1731/220166773381


'Database' 카테고리의 다른 글

Database Isolation Level  (0) 2020.04.14
샤딩과 파티셔닝 개념 정리  (0) 2018.10.12

원문 : The Best Way to Learn Python - Tuts+ Code Article(참조를 위해 최소한으로 요약 번역하였으니 원문을 꼭 참조하세요!)

파이썬은 이전보다 더 인기있으며, 백엔드 웹서버에서 프론트엔드 게임 개발까지 어디서나 사용되고 있다. 파이썬은 정말 일반적인 목적의 언어이며 자존심있는 프로그래머의 무기 중 필수 툴이다.

임무 1: 기초에서 시작하라

두 가지 버전의 파이썬이 있다: 파이썬 2.7과 파이썬 3.4. 어느 것을 선택할지는 크게 중요하지 않다. 입문자에게는 특히, 차이점이 미미하다. 알아야 한다면, 파이썬 2는 서드파티 지원이 훨씬, 훨씬 더 많고, 파이썬 3는 언어를 설계하는 것이 개발자들의 주요 초점이다.

Wikibooks' Non-Programmers Tutorial for Python

위키북스는 새로운 것을 배우는 훌륭한 소스이며, 파이썬도 예외는 아니다. 너무 기술적이지 않고 유용하고 보람있는 무언가를 바로 코딩할 수 있다.

The Official Python Tutorial

python.org의 공식 문서보다 더 나은 정보 소스를 찾을 수 없을 것이다. 그러나, 바로 뛰어들기를 원한다면, 시작하기에 베스트 장소는 아닐 것이다. 위키북스보다 더 기술적이며, 언어를 숙달해갈 때 나중에 도움이 된다.

초보자에게는 파이썬 2와 파이썬 3의 가장 큰 차이점은 파이썬 2는 괄호없이 print를 사용할 수 있고, 파이썬 3는 괄호가 있어야 한다. 그게 다다.

임무 2: 튜토리얼과 스크린 캐스트

TheNewBoston's Python Programming Tutorials

강사가 재미와 듣기 쉬움을 균형있게 전달한다. 프로그래밍에 지식이 없어도 된다.

Nettuts+'s Python from Scratch

프로그래밍 경험없이도 장고를 이용한 다이내믹 웹사이트를 만들게 해준다.

ShowMeDo's Python Screencasts

완전초보부터 중급까지의 파이썬 테크닉과 관련된 비디오 카탈로그가 아주 많다.

Build a Python Bot That Can Play Web Games

완전 초보에게 추천하지는 않지만, 언급할만한 가치는 있다. 간단한 게임을 하는 파이썬 봇을 만드는 법을 보여준다. 매일 반복적인 작업에 적용할 수 있다.

임무 3: 무료 e북들!

고퀄의 무료 e북이 넘치고 있고, 아래는 그 중 베스트 목록이다.

Learn Python the Hard Way

이름과 다르게 매우 쉽게 배울 수 있다.

Think Python: How to Think Like a Computer Scientist

부제와 같이 이론적인 면을 강조한다. 완전초보에게는 약간 어렵지만 알고리즘 이론과 고급 개념에 대해 읽을 수 있다.

Invent with Python

배워서 써먹고 싶다면, 게임을 만드는 것이 좋다! 파이썬을 몰랐더라도 이 책으로 게임을 만들 수 있다.

The Django Book

웹 개발을 위해 파이썬을 배우고 싶다면, 장고 프레임워크를 사용할 것이다. 파이썬에 능숙하고 프레임워크에 초보라면 이 책이 장고를 가르쳐 준다.

PythonBooks

난이도와 주제 따른 파이썬 책에 대한 공식 위키. 한글 책도 소개되어 있다.

임무 4: 스택오버플로우와 친해져라

스택오버플로우에 초보자 에러와 문제만 있는 것은 아니다. 예로 Hidden features of Python을 한번 봐라. 정식 튜토리얼에 없는 수많은 팁과 트릭을 볼 수 있으며, 중급에서 고급 파이썬 사용자에 매우 도움되는 것이다.

임무 5: 프로젝트 오일러

Project Euler(오일러로 발음한다)에서 400 문제를 풀 수 있다. 각 문제는 대략 50%의 수학과 50%의 프로그래밍이다.

새로운 문제를 해결하면 포럼 글타래를 볼 수 있다. 이 곳에서 많은 사람들이 서로 자신의 해결책과 아이디어를 토론하고 있다. 글타래의 후반 페이지에 있는 많은 해결책이 파이썬으로 되어 있을 것이다. 이것은 정말 여러분의 프로그래밍 능력을 키우는 열쇠가 될 것이다. 여러분보다 빠른 해결책이 있다면 시간을 내서 분석하라.

파이썬으로 된 프로젝트 오일러 문제에 대한 정말 훌륭한 블로그도 있다. 배우려고 한다면, 문제에 막혀서 다른 프로그래머의 작업을 살짝 엿보는 것을 부끄러워 하지마라.

임무 6: 게임 만들기

게임을 만드는 것보다 더 만족스러운 것이 거의 없다. 가파른 학습 곡선이 될 수 있지만, 할 가치가 있고 매우 보람있다. PyGame은 가장 알려진 파이썬 게임 라이브러리이며, 무료 투토리얼도 많이 발견할 수 있을 것이다. 여기 베스트 PyGame 튜토리얼이 몇 개 있다.

Pygame 공식 문서

오리지널 파이썬 튜토리얼과 같이 PyGame 개발자도 소개 문서가 가지고 있지만 너무 기술적이다. 그러나 개발자 문서는 항상 정보의 베스트 소스가 될 것이다.

Invent With Python (With PyGame)

TheNewBoston's Computer Game Development Tutorial

위의 가이드와는 다르게 더 요점적이지만 완전한 게임을 만들게 하지는 않는다.

임무 7: 인기 라이브러리와 툴 알기

PyPy

CPU 집중적인 작업을 하려면, 파이썬 자체로는 병목이 생기는 것을 알게되어 아마 PyPy를 필요로 할 것이다. PyPy는 처리속도를 높여줄 수 있는 파이썬의 대체 컴파일러이다.

NumPy + SciPy

보통 이 두개는 나란히 간다(SciPy가 NumPy에 의존한다). 수학적이거나 과학적인 연구를 위한 진지한 계산 처리를 한다면 이 두 개의 라이브러리는 베스트 친구가 될 것이다. NumPy와 SciPy는 파이썬의 수학적인 함수와 능력을 확장해주고 작업들을 엄청나게 가속할 수 있다.

BeautifulSoup

BeautifulSoup은 정말 아름답다. 정보를 얻기위해 HTML 페이지를 긁어야 할 필요가 있다면 가져오는 것이 매우 좌절스럽고 머리를 쥐어뜯는 것이라는 잘 알게 될 것이다. BeautifulSoup이 모든 것을 하고 수명 몇 년을 벌어줄 것이다. 강추한다.

Python Imaging Library

Python Imaging Library (PIL)는 이미지를 다루는 모든 일에 훌륭하다.

Django

웹 개발이 목표라면 장고 프레임워크를 사용하게 될 것이다. 가장 널리 알려진 웹 프레임워크이며 학습 리소스도 가장 많다.

임무 8: 오픈소스 프로젝트에 관여하라

언어를 파악하고나면 다른 사람의 코드를 읽고 이해하는 것이 언제나 중요한 스킬이다 - 말할 것도 없이, 배우는 훌륭한 방법이기도 하다. 오픈소스 프로젝트들이 좋다. 다른 사람이 여러분의 코드를 판단하는 것을 걱정하지마라. 당장 공헌해야할 필요도 없다. 개선할 무언가를 봤다면, 훌륭하다! 개선사항을 제출하라. 오픈소스의 존재 이유이다.


- 출처 : https://nolboo.github.io/blog/2014/08/10/the-best-way-to-learn-python/


11월30일 자바 스프링 커뮤니티 ‘봄싹’이 주최한 세미나가 네이버 그린 팩토리 강당에서 열렸다. 200여명이 참여한 세미나에서는 프론트엔드 개발 동향을 전하는 세션도 있었다. 변정훈 개발자는 ‘게으른 개발자’ 이야기를 먼저 꺼냈다.

“어떤 작가는 이렇게 말하더라고요. ‘개발자는 1시간 반복 작업을 없애기 위해, 7~8시간을 투자한다’고요. 반복 작업을 없애는 프로그램을 만들기 위해서죠. 저는 이 생각에 동의해요. 특히 단순 반복 작업을 없애기 위해 개발자는 여러 노력을 시도하곤 하죠.”

spring_seminar_thum01

▲변정훈 개발자

서버 개발은 프론트엔드 개발보다 역사가 오래됐다. 그래서 서버 개발 쪽에서는 개발 환경을 도와주는 도구가 많이 나왔다. 불과 몇 년 전엔 자바 빌드 도구로 ‘엔트’가 주로 쓰였지만 이후 ‘메이븐’이 나오고 최근엔 ‘그래들’까지 나왔다. 이러한 도구들은 이전에 서버 개발자들이 불편해하거나 부족해하던 부분을 채워서 나온 결과물이다. 개발을 더 쉽고 효율적으로 할 수 있게 돕는 도구들이다. 하지만 프론트엔드 개발 분야에선 이러한 노력이 적은 편이었다. 하지만 최근 몇 년새 프론트엔드 분야에서도 자동화 기술들이 속속 나오고 있다. 특히 5년 전에 ‘노드JS’가 등장하면서 이러한 변화를 이끌고 있다.

“노드JS가 전체 웹 기술의 일부이지만요. 자바스크립트라는 웹 언어를 사용했다는 점에서 많은 시도들을 이끌고 있어요. 그 중 의존성을 관리하거나 웹서버를 실행하거나 코드 품질을 관리할 때 쓸 수 있는 자동화 기술이 나오고 있죠.”

의존성 관리

웹사이트를 만들려면 의존성 관리를 해야 한다. 제이쿼리, 부트스트랩 등 외부 라이브러리를 가져다쓰고 이에 대한 버전 관리를 하는 것을 의존성 관리라고 한다. 과거 개발자들은 이를 위해 인터넷 웹사이트에 들어가 원하는 라이브러리를 검색하고 내려받아 내부 컴퓨터 폴더에 넣었다. 그리고 HTML 문서에 해당 경로를 입력해야 했다. 의존성 관리 도구를 이용하면 이러한 반복과정을 줄일 수 있다.

대표적인 도구는 ‘보어’가 있다. 보어는 터미널에 명령어를 입력해 의존성 관리를 할 수 있도록 돕는다. 처음 한번만 설치하면 명령어를 간편히 입력하면서 원하는 라이브러리 통합해서 쓸 수 있다. 또한 어떤 버전을 썼고, 다른 팀원이 해당 도구를 썼는지에 대한 기록도 자동으로 남는다.

이처럼 의존성 관리 도구를 쓰면 라이브러리 파일을 형상관리 도구에 넣지 않아도 되고, 버전 업데이트도 훨씬 쉬워진다.

spring_seminar_20141130_01

▲과거 반복과정이 많았던 의존성 관리(출처: 변정훈 개발자 슬라이드쉐어)

웹서버 실행
과거엔 웹 서버 실행하는 게 복잡했다. 루트 경로를 따로 지정 해주는 등 관리하기 힘들고, 실행하는데 시간이 오래 걸렸다. 최근엔 프론트엔드 개발을 위한 빌드 도구가 여럿 나오고 있다. 대표적인 게 ‘그런트’나 ‘걸프’다. 이를 통해 프로젝트별로 환경을 자동화할 수 있다. 이 때문에, 다른 포트, 다른 경로를 사용할 수 있으며, 팀 단위로 작업할 때 누구나 똑같은 환경에서 테스트를 할 수 있다. 또한 ‘웹스톰’, ‘아톰’과 같이 여러 에디터를 사용할 수 있어 특정 개발환경에 종속되지 않는다.

spring_seminar_20141130_02

▲과거 웹서버를 실행할 때 관리하거나 실행 속도가 낮았다(출처: 변정훈 개발자 슬라이드쉐어)

▲빌드도구로 웹서버를 실행했을 때 장점(출처: 변정훈 개발자 슬라이드쉐어)

코드 품질 관리
프론트엔드 개발 쪽에서 유효성이나 코드를 검사하는 것을 ‘린트’라고 한다. 사실 프론트엔드 개발에선 코드에 조금 문제가 있어도 결과를 실행하는 데 이상이 없었다. 하지만 최근엔 린트 도움을 받아 코드 품질을 더 높일 수 있다. 린트 도구로 세미콜론을 빼먹은 걸 알 수 있거나, 어떤 함수를 쓰지 말야야 하는지 등을 알 수 있다. 개발자가 실수할 가능성도 줄어든다. ‘JS힌트’가 대표적이며 페이스북이 만든 ‘플로우’나 트위터가 만든 ‘리세스’등도 있다.

spring_seminar_20141130_06-input

▲JS힌트와 같은 도구로 코드검사를 할 수 있다(출처: 변정훈 개발자 슬라이드쉐어)

spring_seminar_20141130_06-output

▲JS힌트 도구가 위의 소스 문법을 검색한 결과(출처: 변정훈 개발자 슬라이드쉐어)

테스트는 한번에

프론트엔드 개발자는 여러 웹브라우저를 동시에 테스트해야 한다. 이러한 과정을 한번으로 줄여주는 도구도 있다. 대표적으로 ‘소스랩’이 있다. 소스랩은 CI 서버를 실행시킬 때, 여러 웹브라우저를 연결해 테스트할 수 있다. 이렇게 되면 한번 실행해 인터넷 익스플로러, 크롬, 파이어폭스 등에 제대로 작동하는지 하나의 인터페이스 안에서 간편하게 볼 수 있다.

변정훈 개발자는 “자동화 기술은 도구이기 때문에 배우는 데 진입장벽이 높지 않다”라며 “상대적으로 쉽게 배울 수 있는 동시에 얻어갈 수 있는 이점이 많아 개발자들과 공유하고 싶었다”라고 설명했다. 또한 “개별적인 도구들이 언제 어떻게 쓰이는지 알 수 있으면 여러 도구를 조합해서 사용할 수 있다”라며 “이로 인해 효율적이고 빠르게 웹 개발을 할 수 있으며, 웹 개발 환경이 어떻게 변화하는지도 알 수 있다”라고 강조했다.

spring_seminar_thum02

▲변정훈 개발자

변정훈 개발자가 제안하는 프론트엔드 개발에서 사용할 수 있는 자동화 도구

의존성 관리를 위한 도구

웹서버 실행

코드 품질 관리

전처리

유닛테스트

테스트


 - 출처 : http://www.bloter.net/archives/214274

+ Recent posts