2016-07-22 2 views
0

사용자 등록 시스템을 만들려고합니다. 등록 과정에서 사용자는 다른 취미를 선택할 수 있습니다. 나는 다중 가치 속성 인 '취미'를 관리해야한다. 사용자 테이블의 기본 키는 'username'(varchar)입니다. 나는 '취미'라는 또 다른 테이블을 만들려고 생각하고 있었는데 어떻게 각 사용자를 그 hoobies에 연결할 수 있습니까? 어떤 제안?다중 값 속성 관리 SQL

감사합니다.

+0

연관 테이블 또는 [Junction Tables] (http://stackoverflow.com/a/32620163). 그래서 일대 다 또는 다 대다. – Drew

답변

1

세 개의 테이블이 필요합니다. 첫 번째 권장 사항은 기본 키를 사용자 이름이 아닌 정수 (자동 증가 권장)로 변경하는 것입니다. 이름은 키처럼 잘 작동하지 않습니다.

두 번째 테이블은 사용자 ID와 취미를 연결하는 사용자 취미 테이블입니다. hobby_id와 user_id를 여기 두 개의 필드로 사용하는 것이 좋습니다 ... 매핑 테이블이며 사용자가 취미를 제거 할 수 있기를 원하지만 원하지 않으면 ID 및 가능하면 날짜 필드/유효한 필드 만 포함해야합니다. 실제 데이터를 삭제하십시오. 2 개의 필드를 기본 키 user_id + hobby_id로 사용하십시오.

마지막 표는 hobby_id를 실제 취미로 매핑하는 취미입니다. Hobby_id (기본 키, int 및 autoincrement 선호) 및 취미 이름과 그 취미에 대해 지정하려는 정보.

의미가 있습니까? 이 설정을 통해 사용자는 여러 개의 취미를 가지고 중복 데이터를 유지할 수 있습니다.

+0

데이터 및 목적에 따라 세 번째 테이블을 건너 뛰고 취미 데이터를 사용자 취미 테이블에 직접 설정할 수도 있습니다. 'hobbyId | userId | hobbyName | hobbyDescription' ...'choose '는 사용자가 선택할 수있는 별도의 취미 테이블이 있어야 함을 의미하므로 nvm – Philipp

+0

@Philipp - 작동하지만 많이 떠난다. 여러 사용자가 동일한 취미를 가진 경우 반복적으로 hobbyname 및 설명 텍스트를 입력해야하므로 중복 된 데이터가 시스템에 저장됩니다. 취미 테이블에서 quieries를 더 느리게 만들 것입니다 ... hobby_id = 5는 hobbyname = 'stackexchange'보다 훨씬 더 효과적입니다. – Twelfth