0

중복성 문제를 제거하고 모듈화하는 가장 좋은 방법을 찾으려고합니다.MySQL 테이블의 다중 값 요소 표현 방법

예를 들어, 나는 다음과 같은 테이블이 있다고 가정

나는 새 테이블을 만들고 싶어
Company(id, name) 
{ 
    1; IBM 
    2; Google 
    3; Amazon 
} 

Services(id, name) 
{ 
    1; Phone 
    2; Gas 
    3; Electricity 
    4; Water 
    5; Heating 
    6; Health service 
    7; Education 
    8; Transport service 
} 

, 문제는 값이 상호 배타적이지 점이다. 내가 할 원하는 테이블에서

, 내가 회사 서비스의 특정 숫자 (1)를 관련이 있어야이 문제는 회사가 서비스의 (N)을 가질 수 있다는 것입니다.

나는 세 가지 다른 방법을 생각했지만,이 3 가지 모드가 데이터베이스 정규화의 규칙을 위반한다고 생각합니다.

나는 3 개 가지 모드를 쓰기 아래

, 일부 예 기록 :

NewTableOne(company_id, servs) 
{ 
    1; 3,5,7,8 
    3; 1,2,5 
} 

첫 번째 기록은 IBM이 전기, 난방, 교육 및 운송 서비스의 서비스를 제공 회사를 의미한다. 두 번째 기록은 의미 아마존은 전화, 가스의 서비스를 제공 회사,

NewTableTwo(company_id, service) 
{ 
    1; 3 
    1; 5 
    1; 7 
    1; 8 
    2; 1 
    2; 2 
    2; 5 
} 

그리고 마지막으로,

NewTableThree(id, phone, gas, elect, water, heating, health, edu, transport) 
{ 
    1; 0; 0; 1; 0; 1; 0; 1; 1 
    2; 1; 1; 0; 0; 1; 0; 0; 0 
} 

이 3 가지 방법 중 하나를 사용하는 것이 편리하다 난방? 또는 내가하고 싶은 것을 할 수있는 더 좋은 방법이 있습니까? 그렇다면 어떻게해야합니까?

읽기와 영어를 용서해 주셔서 감사합니다.

답변

2

유일한 버전은 이 아니며은 끔찍한 문제가됩니다. # 2.

  • 전기 형식 # 1을 제공하는 모든 회사를 엄청난 성능 저하없이 선택할 수는 없습니다. 그래서 "CSV 필드의 단일 값으로 선택하는 방법"과 같은 질문이 가득합니다.
  • # 3으로 최대 열 제한을 실행합니다 (아직 그렇게 생각하지 않더라도). 그 외에도 서비스를 추가하는 것은 DB 구조를 변경해야하므로 좋지 않습니다.
+0

두 번째 방법의 환원 상태가 "불량"입니까? 그래서, 나는 두 번째 방법으로 가야합니까 아니면 그 3 다른 다른 방법이 있습니까? – candlejack

+1

# 2의 중복성은 최소입니다 (25 바이트/행의 순서로). 따라서 100 만 개의 조인에는 25MB의 공간이 필요합니다. 두 개의 열을 기본 색인으로 사용하면 "자연스러운"방향으로 조회하는 데 정말 빠릅니다. –

+0

그리고 네, # 2와 함께한다는 뜻입니다. –