2013-05-27 4 views
0

사용자가 모든 필드에 여러 값을 입력 할 수 있도록 허용해야합니다. 따라서 옵션은 무한합니다.모든 필드는 여러 값을 가질 수 있습니다.

예를 들면. 열은 다음과 같습니다 CompanyID- 회사 명 웹 사이트 Key_Markets M & A_History 주요 지역 댓글

시나리오는 에칭, 회사가 여러 웹 사이트, 주요 시장, 지역이있을 수 있습니다. 나는 이것을 어떻게 전문적으로 할 것인가? 나는 모든 열을 별도의 테이블에 넣을 생각이다. 그런 다음 하나의 레코드에 모든 정보를 CONCAT 조인을 사용해야합니다

table_master_companies 
    - record_id 
    - company_name 

table_websites 
    - record_id 
    - company_id 
    - website_address 

table_key_markets 
    - record_id 
    - company_id 
    - key_market 

등 :

+3

스택 오버플로에 오신 것을 환영합니다. mysql 또는 sql server 2008R2 둘 중 하나만 질문에 태그를 붙이면됩니다. 이 특별한 경우에, 가능한 데이터베이스 디자인에 대해 질문 할 때 어쩌면 그렇게 중요하지는 않지만이 규칙을 따라야합니다. 그런 다음 관계형 데이터베이스 디자인에 대해 읽어보십시오. 시작하실 수 있습니다 [여기] (http://en.wikipedia.org/wiki/Database_design). – Yaroslav

+0

정규화 된 데이터베이스이면 충분합니다. 그게 무슨 뜻인지 모르겠다면, 필자는 Mere Deals를위한 데이터베이스 디자인에 대한 좋은 이야기를 들었습니다. –

답변

2

기본적으로이를 실현하는 세 가지 방법이 있습니다.

1) 여러 개의 필드를 하나의 열에 별도로 씁니다. 이것은 매우 나쁜 설계 일 것이며 응용 프로그램에서 분할을 처리해야합니다. -하지 마세요.

2) 데이터를 저장하려면 여러 그룹과 함께 하나의 테이블을 사용하십시오. 이것은 매개 변수에는 의미가 있지만 각 고객마다 다른 값이있는 경우에는 그렇지 않습니다. 예를 들면 :

  • 회사 ID
  • GROUPID
  • 위치

예 :

108001, 'homepage', 1, 'www.mypage.com'; 
108001, 'homepage', 2, 'www.mysecondpage.com'; 
108001, 'homepage', 3, 'www.anotherpage.com'; 
108001, 'markets', 1, 'erp'; 
108001, 'markets', 2, 'software'; 
108001, 'region', 1, 'germany'; 
108001, 'region', 2, 'austria'; 
108001, 'region', 3, 'poland'; 

3) 각 1 별도의 테이블을 사용 : N 관계! 당신의 요구에 맞는 최고의 솔루션이 될 것입니다. 이렇게하면 스키마를 쉽게 확장하고 더 많은 데이터를 저장할 수 있다는 이점이 있습니다. 예를 들어 각 지역 또는 주요 시장에 대한 사용자 수를 저장하기로 결정한 경우

다른 지점 : 데이터베이스의 이중 내용을 피하려면 n : m 관계를 사용하십시오! 예를 들어 주요 시장과 지역을 완전히 분리 된 테이블에 저장하고 고객 및 주요 시장의 ID를 크로스 탭에 저장해야합니다. 따라서 고객별로 주요 시장을 문자열로 저장할 필요가 없습니다!

+1

@Mag Ron - Re : 위의 (1) 점 : ** 그렇게하지 마세요! ** Dustin이 말했고 저는 그 진술을지지합니다.단일 필드에서 값을 결합하면 다음과 같은 질문을하게됩니다. 허용되는 값의 수는 몇 개입니까? 어떻게 구분합니까? 전화 번호 (집, 직장, 모바일, 팩시밀리, 친척, ...)? 최대 결합 길이가 최대 행 크기 제한으로 실행되기 시작합니까? 그냥 가지마. – HABO

+0

모든 도움에 감사드립니다. –

+0

나는 이것을하고있다. 저는 열을 자신의 테이블에 넣었습니다. 지금 나는 약 30 개의 테이블을 가지고있다. 그러나 company_id를 얼마나 많이 색인 할 수 있는지에 대한 제한이 있기 때문에 오류가 발생합니다. –

0

당신은 같은 데이터베이스 구조가 필요합니다.

+1

주요 시장을 크로스 탭에 저장하는 것이 좋으므로 ID를 회사 ID에 할당하여 데이터베이스의 중복을 피할 수 있습니다. –

+0

@dustinklien은 완전히 동의합니다, 실수로 내 부분에! –