2012. 10. 12. 16:40

제약조건 (Constraint)

제약조건이란 테이블에 부적절한 자료가 입력되는 것을 방지하기 위해서 여러 가지 규칙을 적용해 놓는거라 생각하면 됩니다. 간단하게 테이블안에서 테이터의 성격을 정의하는 것이 바로 제약조건 입니다.

데이터의 무결성 유지를 위하여 사용자가 지정할 수 있는 성질 입니다.

모든 CONSTRAINT는 데이터 사전(DICTIONARY)에 저장 됩니다.

★ 의미있는 이름을 부여했다면 CONSTRAINT를 쉽게 참조할 수 있습니다.

★ 표준 객체 명명법을 따르는 것이 좋습니다.

★ 제약조건은 테이블을 생성할 당시에 지정할 수도 있고, 테이블 생성 후 구조변경(ALTER)명령어를
통해서도 추가가 가능합니다.

★ NOT NULL제약조건은 반드시 컬럼 레벨에서만 정의가 가능합니다.


NOT NULL 조건
: 컬럼을 필수 필드화 시킬 때 사용합니다.


SQL> CREATE TABLE emp(
ename VARCHAR2(20) CONSTRAINT emp_nn_ename NOT NULL );
이런식으로 하면 ename 컬럼에는 꼭 데이터를 입력해야만 합니다.

여기서 emp_nn_ename은 (테이블이름_제약조건이름_컬럼이름) 형식으로
CONSTRAINT NAME을 정의 합니다.

CONSTRAINT NAME은 USER_CONSTRAINTS 뷰(VIEW)를 통해서 확인할수 있습니다.

SQL> SELECT CONSTRAINT_NAME
FROM USER_CONSTRAINTS
WHERE TABLE_NAME ='EMP' ;

CONSTRAINT_NAME
-----------------------
emp_nn_ename 이런 식으로 제약사항의 이름을 확인할수 있습니다.



UNIQUE 조건
:
데이터의 유일성을 보장(중복되는 데이터가 존재할수 없습니다.)
자동으로 index가 생성됩니다.


SQL> ALTER TABLE emp
ADD CONSTRAINT emp_uk_deptno UNIQUE (deptno) ;

테이블이 변경되었습니다.

이런식으로 하면 deptno 컬럼에 중복된 데이터가 들어갈 수 없습니다.

-- 제약 조건의 삭제

SQL>ALTER TABLE emp
DROP CONSTRAINT emp_uk_deptno ;

테이블이 변경되었습니다.



CHECK 조건 :
컬럼의 값을 어떤 특정 범위로 제한할 수 있습니다.


SQL>ALTER TABLE emp
ADD CONSTRAINT emp_ck_comm
CHECK (comm >= 10 AND comm <= 100000) ;

테이블이 변경되었습니다.

comm컬럼은 체크조건에서 제한을 하고 있으므로 1에서 100까지의 값만을 가질수 있습니다.
체크 조건에서는 IN 연산자를 사용할수 있습니다.


-- 제약 조건의 삭제

SQL>ALTER TABLE emp
DROP CONSTRAINT emp_ck_comm ;

테이블이 변경되었습니다.

SQL> ALTER TABLE emp
ADD CONSTRAINT emp_ck_comm
CHECK (comm IN (10000,20000,30000,40000,50000)) ;

테이블이 변경되었습니다.

comm 컬럼은 10000,20000,30000,40000,50000의 값만을 가질수 있습니다.



DEFAULT
(컬럼 기본값) 지정 : 데이터 입력시에 입력을 하지 않아도 지정된 값이 입력될수 있습니다.

SQL>CREATE TABLE emp(
hiredate DATE DEFAULT SYSDATE ) ;

이런식으로 하면 hiredate 컬럼에 INSERT를 하지 않아도 오늘 날짜가 들어갑니다.



PRIMARY KEY 지정
: 기본키는 UNIQUE 와 NOT NULL의 결합과 같습니다.

기본키는 그 데이터 행을 대표하는 컬럼으로서의 역할을 수행하여 다른 테이블에서
외래키들이 참조할 수 있는 키로서의 자격을 가지고 있습니다. 이를 참조 무결성이라 합니다
.

UNIQUE 조건과 마찬가지로 기본키를 정의하면 자동으로 인덱스를 생성하며
그 이름은 기본 키 제약 조건의 이름과 같습니다.


INDEX KEY
: 검색 키로서 검색 속도를 향상 시킴니다.
(UNIQUE,PRIMARY KEY 생성시 자동적으로 생김니다.)

SQL>CREATE TABLE emp(
empno NUMBER CONSTRAINT emp_pk_empno PRIMARY KEY ) ;

이런식으로 하면 empno 컬럼에 UNIQUE 제약조건과 NOT NULL제약조건을 가지게 됩니다.



FOREIGN KEY(외래 키)지정
: 기본키를 참조하는 컬럼 또는 컬럼들의 집합입니다.

※ 외래키를 가지는 컬럼의 데이터 형은 외뢰키가 참조하는 기본키의 컬럼과 데이터형이
일치해야 합니다.
이를 어기면 참조무결성 제약에의해 테이블을 생성할수 없습니다.

외래키에 의해 참조되고 있는 기본 키는 삭제할수 없다.

ON DELETE CASCADE 연산자와 함께 정의된 외래키의 데이터는 그 기본키가 삭제 될 때 같이
삭제됩니다.


SQL>ALTER TABLE emp ADD CONSTRAINT emp_fk_deptno
FOREIGN KEY (deptno) REFERENCES dept(deptno)

테이블이 변경되었습니다.

이런식으로 하면 emp 테이블의 deptno 컬럼은 dept 테이블에 deptno 컬럼을 참조하는
외래키를 가지게 됩
니다.

직접 변경해 보세요..


제약 조건의 확인

USER_CONS_COLUMNS : 컬럼에 할당된 제약 조건을 볼 수 있습니다.
USER_CONSTRAINTS : 유저가 소유한 모든 제약 조건을 불 수 있습니다.
이 두개의 데이터사전을 참조 하면 됩니다.

SQL> SELECT SUBSTR(A.COLUMN_NAME,1,15) COLUMN_NAME,  
     DECODE(B.CONSTRAINT_TYPE,
'P','PRIMARY KEY',
           'U','UNIQUE KEY',
           'C','CHECK OR NOT NULL',
'R','FOREIGN KEY') CONSTRAINT_TYPE,  
     A.CONSTRAINT_NAME   CONSTRAINT_NAME  
FROM  USER_CONS_COLUMNS  A,  USER_CONSTRAINTS  B  
WHERE  A.TABLE_NAME = UPPER('&table_name')  
AND  A.TABLE_NAME = B.TABLE_NAME  
AND  A.CONSTRAINT_NAME = B.CONSTRAINT_NAME  
ORDER BY 1;  

-- 테이블 명을 입력 하면 됩니다.
table_name의 값을 입력하십시오: emp2


COLUMN_NAME CONSTRAINT_TYPE CONSTRAINT_NAME
------------------------------ ----------------- --------------
DEPTNO CHECK OR NOT NULL SYS_C001362
FOREIGN KEY EMP2_FK_DEPTNO
EMPNO PRIMARY KEY EMP2_PK_EMPNO
ENAME CHECK OR NOT NULL EMP2_NN_ENAME
MGR UNIQUE KEY EMP2_UP_MGR

================================================
* Oracle Community OracleClub.com
* http://www.oracleclub.com
* http://www.oramaster.net
* 운영자 : 김정식 (oramaster _at_ empal.com)
================================================


- 제약조건의 기능은 MS-SQL도 비슷하지만 구문은 조금 다를 수 있다.

 

 

 

http://blog.naver.com/wangno/90152515426

Posted by 물색없는세상
2012. 9. 24. 18:12

jquery 플러그인 중 하나인 jquery.validator 의 옵션을 분석(해석?)해 본 겁니다.
뭐 별 쓸데도 없는 문서지만 기왕 정리한거 저 같이 영어레벨이 쎄멘바닥인 분들한테는 조금이나마 도움이 될까 하여 올려봅니다.
스프링노트에 적어두었던걸 그대로 옮긴거라 경어가 아닌점 양해바랍니다.
중간 중간 몰라서 분석 못한것도 있구요 잘못된 부분이 있을지도 모릅니다. ㅠㅠ 말씀해 주시면 수정하겠습니다.

jquery.validator

Option 정리

debug

기본값: false

디버그 할 수 있도록 입력값이 유효해도 submit 하지 않는다

$(".selector").validate({
debug: true
})

submitHandler

폼이 submit 될때 마지막으로 뭔가 할 수 있도록 핸들을 넘겨준다.

$(".selector").validate({
submitHandler: function(form) {
$(form).ajaxSubmit();
}
})

invalidHandler

입력값이 잘못된 상태에서 submit 할때 자체처리하기전 사용자에게 핸들을 넘겨준다.

<arguments>

form

validator

ignore

유효성검사에서 제외할 Element를 지정한다.

$("#myform").validate({
ignore: ".ignore"
})

rules

체크할 항목들의 룰을 설정한다.

$(".selector").validate({
rules: {
// simple rule, converted to {required:true}
name: "required",
// compound rule
email: {
required: true,
email: true
}
}
})

$(".selector").validate({
rules: {
contact: {
required: true,
email: {
depends: function(element) {
return $("#contactform_email:checked")
}
}
}
}
})

message

무효한 필드일때 왜 무효한지 설명하는 메세지를 설정한다.

$(".selector").validate({
rules: {
name: "required",
email: {
required: true,
email: true
}
},
messages: {
name: "Please specify your name",
email: {
required: "We need your email address to contact you",
email: "Your email address must be in the format of name@domain.com"
}
} })

$(".selector").validate({
rules: {
name: {
required: true,
minlength: 2
}
},
messages: {
name: {
required: "We need your email address to contact you",
minlength: jQuery.format("At least {0} characters required!")
}
} })

groups

다수의 Element를 그룹을 지어서 한쪽에서 에러메세지를 보여준다.

임의의 위치를 설정하기 위해서는 errorPlacement 안에서 할 수 있고 따로 설정이 없을경우 지정한 마지막 엘리먼트끝에 출력된다.

$("#myform").validate({
groups: {
username: "fname lname"
},
errorPlacement: function(error, element) {
if (element.attr("name") == "fname"
|| element.attr("name") == "lname" )
error.insertAfter("#lastname");
else
error.insertAfter(element);
},
debug:true
})

onsubmit

유효성체크 없이 무조건 submit 한다

$(".selector").validate({
onsubmit: false
})

onfocusout

기본값 : true

포커스가 떠날때 유효성 검사를 한다. onkeyup도 false가 되어 있어야 눈으로 체감할 수 있다.

$(".selector").validate({
onfocusout: false
})

onkeyup

기본값 : true

키를 뗄때 유효성검사를 한다.

$(".selector").validate({
onkeyup: false
})

onclick

기본값 : true

checkbox 와 radio 버튼이 클릭될때 유효성 검사를 한다.

$(".selector").validate({
onclick: false
})

focusInvalid

기본값 : true

유효성 검사 후 포커스를 해당 무효필드에 둘 것인가 여부

$(".selector").validate({
focusInvalid: false
})

focusCleanup

기본값 : false

true 로 설정되어 있을 경우 잘못된 필드에 포커스가 가면 에러메세지를 지운다

$(".selector").validate({
focusCleanup: true
})

meta

엘리먼트에 class="..." 형식으로 지정하려고 하는데 다른 플러그인과 겹칠경우 이를 {[이름]{옵션1, 옵션2}} 와 같이 싸서 이용할 수 있도록 한다 (이건 정확한건지는 모르겠음)

$("#myform").validate({
meta: "validate",
submitHandler: function() { alert("Submitted!") }
})

HTML : <input type="text" name="email" class="{validate:{ required: true, email:true }}" />  

errorClass

기본값 : error

에러메세지의 CSS 클래스이름을 설정한다.

기본값은 .error 로 출력되는데 이 class 명을 바꿀 수 있다.

예를 들어 기본값일 경우에는 CSS 정의에서

.error{color:#00f}

이런식으로 사용할 수 있는데 만약 class 명을 invalid 라고 바꿨다면

.invalid{color:#00f}

라고 사용할 수 있다.

$(".selector").validate({
errorClass: "invalid"
})
validClass

유효성체크에서 성공한 값들의 클래스이름을 설정한다.

errorClass 와 같은 개념이다.

$(".selector").validate({
validClass: "success"
})

errorElement

에러메시지를 출력하는 엘리먼트의 태그요소를 결정한다.

errorClass의 개념과 같으나 HTML 태그를 바꾼다.

$(".selector").validate({
errorElement: "em"
})

wrapper

에러 메세지들을 임의의 태그로 묶는다.

만약 에러메세지들이 아래와 같이 생성되었다면

<label class='error'>This field is required</label>

<label class='error'>Your lastname, please!</label>

wraper:'li' 라고 했을때

<li>

<label class='error'>This field is required</label>

<label class='error'>Your lastname, please!</label>

</li>

로 묶어버린다. 이 기능은 주로 errorLabelContainer 와 같이 사용된다.

$(".selector").validate({
wrapper: "li"
})

errorLabelContainer

에러메세지들의 해당 무효필드 옆에 보여주는게 아니라 한곳에 묶어 보여줄때 이용된다.

출력을 원하는 위치의 엘리먼트 아이디를 써주면 된다.

$("#myform").validate({
errorLabelContainer: "#messageBox",
wrapper: "li",
submitHandler: function() { alert("Submitted!") }
})

errorContainer

기존 상세 에러메세지 외에 대표적 에러메세지를 보여줄때 사용한다.

예를 들어 아래와 같다.

아이디 : 아이디가 입력되지 않았습니다. <== 기존 상세에러메세지

비밀번호 : 비밀번호가 입력되지 않았습니다 <== 기존 상세에러메세지

***************************************************************

입력폼에 에러가 있습니다. 입력폼을 다시 확인하세요 <== 이 부분에 해당

***************************************************************

지정한 상세에러메세지가 모두 사라질 때까지 이 메세지는 사라지지 않는다.

errorContainer 로 선언한 것 중 errorLabelContainer 로 선언되지 않은 것이 이에 해당한다.

해당되는 메세지는 자동으로 입력되는 메세지가 아니다. 이건 원본의 데모페이지를 봐야 이해가 가능할거 같다.

http://docs.jquery.com/Plugins/Validation/validate 여기서 Options 탭을 눌러 검색

showErrors

에러처리를 하기전에 사용자에게 핸들을 넘겨준다. 그러므로 에러처리를 override 하거나 선행처리할 때 사용할 수 있다. 맨아래 팁이 이걸 응용한거다.

$(".selector").validate({
showErrors: function(errorMap, errorList) {
$("#summary").html("Your form contains "
+ this.numberOfInvalids()
+ " errors, see details below.");
this.defaultShowErrors();
} })

errorPlacement

기본값 : 무효한 필드 바로 뒤

에러 메세지의 위치를 지정할 수 있다. 이건 실험을 안해봤음. 뭐 되겠지 ^ ^;

$("#myform").validate({
errorPlacement: function(error, element) {
error.appendTo( element.parent("td").next("td") );
},
debug:true
})

success

이건 validClass 하고 똑같은 효과던데 차이가 뭔지 잘 모르겠다. 나중에 알아봐야겠다.. ㅜㅜ

$("#myform").validate({
success: "valid",
submitHandler: function() { alert("Submitted!") }
})

highlight

기본값 : errorClass 를 추가시킨다

필드가 Invalid 됐을때 어떻게 하이라이트 시킬까를 결정할 수 있다.

예를 들어 아래와 같이 페이드 인, 아웃 효과를 주는것도 가능하다 ^^

$(".selector").validate({
highlight: function(element, errorClass) {
$(element).fadeOut(function() {
$(element).fadeIn();
});
}
})

unhighlight

기본값 : errorClass 를 제거한다.

highlight 된걸 다시 되돌릴때 무엇을 할까를 지정할 수 있다.

아규먼트는 highlight하고 동일하다.

ignoreTitle

별 필요없는 거 같다. 뭐 제거될거란 이야기인가? ㅋ 사실 잘 모르겠다 ㅜㅜ

$(".selector").validate({
ignoreTitle: true
})




 

※ 팁 : invalidate 할때 페이지에 메세지를 뿌리는게 아니라 기존방식대로 경고창(alert)으로 띄우고 싶다면 아래처럼 옵션을 주면 된다.

클라이언트들이 구식방식을 선호할때가 있음 -_-;;;

jQuery.validator.setDefaults({
onkeyup:false,
onclick:false,
onfocusout:false,
showErrors:function(errorMap, errorList){
var caption = $(errorList[0].element).attr('caption') || $(errorList[0].element).attr('name');
alert('[' + caption + ']' + errorList[0].message);
}
});
< input type="text" name="mb_name" caption="이름" class="required" /> caption 은 임의로 정한 attribute 명입니다. caption="이름" 이런식으로 주면 됨

 

http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=72358

 

http://phpschool.com/link/tipntech/72358

Posted by 물색없는세상
2012. 9. 24. 18:07

eclipse를 사용하다 보면 jquery를 받아서 사용하다보면 Script의 Validate 오류가 나서 컴파일 시, 프로젝트가 정상적으로 작동하지 않을 경우가 있다.


이 때, 해결할 수 있는 방법은 아래와 같다.


[해당 project] --> [Properties] --> [JavaScript] --> [Include Path] --> [Source] --> [Excluded] --> [Edit] --> [Exclusion patterns] --> ["**/jquery*.js"를 입력 ]

 

http://biyam.tistory.com/24

Posted by 물색없는세상