2013-12-08 3 views
-1

저는 여전히 SQL의 기본 개념에 대해 머리 글자를 쓰고 있습니다. 그래서 나는 어떻게 데이터 목록을 관리 할 수 ​​있는지 이해하려고 노력하고있다. 이름의 길이가 다를 수 있으므로 모든 데이터에 대해 별도의 열을 어떻게 가질 수 있는지 알지 못할 수도 있습니다.SQL에 데이터 목록을 올바르게 저장하는 방법은 무엇입니까?

['John','Bill','Henry','Roxanne'] 
['James','Sandy','May'] 

나는 그것을 문자열로 저장할 수는 있지만 본능은 나쁜 생각이라고 말합니다. 나는 그것을 직렬화 할 수는 있지만이 목록에는 수백 개의 항목이 포함될 가능성이 있으며 얼마나 많은 스트레스를 받을지 모른다.

어떻게 효율적으로 수행 할 수 있습니까? 그리고 더 중요한 질문은, 어디서 이런 개념을 배울 수 있습니까?

업데이트 :

내가 행에 저장 기대 데이터의 예 :

Matthew | 12-07-2013 | ['James','Sandy','May'] | [email protected] 
+1

당신의 본능은에 있습니다 – Strawberry

답변

1

내가 과거에 해왔 던 (그리고 이것이 가장 효율적인 방법이라고 보장 할 수 없음) 것은 두 번째 테이블을 사용하여 원본으로 다시 링크하는 것입니다.

그래서 대신에 같은 항목을 포함하는 단일 테이블 : 링크

name | date  | email 
Matthew | 12-07-2013 | [email protected] 

하나 :

index | name  | user 
1  | Matthew | James 
2  | Matthew | Sandy 
3  | Matthew | May 
당신은 두 개의 테이블, 기본 정보와 일이있을 것이다

name | date  | users     | email 
Matthew | 12-07-2013 | ['James','Sandy','May'] | [email protected] 

다음 필요에 따라 함께 참여할 수 있습니다.

+0

나는 시각을 좋아합니다. 확실히 이해할 수 있습니다. 제 카운터 질문은 제임스가 '레드'와 같은 색이라면 두 번째 테이블에 추가하겠습니까? 아니면 새 테이블을 만들고 기본 ID를 'James'로 설정 한 다음 위와 같이 다시 참조할까요? 그렇다면 시간이 지남에 따라 함께 연결된 너무 많은 쿼리에서 mysql 서버에 부하를 생성하지 않을까요? – Matthew

+1

"시간이 지남에 따라 함께 연결된 너무 많은 쿼리에서 mysql 서버에로드가 생성되지 않습니까?" MySQL의 주요 목적은 이와 같은 쿼리를 함께 연결하는 것입니다 (테이블 조인). 그것이 "관계형 데이터베이스"라고 불리는 이유입니다. 각 테이블은 별도의 관계를 나타냅니다. 그렇습니다.로드가 발생하지만 관리 가능한 도구를 사용하면 가지고있는 도구를 이해할 수 있습니다. –

+0

도움이 되니 기쁩니다! 귀하의 카운터 질문에 대한 답변에 따라 다릅니다. 원래 테이블 (현재 Matthew에 대한 항목 만 포함)에 "사용자"라고하는 항목 중 하나에 대한 항목이 있습니까? 이 경우 해당 테이블에 "색상"열을 추가하기 만하면됩니다. '이름'및 '사용자'열에 표시되는 사람들의 이름이 근본적으로 다른 경우 네, 색인으로 '사용자'열이있는 세 번째 표가 필요합니다. – qmorgan

1

이 두 개 (또는 그 이상)의 열이 하나 (또는 ​​하나를 제외하고 모두) 두 번째 테이블을 작성하는 중 첫 번째 테이블에서 어떤 행에 대해 이야기하고 있는지 식별합니다 [*]. 마지막 열은 마태 복음의 목록에있는 이름을 나타냅니다. 매튜를 위해이 표에서 3 개의 행을 만드십시오. 각각 제임스, 샌디 및 5 월 한 행.

물론 하나의 큰 문자열 필드로 이름을 저장할 수는 있지만 데이터베이스 자체가 개별 엔터티를 고려할 필요가 없다고 확신하지 못한다면 그렇게해서는 안됩니다. 그리고 지금 자신감이 있더라도 나중에 마음이 바뀌어 고칠 수 있습니다.

더 중요한 질문은 어디에서 이와 같은 개념을 배울 수 있습니까?

모든 SQL 자습서에서 다루어야합니다.

[*] 데이터에 대해 충분히 모르기 때문에이를 수행하는 방법을 알 수 없습니다. 어쩌면 "매튜"가 행을 고유하게 식별 할 수 있습니다 (그리고 이름 목록은 Matthew의 친구들입니다). 어쩌면 "매튜"에 날짜를 더한 것일 수도 있습니다 (그리고 그 이름의 목록은 매튜가 그날에 만난 사람들입니다). 어쩌면 아무것도, 그리고 첫 번째 테이블에 합성 기본 키가 필요하므로 두 번째 테이블을 참조 할 수 있습니다.

관련 문제