2014-02-27 4 views
0

두 개의 열이있는 경우가 있지만 그 값은 둘 다 고유해야합니다. 그래서 당신은 아래 표를열마다 고유 한 값

CREATE TABLE user_details(
    id int(11) AUTO_INCREMENT PRIMARY KEY, 
    email varchar(200), 
    secondary_email varchar(200), 
    unique key(email), 
    unique key(secondary_email) 
); 

나는, 이메일 emailsecondary_email 열을 통해 반복 할 수 없습니다되어 원하는 기능을 고려할 수 있습니다. 따라서 주어진 이메일은 한 명의 사용자와 만 연결할 수 있습니다. 우리는 트리거없이 MySQL에서이를 구현할 수 있습니까? 현재는 애플리케이션 로직을 통해 관리하고 있으며, 다른 팀의 모듈을 통해 다른 사람들이 테이블에 데이터를 삽입/업데이트 할 때 종종 처리하기가 매우 어렵습니다.

또한 추가하려면 내 사용자 테이블이 수백만 개의 레코드 순이며 보조 모바일 옵션도 있습니다. 2x 크기의 두 번째 (또는 세 번째) 테이블을 만들고 항상 두 개 (또는 세 개의) 테이블을 결합하면 내 경우가 더욱 악화됩니다. user_details_id, email_address에서 기본 키와

user_details_email 
------------------ 
user_details_id (FK) 
email_address 

: 당신이 당신의 디자인을 정상화 경우, 사용자 세부 사항을 참조하는 전자 메일 테이블을 가질 수

+0

전자 메일 용 테이블 만들기 (id, email_id) –

답변

1

모든 입력에 미리

감사합니다 .. . 선택적으로 부울 열을 추가하여 기본 열로 플래그 할 수 있습니다.

+0

질문에 그 자체를 추가했습니다. 내 테이블이 너무 커서 사용자의 기본 세부 사항을 얻기 위해 2/3 테이블을 항상 조인 할 수는 없습니다. – georgecj11

+0

@cjg 그러면 방아쇠가 필요합니다. 하나를 사용하지 않으려면 데이터베이스를 적절히 설계하십시오. – Kermit

+0

예, 동의합니다. 그러나 트리거가 다시 느려질 수 있습니다. (이 테이블에서 하루에 약 1M 인서트를 사용하고 있습니다.) – georgecj11