2014-04-22 1 views
1

나는 파일 호스팅 서비스를 만들고 있지만, 지금은 등록 할 때 계정 이메일 활성화 부분을 만들고 있습니다. 그래서 데이터베이스 구조를 찾아야했습니다.관계형 데이터베이스 구조는 언제 사용합니까?

그리고 지금 그것의 :

users 
    id 
    first_name 
    last_name 
    email 
    password 
    since 
    active 
    hash_activate 

하지만 너무 관계형 데이터베이스처럼 작업을 수행 할 수 있습니다

users 
    id 
    first_name 
    last_name 
    email 
    password 
    since 

activation 
    id 
    user_id 
    hash 
    active 

은 무엇 그것에 대해 이동하는 가장 좋은 방법이 있을까요? 그리고 왜?

답변

0

모든 사용자가 한 번에 활성화 된 하나의 활성화 해시가있는 경우 사용자와 동일한 테이블에 저장하는 것이 가능합니다.

단점은 사용자가 잠시 동안 활성화 해시를 사용한다는 것입니다. 따라서 사용자 레코드를 작게 유지하려면 해시를 별도의 테이블에 저장할 수 있습니다. 사용자 레코드를 작게 유지하면 성능이 향상됩니다. 이 경우 active 열이 없습니다. 비활성 해시 만 삭제하면됩니다.

사용자 테이블에 활성화 열을 저장하는 경우 이름으로 열을 선택했는지 확인하십시오. 예 : 대부분의 경우에, 당신은이 작업을 수행 할 것입니다 :

SELECT id, first_name, last_name, email, password 
FROM users 

대신 :

SELECT * 
FROM users 

당신은 당신이 그들을 필요로 할 때 활성화 열을 선택하려는 경우에만 것입니다.

+0

물론 어쨌든 프로덕션 쿼리에서 select *를 사용하면 안됩니다. – HLGEM

+0

실제로 사용자가 실제로 자신의 계정을 활성화했는지 여부를 확인하기 위해 여전히 '활성'열이 있습니다. 그렇지 않으면 등록 후 N 일 후에 사용자가 자신의 계정을 활성화하지 않았기 때문에 전체 사용자 레코드가 삭제됩니다. –

+0

@KidDiamond, 의미가 있습니다. 'active'가 사용자를위한 것이라면, 사용자 테이블에 저장하십시오. 나는 그것이 해시를위한 것이라고 생각했다. –

0

한 명의 사용자가 여러 번 활성화 할 수있는 경우에만 두 번째 방법이 유용합니다. 이것이 진실인지 거짓인지는 말하지 않으므로 아마도 당신에게 조언 할 수 없습니다.

+0

한 명의 사용자 만 계정 활성화 해시를 가질 수 있습니다. –

+0

그런 다음 첫 번째 옵션을 단일 테이블과 함께 사용하십시오. –

0

활성화가 일시적인 것이거나 해시를 사용하여 누군가를 활성으로 정의한 경우 다른 것으로 설정하십시오. 그렇지 않으면, 그것은 정말로 중요하지 않습니다.

그러나 더 많은 정보가 없으면 어느 쪽도 다른 것보다 필수적으로 관계가 없습니다. 각 행의 값 조합에 고유 제한 조건을 지정하고 각 열을 NOT NULL 제한 조건으로 설정하면 첫 번째 열은 매우 관계형이됩니다.

시간이 지남에 따라 데이터의 정확성이 응용 프로그램이 수행하는 것보다 중요하거나 더 중요하지 않은 경우 및/또는 데이터 구조의 정확성/일관성이 올바른 작업에 중요 할 때 관계형 디자인을 사용합니다 응용 프로그램의 자체 작업에 의해 반드시 보장되는 것은 아닙니다.