2013-08-14 1 views
0

나는 간단한 블로그를위한 mysql 데이터베이스를 만들 때 처음으로 노력하고있다. 나는 외래 키와 그들의 적절한 관계를 이해하는 데 어려움을 겪고있다. 누군가가 "평신도"의 용어로 설명 할 수 있다면 나는 매우 행복 할 것이다.Mysql 외래 키 사용

user_type 필드를 만들고 INT로 설정 한 필드의 기본 사항 (사용자 이름, 전자 메일, 암호 등)이있는 사용자라는 테이블이 있습니다. user_type이라는 해당 테이블을 만들고 두 개의 필드를 추가했습니다 (하나는 type_id = 기본 키이고 다른 하나는 type = VARCHAR 임).

내 질문은 : 나는 USER_TYPE 테이블에서 TYPE_ID를 참조하는 사용자 테이블에서 USER_TYPE의 INT에서 외래 키 링크를 설정하여 두 테이블을 함께 연결 내가 이해 수정

건가요?

+1

머리를 벽에 부딪 치기 전에 : InnoDB 테이블을 사용해야합니다. 'MyISAM'을 사용하면 외래 키가 강제되지 않습니다 (그러나 당신은 그것에 대해 경고되지 않습니다). –

+0

정보 주셔서 감사합니다. – user1888564

답변

1

귀하의 이해가 정확합니다. SQL FOREIGN KEY Constraint

다른 테이블의 PRIMARY KEY 하나 개의 테이블 점에서 FOREIGN KEY에서

.

그래서 당신의 예에서 테이블 user_types의 user_type ID는 기본 키가 될 것이며, 테이블 사용자의 user_type INT는 외래 키 항목이 될 것입니다.

이는 테이블 user_types의 항목이 테이블 사용자에서 사용될 수 있기 전에 존재해야한다는 것을 강요합니다. 당신은 사용자로부터 참조

+0

CASCADE, NO ACTION 등으로 무엇이든해야하나요 아니면 그냥 비워 둘 수 있습니까? – user1888564

+0

http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html –

+0

감사합니다.하지만 너무 기술적이며 3 학년 설명이 필요합니까? – user1888564

0

는 USERTYPE합니다 :

n은 사용자가 하나 USER_TYPE 당신은 SQL 문을 사용하여 테이블을 작성하는 경우는 사용자 부분에서이 같은 것을 포함해야한다

:

DROP TABLE IF EXISTS `user` ; 

CREATE TABLE IF NOT EXISTS `user` (
    `ID` INT NOT NULL AUTO_INCREMENT , 
    `username` VARCHAR(55) NOT NULL , 
    `email` VARCHAR(55) NOT NULL , 
    `password` VARCHAR(55) NOT NULL , 
    `user_type` INT NOT NULL , 
    PRIMARY KEY (`ID`) , 
    INDEX `user_to_usertype_idx` (`user_type` ASC) , 
    CONSTRAINT `user_to_usertype` 
    FOREIGN KEY (`user_type`) 
    REFERENCES `user_type` (`type_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 

ENGINE = InnoDB; 

사용자를 만들기 전에 user_type을 만들어야합니다. 그렇지 않으면 오류가 발생합니다.

+0

당신이 말할 때 - 당신은 먼저 user_type 필드를 가지고 시작해야만하는 테이블을 생성했거나 모든 SQL 문을 가지고 있다는 것을 의미합니까? – user1888564

+0

제약 조건이있는 참조를 원하면 테이블을 먼저 만들어야합니다. user_type 테이블이 없으면 제약 조건이 생성되지 않고 u가 오류를 발생시킵니다. 제약없이 작업 할 수도 있지만 잘못된 user_type (user_type이 없을 수도 있음)이있는 사용자가있을 수 있습니다. 제약 조건은 데이터베이스에서 깨끗한 데이터를 얻을 수 있도록 도와줍니다. – DennisH

+0

정보 주셔서 감사합니다. – user1888564