DBMS에서 체크하는 데이터의 조건

1. 엔티티(개체) 무결성 : 기본키는 널값이나 중복값을 가질 수 없음
2. 참조 무결성 : 참조할 수 없는 외래키 값을 가질 수 없음 (NULL 값도 노노)
3. 널 무결성 : 속성값이 널값이 될 수 없다
4. 고유 무결성 : 각 튜플이 갖는 값은 서로 달라야한다
5. 키 무결성 : 하나의 릴레이션에는 적어도 하나의 키가 존재한다.
6. 도메인 무결성 : 특정 속성의 값이 그 속성이 정의된 도메인에 속한 값이어야 한다는 규정
7. 관계 무결성 : 튜플 삽입 가능여부 or 한 릴레이션과 다른 릴레이션의 튜플들 사이에 관계에 대한 적절성 여부를 지정한 규정

 

'Study > DB & 통계' 카테고리의 다른 글

SQL 책 추천  (0) 2014.11.12
MySQL excel에서 편집하기  (0) 2014.11.06
위치 찾기  (0) 2014.10.13
쿼리시험  (0) 2014.10.13
정규화란?  (0) 2014.06.30



'Study > DB & 통계' 카테고리의 다른 글

데이터의 조건  (0) 2015.04.22
MySQL excel에서 편집하기  (0) 2014.11.06
위치 찾기  (0) 2014.10.13
쿼리시험  (0) 2014.10.13
정규화란?  (0) 2014.06.30




맥은 지원안함..ㅠㅠ


'Study > DB & 통계' 카테고리의 다른 글

데이터의 조건  (0) 2015.04.22
SQL 책 추천  (0) 2014.11.12
위치 찾기  (0) 2014.10.13
쿼리시험  (0) 2014.10.13
정규화란?  (0) 2014.06.30

* 정규화란?

데이터베이스의 중복을 최소화하여 저장효율을 높이고 연산시 이상현상을 최소화 할 수 있는 논리적 구조로 변환시키는 작업


* 정규과가 되지 않는 논리적 구조의 이상현상

1.이상(anomaly) 현상 : 정규화되지 않는 논리적 구조로 구축된 데이터베이스의 연산시에 발생하는 문재점

2.삭제이상 : 한 개의 튜플을 삭제할 경우 유지해야 하는 경보까지 상실하는 정보의 손실이 일어나는 현상

3.삽입이상 : 어떤 정보를 테이블에 삽입하고자할때 불필요한 정보까지 삽입해야하는 경우

4.갱신이상 : 중복된 튜플들 중 일부만 갱신함으로써 정보의 불일치성 발생


* 정규형의 포함관계

전체릴레이션의 집합 ⊃ 제1정규형 릴레이션 ⊃ 제2정규형 릴레이션⊃ 제3정규형 릴레이션 ⊃ BCNF 릴레이션 ⊃ 제4정규형 릴레이션 ⊃ 제5 정규형 릴레이션



- 다음에는 정규화 자세히 + 함수 종속성 정리

'Study > DB & 통계' 카테고리의 다른 글

데이터의 조건  (0) 2015.04.22
SQL 책 추천  (0) 2014.11.12
MySQL excel에서 편집하기  (0) 2014.11.06
위치 찾기  (0) 2014.10.13
쿼리시험  (0) 2014.10.13

if문

if 조건식1:

<문들1>

elif 조건식2"

<문들2>

else :

<문들3>




score = 90

if score >= 90:

print "Congraulation!!!"




a=10

if a>5

print "Big"

else :

print "Small"



a=10

if a>5: print "Big"

else : print "Small"


n=-2

if n>0:

print "Positive"

elif n<0 :

print "Negative"

else :

print "Zero"


order ="spagetti"

if order =="spam":

print =500;

elif order == "ham":

print =700

elif order =="egg":

price =300

elsf order =="speagetti":

price=900


order="spagetti"

menu={"spam":500,"ham":700, "egg":300,"spagetti":900}

price=menu[order]


위 2개의 결과는 같다.



들여쓰기와 제어문

  • 가장 바깥쪽에 있는 블록의 코드는 반드시 1열부터 시작해야한다.

a=1

 a=1 #실패


  • 내부블록은 같은 거리 만큼 들여쓰여져야한다.

if a>1

print 'big'

 print 'really?'


  • 블록의 끝은 들여쓰기가 끝나는 부분으로 간주된다.
    {}나 begin나 end등으로 블록을 구분하지 않고 들여쓰기만으로 구분한다.


  • 탭과 공백을 섞어서 쓰는 것은 좋지 않다.
    보는것과 인식하는 것은 다르다.


  • 들여쓰기 간격은 일정하기만 하면 된다. 2,3,4칸 일정하면 자동으로 감지한다. 일반적으로 사용되는 공백의 수는 4혹은 8이다.


10진법을 10진법 이하의 진법으로 바꾸는 소스 (들여쓰기 보자)

def int2digit(n,base):

return res=''

while n>0:

n,r=divmod(n,base)

res='r'+res




for문

for<타켓> in <객체>:

<문1>

else:

<문2>


  • 루프문을 정상적으로 다 끝내고 else로 간다.

a=["cat","cow","tiger"]

for x in a:

print len(x), x

3 cat

3 cow

5 tiger



for x in [1,2,3]:

print x,  # , 사용이유 - 줄넘기 방지


  • 순차적으로 숫자를 반복할 경우에는 range함수를 이용한다.

range(10)

[0,1,2,3,4,5,6,7,8,9]


for x in range(10):

print x,



  • 1부터 10까지의 합을 구하는 예

sum = 0

for x in range(1,11):

sum=sum+x


print sum



  • 1부터 10까지 곱

prod=1

for x in range(1,11):

prod=prod*x


prod





  • for 문을 이용할때, 요소의 값뿐만아니라 인덱스 값도 함께 필요하면 enumerate()내장함수 이용
  • enumerate()내장함수는 인덱스.요소,값 튜플자료를 반복적으로 넘겨준다.

L=["cat","dog","bird","pig","spam"]

for k, animal in enumerate(L):

print k, animal


L=range(10)

L


for k , ele in enumerate(L):

L[k]=ele+1


L


  • break 이용

for x in range(10):

is x>3: break

print x

print 'done'



for x in range(10):

if x<8 : continue # x<8이면 for문으로 다시 올라간다.

print x

print 'done'



for x in range(10):

print x,

else:

print 'else block'

print 'done'



for x in range(10):

break

print x,

else:

print "else block"

print "done"



for x in range(2,4):

for y in range(2,10):

print x, '*', y, '=',x*y

print



while문

while <조건식>:

     <문1>

else:

<문2>


  • 조건이 거짓이라면 else문 수행


count=1

while count <11:

print count

count=count+1




sum=0

a=0

while a<10:

a=a+1

sum=sum+a

print sum



a=0

while a<10:

a=a+1

if a<3:coutinue

if a>10 : break

else:

print 'else block'

print 'done'


a=1

a=2

a=3 -->coutinue 

a=4 ... 

a=8

a=9

a=10 --> while문 조건 반대 else 수행

  • while문은 조건 안될때 수행된다!

'Study > Python' 카테고리의 다른 글

메모리 관리  (0) 2014.06.30
자료형 확인과 기타 자료형 확인  (0) 2014.06.30
변경가능성  (0) 2014.06.30
자료형의 종류  (0) 2014.06.28
콘솔 입.출력  (0) 2014.06.28
  • 쓰레기 수집
    • 파이썬에서 사용자가 특별히 관리해야할 메모리는 없다.
    • 모든것이 자동으로 생성되고 자동으로 환원된다.
    • 추가로 필요한 메모리가 있으면 시스템에서 알아서 확장해준다.
    • 더이상 사용하지 않는 객체들은 자동적으로 사라진다

--> Garbage Collection


  • 파이썬은 모든 것은 객체로 관리되며, 모든 객체는 레퍼런스 카운트(Reference Count)라는 값을 가지고 있다. 레퍼런스 카운트는 얼마나 많은 부분에서 객체를 참조하고 있는가를 나타내주는 정수


x=y=z=500

객체 500은 레퍼런스 카운트 값 3을 가진다.


del x

객체 500의 레퍼런스 카운트 값은 2가 된다. 


y=1

z=2

객체 500의 레퍼런스 카운트 값은 0이 된다.



  • 레퍼런스 카운트를 얻는 법
    • 레퍼런스 카운트 값을 확인하는 방법 
    • sys 모듈의 getrefcount함수들을 이용하면 된다.

sys.getrefcount(레퍼런스)


import sys

a=10234

sys.getrefcount(a)


이것을 직접 실행시켜보면 2가 나온다.

그 이유는 이 객체를 처리하기 위해서 새로운 카운트 값을 1증가 시켰기 때문

실제 카운트 값은 getrefount 함수가 넘겨주는 값보다 1 작다.


  • 객체 신원 식별하기
    • id 내장함수를 이용하면 객체의 주소를 식별할 수 있다.
    • 두 객체의 id가 동일하다면, 같은 객체를 참조하고있는 것이다.

id(레퍼런스)


a=500

id(a)


b=a

id(b)



c=[1,2,3]

d=[1,2,3]

c is d


a=500

b=a

a is b


  • 두 객체가 같은 값을 가지고 있는가 확인할때는 ==을 사용한다.

c=[1,2,3]

d=[1,2,3]

c==d


'Study > Python' 카테고리의 다른 글

파이썬 제어문  (0) 2014.06.30
자료형 확인과 기타 자료형 확인  (0) 2014.06.30
변경가능성  (0) 2014.06.30
자료형의 종류  (0) 2014.06.28
콘솔 입.출력  (0) 2014.06.28
  • 내장자료형 알아보기

type()


type({})

type(4)

type('abc')

type([])

type(())

type(type({}))



a=0

L=[1,2,3]

type(a)==type(0) #a가 정수인지 검사

type(L)==type([])# L이 리스트인지 검사



  • 기타의 자료형
    • 파이썬 전체 자료형의 자료를 알아보는 방법

import types

dir(types)


    • types 모듈을 이용하여 자료형을 비교할 수 있다.

from types import *

type(123)==IntType

type('abc')==StringType

'Study > Python' 카테고리의 다른 글

파이썬 제어문  (0) 2014.06.30
메모리 관리  (0) 2014.06.30
변경가능성  (0) 2014.06.30
자료형의 종류  (0) 2014.06.28
콘솔 입.출력  (0) 2014.06.28
  • 자료형들은 변경할 수 있는 자료형(Mutable)과, 변경할수 없는 자료형(Immutable)으로 나눌 수 있다.

  • 변경 가능한 자료형
    • 리스트, 사전

  • 변겨가능하지 않은 자료형
    • 숫자, 문자열,튜플

  • 리스트 변경예시

s=[1,2,3]

s[1]=10

s


  • 문자열, 튜플 --> 오류발생

s= (1,2,3)

s[1]= 10 # 오류발생






a=1

a=2


a가 가지고있는 값 1이 바뀐것은 아니다. 

1은 변경되지 않고, a가 다른 객체(2)를 참조할 뿐


파이썬에서 객체와 이름은 별도로 관리한다

이름에 직접 값이 저장되는것이 아니고, 이름은 객체를 참조(Referencing)하게 되어있다.


숫자 객체 1의 값은 변경되지 않았다.

 이름 a가 다른 객체를 참조한다.

이때 객체1은 참조되지 않으므로 메모리에서 제거된다



  • 어떠한 이름으로 객체 전체를 바꾸는 것은 객체 전체를 변경하는것이 아니라 새로운 객체를 할당하는 것
  • 객제 변경의 의미는 객체 내부의 값을 변경할수 있는 가이다.


'Study > Python' 카테고리의 다른 글

메모리 관리  (0) 2014.06.30
자료형 확인과 기타 자료형 확인  (0) 2014.06.30
자료형의 종류  (0) 2014.06.28
콘솔 입.출력  (0) 2014.06.28
파이썬 문과 기본자료형 (2) -이름과 객체  (0) 2014.06.28

주요내장 자료형

  • 수치형(Numbers) : 정수,롱형정수, 실수, 복소수등을 표현한다.
  • 문자열(Strings) : 문자들의 모임, 내용변경이 안된다.
  • 리스트(Lists) : 순서를 가지는 파이썬 임의 객체의 집합이다
  • 사전(Dictionaries) : 순서를 가지는 않는 객체의 집합, Key값으로 자료를 꺼낸다.
  • 튜플(Tuples) : 순서를 가지는 파이썬 임의 객체의 집합이다. 내용변경이 안된다.
  • 파일(File) : 파일에 자료를 입.출력하기 위한 객체이다.
 

문자열

  • 문자열은 텍스트를 표현하기 위한 자료형이다
  • 문자열은 단일 인용부호 ' 혹은 이중인용부호"안에 묶여진 문자들의 모임이다.
  • 문자열은 Indexing으로 각각 문자를 취할 수 있다.
s="Hello World" s[0] s[1] s[-1] s[-2]
  • 슬라이싱으로 부분 문자열을 취할수도있다
s[1:3] s[0:5]
  • 슬라이싱 시작위치가 생략되면 처음부터, 마지막 위치가 생략되면 끝까지 의미
s[1:] s[:3] s[:]
  • 슬라이싱은 세가지 값을 가질수 있다.
(start:stop:step)
  • start는 0 stop는 자료형의 크기 step는 1의 값을 가진다.
s='abcd' s[::2] #2칸 단위로 s[::-1]#거꾸로
  • 연결(+)과 반복(*)의 연산도 적용 가능하다
'Hello'+'  '+'World' 'Hello'*3 '-'*60
  • 문자열의 값은 변경되지 않는다.
  • 문자열변경을 원하면 슬라이싱과 연결하기를 이용한다
s='h'+s[1:] s
  • 문자열 길이는 len 내장함수 이용
s='hello world' len(s)
  • 멤버쉽 테스트를 이용하여 부분 문자열의 존재를 확인할 수 있다.
'world' in s # s= 'hello world' 'world' not in s  

리스트

  • []를 사용하는 리스트는 임의의 객체를 저장하는 집합적 자료형
  • 각자료는 순서를 가지고 있고, 순서에 따라 접근 가능하다.
L=[1,2,3] len(L) L[1] L[-2] L[1:3] L+L L*3 L=range(10) L L[::2] L[::-1] 4 in L L.append(4) L del L[0] L L.reverage() L L.sort() L  

튜플

  • ()을 사용하는 튜플도 문자열과 리스트와 유사한 특성을 가진다.
t=(1,2,3) len(t) t[0] t[-1] t[0:2] t[::2] t+t+t t*3 3 in t t=(1,2,3) t[0]=100 # 튜플은 변경이 안된다. L=[1,2,3] L[0]=100 #리스트 자료 변경 L  

사전

  • 사전은 옵센이 아닌 키를 사용하여 값을 얻는 자료구조
  • 사상함수와 같은 역할을 한다.
d={'one':'hana','two':'dul','three':'set} d['one'] d['four']='net d d['one']=1 d 'one' in d
  • 사전은 순서에 따라 요소들을 저장하지 않는다. (그럴필요가 없다)
  • 순서에 의해서가 아니라 키에 의해서 값을 추출하기 때문
  • 하지만 기존의 자료형으로 변환해서 처리하는 것이 필요할때는 사전을 리스트나 튜플로 변환하는것이 가능
d={'one':1,'two':'dul','three':'set','four':'net'} d.keys() d.values() d.items()

내장 자료형의 분류

  • 직접 자료형 - 정수,실수,롱형정수,복소수
  • 시퀸스형 - 리스트,문자열, 튜플
  • 매핑형 - 사전
  • 변경가능형 - 리스트,사전
  • 변경불가능형 - 수치형,문자열, 튜플
  • 리터럴형 - 한가지 객체만 저장한다. 문자열, 수치형
  • 저장형 - 여러가지 다른 객체를 저장한다. 리스트, 튜플 사전

정리

  • 수치형 - 리터럴 / 불가 / 직접
  • 문자열 - 리터럴 / 불가 / 시퀀스
  • 리스트 - 저장 / 가능 / 시퀀스
  • 튜플 - 저장 / 불가 / 시퀸스
  • 사전 - 저장 /가능/ 매핑

'Study > Python' 카테고리의 다른 글

자료형 확인과 기타 자료형 확인  (0) 2014.06.30
변경가능성  (0) 2014.06.30
콘솔 입.출력  (0) 2014.06.28
파이썬 문과 기본자료형 (2) -이름과 객체  (0) 2014.06.28
파이썬 문과 기본자료형 (1)  (0) 2014.06.28

콘솔입력

name=raw_input('name?') name?홍길동 print name
  • 정수나 실수 등의 값을 원한다면 raw_input을 사용해서 문자열을 받은후 수치형으로 변환하거나 input으로 이용한다
k=int(raw_input('int :')) int:89 k i=input('int:') int: 45 i
  • input은 입력된 문자열을 파이썬 식으로 처리해서 넘겨준다
k=input('expr:') expr:30+50 k k=input('expr:') expr:k+1 k #앞서 계산된 80에 1을 더한다

콘솔출력

print

  • 여러값들을 ,로 구분할수 있으며 출력시에 각 값들 사이에 공백한개가 추가된다
print 4+5, 4-2
  • 세미콜론;으로 분리된 문으로 순차적으로 입력된 문들로 처리된다
print 1;print2
  • 기본적으로 print문은 줄바꾸기를 하지만, print 끝에 콤마,를 사용하면 줄바꾸기를 하지 않는다
print 1,;2
  • 일반 자료형들도 ''식을 이용하여 문자열로 변환한 후 출력할 수 있다.
  • ''는 객체를 문자열로 변환한다.
print 12+'spam' # 숫자와 문자열 사이에 + 연산은 없다 print '12'+'spam' #숫자 12를 문자열로 변환한후 공백없이 출력한다

pprint

  • print문이 복잡한 자료를 출력할 때 적합하지 않다면 pprint을 사용한다
import pprint #pprint를 사용하기 위해 먼저 import해야한다 complicated =['spam',(1,2,3),('ham','egg',('ab','cd',('abc','def')))] complicated=complicated*3 pprint.pprint(complicated) print complicated 두개의 차이점 확인하기

대화형 출력후크(Interactive Display Hook)

  • 파이썬 인터프리터를 대화적으로 사용할떄 출력은 기본적으로 repr()내장함수를 이용하여 출력
  • 2.1이상애서 sys.displayhook을 설정하면 repr대신에 다른 함수를 기본출력함수로 사용할 수 있다.
import sys,pprint sys.displayhook=pprint.pprint complicated
  • 하지만 print문으로 출력하면 여전히 이전의 방식대로 출력된다

'Study > Python' 카테고리의 다른 글

변경가능성  (0) 2014.06.30
자료형의 종류  (0) 2014.06.28
파이썬 문과 기본자료형 (2) -이름과 객체  (0) 2014.06.28
파이썬 문과 기본자료형 (1)  (0) 2014.06.28
간단한 달력 출력하기  (0) 2014.06.28

끄앙 날라감 다시

'Study > Python' 카테고리의 다른 글

자료형의 종류  (0) 2014.06.28
콘솔 입.출력  (0) 2014.06.28
파이썬 문과 기본자료형 (1)  (0) 2014.06.28
간단한 달력 출력하기  (0) 2014.06.28
대화문 모드로 간단히 실행  (0) 2014.06.28

파이썬 예약어 알아내는 방법

import keyword keyword.kwlist

주석쓰는 방법

# 고레와 주석 데스네 import sys #고레도 주석 데스네

연속라인

줄바꾸기 앞의 \은 다음 라인을 현재 라인과 연결시켜주는 역할

치환문

c,d=3,4 # 여러 개를 한꺼번에 치환 e=3.5; f=4.6; # 세미콜론으로 구분 e,f=f,e #값의 교환 a=(b=c+d) # 이것은 틀린거다. 변수가 이미 있을경우 변수에 새로운 값을 할당되면 기존의 값을 잃어버리고 새로운 값이 치환된다. a=1; type(a) # 자료형 확인 a='dd' a type(a)

확장 치환문

  • +=
  • -=
  • *=
  • /=
  • %=
  • &=
  • |=
  • ^=
  • <<=
  • >>=
  • **=

'Study > Python' 카테고리의 다른 글

콘솔 입.출력  (0) 2014.06.28
파이썬 문과 기본자료형 (2) -이름과 객체  (0) 2014.06.28
간단한 달력 출력하기  (0) 2014.06.28
대화문 모드로 간단히 실행  (0) 2014.06.28
파이썬이란?  (0) 2014.06.28
import calendar calendar.promonth(2001,3)   저장 cal.py 실행 > python cal.py

'Study > Python' 카테고리의 다른 글

콘솔 입.출력  (0) 2014.06.28
파이썬 문과 기본자료형 (2) -이름과 객체  (0) 2014.06.28
파이썬 문과 기본자료형 (1)  (0) 2014.06.28
대화문 모드로 간단히 실행  (0) 2014.06.28
파이썬이란?  (0) 2014.06.28
우분투에는 기본으로 파이썬이 설치되어있구나 우분투 짱짱맨 짱좋음ㅋ
python 4+5 print "Hello World" a=1 a= 1 (공백 no) 20-32 (4+5)*6 4+5*6 9/5 9.0/5.0 -9/5 5*(-2)+1 -9 9%5 -9%5 -(9/5) divmod(9,5) -> 몫과 나머지 한꺼번에 계산 a,b=divmod(9,5) a b 9/5. 5. 5.0 5.4e10 5e10 -5e-3 (-5 곱하기 10의 -3승) 2**3 (** :지수 연산자) 2**3**4 a=1+4j b=5-3j; a+b; a*b;
  • 복소수에 대해서도 다양한 연산을 적용할수 있다.
  • 각 수치형에 대해서 좀 더 자세히 알아보도록하자, 수치형은 정수형, 실수형,롱형(무제한),복소수가 있다.

문자열 연산하기

  • 문자열은 ""혹은 ''로 묶어준다.

print "Hello"

print "Hi there!"

a="My name is"

b="Amenda"

print a+b

종료하기

^D or ^Z import sys sys.exit() raise SystemExit

파이썬 버전 알아보기

import sys sys.version sys.version_info
  • 만약 수행하려는 파이썬 프로그램이 특정 버전이상에서 수행한다면
if sys.version_info<(2.0): print "You must have Python version 2.0 or newer' sys.exit()  

'Study > Python' 카테고리의 다른 글

콘솔 입.출력  (0) 2014.06.28
파이썬 문과 기본자료형 (2) -이름과 객체  (0) 2014.06.28
파이썬 문과 기본자료형 (1)  (0) 2014.06.28
간단한 달력 출력하기  (0) 2014.06.28
파이썬이란?  (0) 2014.06.28

+ Recent posts