관계형데이터베이스 기본



[책 목록 릴레이션]


 속성(Attribute)


데이터베이를 구성하는 가장 작은 논리적 단위로, 데이터항목 또는 데이터 필드에 해당한다. 예를들어, 

,,,, 각각을 책 목록 릴레이션의 속성이라고 한다.


 튜블(Tuple)


릴레이션을 구성하는 각각의 행, 레코드와 같은 의미이다. 예를들어, 위의 책 목록 릴레이션에서

,,,, 각각의 행을 말한다.


 도메인(Domain)


하나의 속성들의 집합을 의미한다. 예를들어, autor 속성의 도메인은 이민규, 존그래이, 티나 실리그, 이민규, 캐서린 크래머 이다.


 릴레이션(Relation)


제약조건이 있는 테이블을 말한다. 즉, 책 목록 전체를 릴레이션이라고 한다. 릴레이션은 릴레이션 타입과 릴레이션어커런스(릴에이션인스턴스)가 합쳐진 것이다. 릴레이션타입은 하나이상의 속성으로 설계한 개념(속성의 집합)으로, 스키마를 뜻한다. 릴레이션어커런스는  튜플의 집합을 뜻한다. 책 목록 릴레이션을 예로 들면 아래와 같다.


[릴레이션타입] 


[릴레이션어커런스]

 

 릴레이션 특성

1) 속성 간 순서 없음(각각의 속성들만 모두 있으면 된다.)

2) 속성 이름 유일성(같은 이름이 있으면 안된다.)

3) 튜플 순서 없음(순서가 바뀌어도 상관없다.)

4) 중복 된 튜플 없음

5) 도메인 값은 원자값(더 이상 분해 되지 않는다.)


 차수


 속성의 수 = Degree = 차수 = 5개  

 (1)


 (2)


 (3)


 (4)


 (5)



 카디날리티(Cardinality)


 튜플의 수 = 카티날리티 = 기수 = 대응수 = 5개 


 (1)


 (2)


 (3)


 (4)


 (5)



 NULL


비어 있는 상태를 말하며, 0과 공백과는 다르다


 키(Key)


☞ 후보키 

유일성(식별성), 최소성, 튜플 구별이 가능 한 것으로, idx, name 이다.  밖에 author, page, price는 중복 가능 하므로 후보키에 속하지 않는다.


☞ 기본키 

후보키 중 선택된 하나의 키(idx 선택), 중복이 되면 안되고, 비어 있으면 안된다.(NOT NULL)


대체키 

기본키를 제외한 나머지 후보키(name)


 외래키 

관계설정(subidx), 상대 릴레이션에서 기본키가 되어야 한다. 즉, 책 목록 릴레이션의 기본키는 1~5 인데, 아래 책 목록 릴레이션에서 설정한 외래키(subidx)에  1~5 이외의 다른 수가 들어가면 안된다.



[책 내용 릴레이션]


 슈퍼키 

두 개 이상 속성을 합쳐서 만들어진 키로 튜플을 구별하기 위해 필요하다. 


 무결성


☞ 도메인 무결성

모든 속성은 기본값 , NULL여부, 범위 등의 설정을 통해 특정한 도메인으로 정의되며, 설정해준 범위 내에 존재하는 값만 가질 수 있다. 즉, 어떠한 속성의 값을 SMALL_INT로 한다면, -32768 ~ 32767 사이에 존재하는 값만을 설정해 주어야 한다.


☞ 개체 무결성

기본키가투플들을 식별하는 데 이용되기 때문에 어떠한 기본 키 값도 NULL 값을 가질 수 없고 중복 되서는 안된다.(NOT NULL)


☞ 참조 무결성

릴레이션에 있는 투플이 다른 릴레이션에 있는 투플을 참조하려면 반드시 참조되는 투플이 포함되어 있어야 한다. 즉, 외래키에 의해 유지된다.


'IT.info > 개발' 카테고리의 다른 글

[HTML]HTML기본구조  (0) 2015.07.16
[Jquery]셀렉터  (0) 2015.07.07
[Codeigniter]아이디저장/로그인상태유지  (0) 2015.06.25
[Codeigniter]코드이그네이터 서버이관  (0) 2015.06.25
[Codeigniter]에러메세지  (0) 2015.06.24

HTML기본구조


HTML은 여러가지 태그를 사용하여 표현하는데 여기서 태그란 "<>"로 구별되어있으며, 대부분시작과 끝을 나타낸다. <html>~</html>은 문서의 시작과 끝을 의미한다. head와 body로 나누어져 있으며, 아래와 같은 기본 형식을 가진다.


 HTML기본구조


 DOCTYPE


문서의 버전에 관한 정보를 나타내며, <!doctype html>은 HTML5 임을 알려준다.


 HEAD 요소 


<meta(메타정보)>, <title>, <script>, <style>, <link> 요소가 들어간다. 


HEAD요소

 meta요소  

사용언어(charset), 사용저작도구(Generator), 저작자 이름(Author), 키워드 (Keyword), 문서설명(Description) 등, 문서를 파악하는데 도움이 되는 정보들을 포함한다.


 link요소 

css파일을 연결하기위해 사용한다. href에 css경로를 넣어주면 된다.


 script요소

js파일을 연결하기위해 사용한다. href에 js경로를 넣어주면 된다.


 style요소

현재페이지의 css내용을 넣으면 된다. link를 이용한 css파일 연결의 경우에는 대부분 공통의 css내용이 있을 때 사용하며, style요소를 이용해 현재페이지의 css내용을 모두 넣었다면 link연결은 해줄 필요가 없다.


 title요소 

문서의 제목을 나타내며, 한번만 사용가능하다. 또한 페이지의 내용을 고려한 제목을 넣어야하며, 특수문자는 넣지 않는것이 좋다. 


 BODY요소


문서의 내용을 적는 곳이다. 태그를 이용하여, 다양한 표현으로 문서의 내용을 보여줄 수 있다. 


BODY요소


예를들어, <ul>,<li> 태그를 이용하면 목록앞에 기호를 표시할 수 있으며, <ol><li>는 숫자를 표시하여 순서를 나타낼 수 있다. 그 밖에 다양한 태그를 사용하여 다양하게 화면을 완성해 나갈 수 있다. 



jquery기능-셀렉터


HTML안에 DOM요소를 쉽게 찾기 위해 아래와 같은 표현식을 사용한다. DOM이란 Document element model로 HTML 문서의 모든 요소에 접근하는 방법을 제공하는 것을 말하며, 트리형태로 표현한다. DOM 트리구조는 계층적 구조로 HTML 태그와 element를 나타내는 노드가 표현되있다. 


트리구조


 기본셀렉터

 - $('.a') : 클래스가 a인 요소 선택 

 - $('img') : 이미지 요소 선택

 - $('table') : 테이블 요소 선택

 - $('#a') : id가 a인 요소 선택 

 - $('input[name=a]') : a라는 이름을 가진 input text 요소 선택


 순서셀렉터

  - $('input:first') : 첫번째 input 요소 선택

  - $('input:last') : 마지막 input 요소 선택

  - $('input:odd') : 홀수번째 input 요소 선택

  - $('input:even') : 짝수번째 input 요소 선택

  - $('input:ep(인덱스)') : 인덱스번째 input 요소 선택

  - $('input:lt(인덱스)') : 인덱스 보다 작은 input 요소 선택

  - $('input:lt(인덱스)') : 인덱스 보다 큰 input 요소 선택


 관계기반셀렉터

  - $('선택자').children() : 선택자의 자식요소 선택

  - $('선택자').parent() : 선택자의 부모요소 선택

  - $('선택자').next(),nextAll() : 선택자의 다음/전체요소 선택

  - $('선택자').prev(),prevAll() : 마지막 input 이전/전체요소 선택


 조건기반셀렉터

  - $('input').filter('.a') : 클래스가 a인 input 요소 검색(현재 위치)

  - $('div').find('.a') : div 자식 중에 클래스가 a인 요소 검색(자식 위치)

  - $('div').contains('test') : div 중에 'test' 내용이 포함된 요소 검색

  - $('div').not('.a') : div 중에 클래스가 a인 요소 제거


 선택자중첩

  - $('#a div span') : id가 a인 요소 안에 div안에 모든 span요소 선택


 예시




아이디저장/로그인상태유지


 쿠키저장


$cookie = array(

    ‘name’ => ‘user_id’,
    ‘value’ => $login_id,
    ‘expire’ => ‘86500’,
    ‘domain’ => ‘.playtoon.net’,
    ‘path’ => ‘/’,
    ‘prefix’ => ‘do_’,
    ‘secure’ => FALSE
);
$this->input->set_cookie($cookie);


 쿠키삭제


delete_cookie(‘do_user_id [name]’,’.playtoon.net [domain]’,’/ [path]’);

"이 웹페이지에 리디렉션 순환 오류가 있습니다" 라는 에러가 떴을때에는 delete_cookie를 이용하여 쿠키를 지운 후, 실행해본다


 저장된 쿠키값 중 아이디 값을 가져와 로그인 박스의 id값에 넣어준다.


$this->input->cookie(‘do_id_save’); 여기까지만으로 아이디 저장은 할 수 있다.


 로그인상태 유지의 경우, 세션 저장을 따로 해주어야 한다.


$this->cookie_id = $this->input->cookie(‘do_user_id’);
if($this->cookie_id && !$this->session_ids){//쿠키 값은 있지만 세션값이 없을때,
    $this->auto_login_proc(); -> 자동로그인 함수
}


public function auto_login_proc(){

  - 쿠키 값(id)을 가져온다.

     $mb_id = $this->cookie_id;


- 회원 DB table에서 아이디 값에 맞는 정보들을 가져온다.
  $this->mb = $this->get_user_member($mb_id);//정보추출 함수(select where절)


- 가져온 값들중 필요한 값만 session에 저장한다.
  $this->session->set_userdata(array(
     ‘mb_id’ => $this->mb[‘mb_id’],
     ‘idx’ => $this->mb[‘idx’],
     ‘mb_coin’ => $this->mb[‘mb_coin’]
  ));


- 쿠키값을 지우고 redirect


}


'IT.info > 개발' 카테고리의 다른 글

[HTML]HTML기본구조  (0) 2015.07.16
[Jquery]셀렉터  (0) 2015.07.07
[Codeigniter]코드이그네이터 서버이관  (0) 2015.06.25
[Codeigniter]에러메세지  (0) 2015.06.24
[PHP]날짜/시간 출력-서버시간  (0) 2015.06.24

코드이그네이터 서버이관


 쿼리 옮기기


 파일 내보내기 

phpmyadmin -> import -> 커스텀 -> 실행

 파일 가져오기 

phpmyadmin -> export -> 파일선택 -> 실행


 파일이동


1) 파일압축 

 tar cufz public_html(압축할 것) dcom.tar(파일명)

2) 파일 보내기 

 put dcom.tar

3) ftp 접속 

 ☞ ftp -> open playtoon.cafe.com(주소)

4) 해당경로에서 압축풀기(파일이동[mv 파일경로])

 ☞ tar -xvf dcom.tar(파일명)  

 이미 파일이 존재할 시, rm -r public_html(파일삭제) 하지만 그냥 ftp접속해서 직접 파일을 

 넣어 도 상관은 없다. 



 수정파일


1) cofing/config.php

<수정해야 될 부분>

 base_url : 사이트의 URL 주소

 ☞ log_threshold : 자세한 내용은 http://hodge-podge.tistory.com/3 여기를 참고

 ☞ log_path : /home/apache/htdocs/application/logs/ 

-> logs경로(에러로그가 남겨질 위치이다.)

 ☞ encryption_key : 세션 사용 시, 암호화를 하기 위해 키값을 넣어준다. 임의로 넣으면 된다.

         

2) cofing/database.php

<수정해야 될 부분> 

 username 

 password 

 database


 파일이 깨졌을 때


1) index.php 확인 -> vi index.php(파일명)

2) service httpd restart 

'IT.info > 개발' 카테고리의 다른 글

[Jquery]셀렉터  (0) 2015.07.07
[Codeigniter]아이디저장/로그인상태유지  (0) 2015.06.25
[Codeigniter]에러메세지  (0) 2015.06.24
[PHP]날짜/시간 출력-서버시간  (0) 2015.06.24
[Codeigniter]컨트롤러 불러오기  (0) 2015.06.23

에러메시지


log_message(‘error’, ‘Some variable did not contain a value.’);

 Error 메세지 : PHP 에러나 사용자 에러등 진짜 에러 메시지.


log_message(‘debug’, ‘Some variable was correctly set’);

 Debug 메세지: 디버그를 도와주는 메세지.예를 들어, 클래스가 초기화되면 debugging 정보로 파일에 기록할 수 있습니다.


log_message(‘info’, ‘The purpose of some variable is to provide some value.’);

 Informational 메세지 : 이 메시지는 가장 우선순위가 낮은 메세지로 단순히 어떤 프로세스에 대한 메세지를 제공합니다. CodeIgniter 는 Info 메세지를 작성하지않습니다만, 원하시는 메세지를 스스로 기록하실수있습니다.


<< config파일에서 $config[‘log_threshold’]을 확인해야 한다.>>

| 0 = Disables logging, Error logging TURNED OFF

| 1 = Error Messages (including PHP errors)

| 2 = Debug Messages| 3 = Informational Messages

| 4 = All Messages

날짜/시간출력


 서버 시간은 15시30분 22초인데 php에서 echo date(H:i:s)을 호출하면 페이지에 

   나오는 시간은 06:11:63 이런식으로 전혀 다르게 나오는 경우가 있다. 

   이러한 경우에는date_default_timezone_set() 함수를 사용한다.

   ex) date_default_timezone_set(‘Asia/Seoul’);


 $times = mktime() : 특정날짜를 timestamp 형식으로 변환할때 사용한다. 

    mktime()함수는 PHP5.1 부터 더 이상 사용을 권장하지 않는다.

    ex) $datain[‘cp_login_time’] = date(‘Y-m-d H:i:s’,$times);


 특정 날짜에서 전날, 다음날을 구하고 싶은 경우 날짜를 분리해서 넣어주면 된다.

   ex) function get_yesterday( $day ){

        $y = substr( $day, 0, 4 );
        $m = substr( $day, 4, 2 );
        $d = substr( $day, 6, 2 );
        return date(“Ymd”, mktime(0,0,0, $m, $d-1, $y));

       }

'IT.info > 개발' 카테고리의 다른 글

[Jquery]셀렉터  (0) 2015.07.07
[Codeigniter]아이디저장/로그인상태유지  (0) 2015.06.25
[Codeigniter]코드이그네이터 서버이관  (0) 2015.06.25
[Codeigniter]에러메세지  (0) 2015.06.24
[Codeigniter]컨트롤러 불러오기  (0) 2015.06.23

컨트롤러 불러오기


controller에서 다른 controller를 불러와 사용해보았다.




 장점


1) redirect대신에 contoller를 불러와 view를 load 시킬 수 있으며, 필요에 따라 컨트롤러 기능을 더욱 활용할 수 있다.
2) 공통함수의 경우 해당 컨트롤러에 함수를 만든 후, 불러와 쓸 수 있다.


 단점


1) library 혹은 helper 사용 시, contoller load 부분 위에다 선언을 해주어야 된다. 
2) model을 불러와 사용해야 될 경우 직접 load는 불가능 하고, contoller 내에서 load 후 이중으로 불러와 사용하여야 한다. [ex.$this->page(contoller)->db_model(model)->function()] 


 사용결과


특정의 경우에서만 contoller를 불러와 사용하고, model 혹은 공통된 함수는 helper또는 library를 이용하여 쓰는것이 편리한 방법 같다.



'IT.info > 개발' 카테고리의 다른 글

[Jquery]셀렉터  (0) 2015.07.07
[Codeigniter]아이디저장/로그인상태유지  (0) 2015.06.25
[Codeigniter]코드이그네이터 서버이관  (0) 2015.06.25
[Codeigniter]에러메세지  (0) 2015.06.24
[PHP]날짜/시간 출력-서버시간  (0) 2015.06.24

+ Recent posts