2009-10-20 5 views
0

예를 들어 데이터베이스에 여러 값을 표시 할 수 있는지 궁금합니다. 쿠키, 캔디, 사과, 빵과 같은 음식의 유형을 입력하라는 양식을 작성할 사용자가 있다고 가정 해 보겠습니다. 등등.MySQL 데이터베이스에 여러 값을 표시하는 방법은 무엇입니까?

food라는 동일한 필드에서 MySQL 데이터베이스에 어떻게 저장할 수 있습니까?

필드의 음식 구조는 어떻게 생겼을까요?

답변

4

the excellent Wikipedia article on database normalization을 읽고 싶을 수 있습니다.

단일 필드에 여러 값을 저장하지 않으려합니다. 당신이 뭔가를 할 할 :

form_responses 
    id 
    [whatever other fields your form has] 

foods_liked 
    form_response_id 
    food_name 

form_responses이 (사람의 이름이나 주소, 또는 여러 값이없는 무언가 같이) 단수 일을 포함하는 테이블입니다. foods_liked.form_response_idform_responses 테이블에 대한 참조이므로 응답 번호가 6 인 사람이 좋아하는 음식의 경우 필드의 값이 6이됩니다 (foods_liked). 그 사람이 좋아하는 각 음식에 대해 그 테이블에 한 줄의 행이 있습니다.

편집 : 다른 사람들은 3 테이블 구조를 제안했으며, 사용자가 미리 정의 된 목록에서 음식을 선택하도록 제한하는 경우 확실히 좋습니다. 세 가지 테이블 구조는 자신의 음식을 입력 할 수있는 능력이있는 경우에 더 좋을 수 있습니다. 그러나 경로를 선택하면 입력을 표준화하기 위해 조심해야합니다 (공백을 제거하고 대문자를 수정하는 등).) 그래서 당신은 그 테이블에 중복 된 엔트리로 끝나지 않는다.

2

정상적으로, 우리는 이렇게 운동하지 않습니다. 관계 테이블을 사용해보십시오.

표 1 : tbl_food

ID primary key, auto increment 
FNAME varchar 

표 2 : tbl_user

ID primary key, auto increment 
USER varchar 

표 3 : 데이터를 저장하는 tbl_userfood

RID  auto increment 
USERID int 
FOODID int 

를 사용하여 유사한 형식의 데이터 대신 덩어리 필드에 장착.

이러한 테이블의 쿼리는 데이터 청크를 구문 분석하는 것보다 쉽습니다.

1

정규화를 사용하십시오.

보다 구체적으로는 users라는 테이블을 만듭니다. 다른 음식을 만듭니다. 그런 다음 두 테이블을 서로 다른 외래 키를 참조하는 users_to_foods라는 다 대다 테이블로 연결하십시오.

0

프로그래밍 언어로 음식 데이터를 직렬화 한 다음 음식 필드에 저장하는 것이 한 가지 방법입니다. 그러면 데이터베이스를 쿼리하고 직렬화 된 식품 데이터를 가져 와서 프로그래밍 언어로 원시 데이터 구조 (이 경우 배열)로 다시 변환 할 수 있습니다.

이 접근법의 문제점은 많은 양의 동일한 데이터를 반복해서 저장한다는 것입니다. 쿠키를 좋아하는 사람이 많으면 문자열 "쿠키"가 계속 저장됩니다.또 다른 문제는 특정 음식을 좋아하는 모든 사람을 찾는 것입니다. 그러기 위해서는 각 기록에 대한 음식 데이터를 선택하고, 그것을 나열하고, 선택된 음식이 안에 들어 있는지 확인해야합니다. 이것은 매우 비효율적입니다.

대신 사용자 테이블, 식품 테이블 및 조인 테이블의 세 가지 테이블을 생성하려고합니다. 사용자 및 식품 표에는 각 사용자 및 식품에 대해 각각 하나의 기록이 포함됩니다. 조인 테이블에는 user_idfood_id의 두 필드가 있습니다. 사용자가 즐겨 찾기로 선택한 모든 음식에 대해 사용자 ID와 음식 ID의 조인 테이블에 레코드를 추가합니다. 아이디 FOOD_ID와 특정 음식을 좋아하는 모든 사용자를 당길 예를 들어

, 쿼리는 다음과 같습니다

SELECT users.id, users.name 
FROM users, join_table 
WHERE join_table.food_id = FOOD_ID 
AND join_table.user_id = users.id; 
관련 문제