2009-10-27 4 views
1

이 문제에 접근하는 방법을 잘 모르겠습니다.데이터베이스 스키마 디자인 : 확인되지 않은 초대는 어떻게해야합니까?

초대 전용 등록 시스템이있는 웹 응용 프로그램을 만들고 있습니다. 관리자는 사용자에게 이메일 초대장을 보내고 사용자는 링크를 클릭하여 이메일 주소에 링크 된 계정을 만들 수있는 페이지로 이동합니다.

초기 생각은 내 users 테이블에 verified 열이 false으로 표시된 행을 삽입하는 것이 었습니다. 문제는 사용자 이름과 암호가 필수 입력란 및 사용자 이름이 고유해야한다는 것입니다. 그래서 나중에 채울 빈 행을 삽입 할 수 없습니다.

초대장을위한 별도의 테이블을 만들어야합니까? 이 유형의 시나리오에 접근하는 가장 좋은 방법은 무엇입니까?

업데이트 : 관리자는 이름, 성, 이메일 주소 및 사용자 역할 (권한)을 입력합니다. 그래서 초대장 테이블에이 모든 것을 저장해야합니다. 이메일을 다시 보내야하는 경우 보낸 날짜를 저장하고 그 값을 업데이트 할 수도 있습니다.

답변

5

예, 초대장을 관리하기 위해 별도의 표를 만듭니다.

다음 초대장이 수락되면 몇 가지 선택 사항이 있습니다. 먼저 추적이나 "가계도"또는 다른 역사적 목적을 위해 원래 초대장과의 연관성을 유지해야하는지 결정해야합니다.

그렇다면 어떻게 할 것인지 결정해야합니다. 초대장을 삭제하고 사용자 기록이있는 관련 정보를 저장 하시겠습니까? 초대장을 보관하고 외래 키를 설정 하시겠습니까?

작성하려는 시스템에 대해 더 많이 알고 있으면 좀 더 미세 조정 된 조언을 드릴 수 있습니다.

+0

내 질문에 대한 업데이트를 추가했습니다. 더 구체적인 질문이 있으면 부탁드립니다. – Andrew

+0

그래, 나는 정말로 아무것도 추가 할 필요가 없다. 당신은 역사적인 정보가 당신이 초대 -> 등록 과정 후에 무엇을 중요시해야하는지에 대해 스스로에게 물어볼 것입니다. –

+0

감사합니다. 나는 당신의 대답까지 역사와 어떻게 해야할지 생각하지 않았습니다. – Andrew

4

초대장이 분실되거나, 우연히 삭제되거나, 기타 이유로 호스트가 사용 가능하지 않고 다시 보내야하는 시나리오를 고려해야합니다.

또한 초대장은 등록과 별도의 항목입니다. 내 생각에 초대장을 추적하기 위해 별도의 테이블을 만들어서 누가 등록했는지 (누가 초대했는지) 확인해야한다고 생각합니다.

+0

답변 해 주셔서 감사합니다. 당신의 대답까지 잃어버린/삭제 된 초대 이메일에 대해서는 생각하지 않았습니다. – Andrew

0

몇 가지 방법이 있습니다. 평가 단계가 끝나면 다른 테이블을 생성하는 별도의 경로로 이동하는 경우 실제 사용자 테이블로 평가 사용자를 복사해야합니까? 사용자 이름을 사용자 테이블에 항목을 처리하도록 프로그래밍 한 특수하게 조작 된 GUID로 기본값을 설정할 수 있습니다.

+0

평가 단계는 무엇을 의미합니까? – Andrew

+0

나는 jonh가 당신이 초대 베타 버전을하고 있다고 가정하고 있다고 생각한다. 구글이 좋아할 것처럼, 그리고 어느 시점에서 당신의 시스템은 모두 개방 될 것이다. 나는 당신의 포스트 대신에 너의 체계가 항상 초대에서만인지 인상을 얻는다. –

+0

예, 초대 전용 시스템입니다. 대중에게 공개하지 마십시오. – Andrew

0

초대장에 별도의 테이블을 권하고 싶습니다. 귀하의 초대장은 기본적으로 누군가가 등록 할 수 있도록 해주는 토큰임을 분명히합니다.

+0

토큰, 정확히! 사용자가 자신의 이메일 주소 (토큰)가 목록 – Andrew

+0

에 추가되지 않은 한 등록 할 수 없습니다. 최근 업데이트에 비추어 내 의견이 바뀌 었다고 생각합니다. 이전에는 초대장을 보낼 때 지정한 계정 정보가 많다는 것이 명확하지 않았습니다. 관리자가 이미 자신의 이름, 이메일, 역할 등을 알고 있다면 사용자를 만들고 '검증 된'열 아이디어로 돌아갈 수 있습니다. 이메일 주소를 사용자 이름으로 항상 사용할 수 있습니다. 등록 확인/완료 후에 사용자 이름을 변경할 수 있습니다. – HackedByChinese

0

별도의 테이블이 나에게 가장 적합합니다. 그러면 사용자 테이블에서 데이터 무결성을 유지할 수 있고보다 읽기 쉬운 데이터 모델을 제공 할 수 있습니다. '초대장이 초대장 테이블에 들어간다'는 말은 '초대장은 사용자 테이블에 있지만 인증 된 열은 거짓으로 설정됩니다.'보다 쉽습니다.

관련 문제