중복성 문제를 제거하고 모듈화하는 가장 좋은 방법을 찾으려고합니다.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 가지 방법 중 하나를 사용하는 것이 편리하다 난방? 또는 내가하고 싶은 것을 할 수있는 더 좋은 방법이 있습니까? 그렇다면 어떻게해야합니까?
읽기와 영어를 용서해 주셔서 감사합니다.
두 번째 방법의 환원 상태가 "불량"입니까? 그래서, 나는 두 번째 방법으로 가야합니까 아니면 그 3 다른 다른 방법이 있습니까? – candlejack
# 2의 중복성은 최소입니다 (25 바이트/행의 순서로). 따라서 100 만 개의 조인에는 25MB의 공간이 필요합니다. 두 개의 열을 기본 색인으로 사용하면 "자연스러운"방향으로 조회하는 데 정말 빠릅니다. –
그리고 네, # 2와 함께한다는 뜻입니다. –