나는 똑같은 일을하고 있으며 여기에 내가 한 일이 있습니다.
이름, 주소, 이메일 및 번호에 대해 별도의 테이블을 사용했으며 각각 기본 클러스터 키인 Name 테이블을 제외한 모든 항목에 대한 외래 키인 NameID 열이 있습니다. 비즈니스 항목과 개인 항목을 허용하기 위해 LastName과 FirstName 대신 MainName과 FirstName을 사용했지만 그럴 필요가 없을 수도 있습니다.
NameID 열은 32000 개 이상의 항목을 만들지 않을 것이기 때문에 모든 테이블에서 smallint가됩니다. 그 밖의 거의 모든 것은 저장하려는 항목 (생일, 댓글, 이메일, 정말 긴 이름)에 따라 20에서 200까지 varchar (n)입니다. 그것은 당신이 어떤 종류의 물건을 저장하고 있는지에 달려 있습니다.
Numbers 테이블은 제가 그것에서 벗어나는 곳입니다. NameID, Phone #, CountryCode, Extension 및 PhoneType 레이블이 지정된 5 개의 열을 갖도록 설정했습니다. 이미 NameID에 대해 논의했습니다. Phone #은 varchar (12)이며 다음과 같은 확인 제약 조건이 있습니다. CHECK (Phone # like '[0-9] [0-9] [0-9]-[0-9] [0-9] [0 -9]-[0-9] [0-9] [0-9] [0-9] '). 이렇게하면 내가 원하는 것만 데이터베이스에 저장되고 데이터가 매우 일관되게 유지됩니다. 내가 nullable smallints라고 부르는 확장 및 국가 코드이지만 원하는 경우 varchar가 될 수 있습니다. PhoneType은 varchar (20)이며 null을 허용하지 않습니다.
도움이 되었기를 바랍니다!