2010-02-03 6 views
2

이것은 특정 데이터베이스 또는 프로그래밍 언어와 관련이없는 일반적인 데이터베이스 질문입니다.데이터베이스 디자인

이전에 데이터베이스 작업을 해봤지만 일반적으로 문제없이 작동합니다. 이번에 나는 미래를 계획하고 싶다.

예비 부품 목록을 저장하는 하나의 테이블이 있습니다. 이름, 부품 번호, 위치 등등. 나는 또한 그들이 적용 할 수있는 장치를 저장해야합니다.

할 일은 예비 부품 표의 각 장치에 대한 열을 만드는 것입니다. 이것이 현재 데이터베이스에서 수행되는 방법입니다. 한 가지 우려는 앞으로 새로운 컬럼을 생성해야하는 새로운 디바이스를 추가하고 싶지만 프로그래밍이 쉬워진다는 것입니다.

제 아이디어는 개별적인 적용 가능성 테이블을 만드는 것입니다. 부품이 하나 이상의 장치에 적용될 수있는 경우 부품 ID 및 장치 ID가 저장됩니다. 둘 이상의 행이 있습니다.

Parts 
------- 
ID 
Name 
Description 
Etc... 

PartsApplicability 
------- 
ID 
PartID 
DeviceID 

Devices 
------ 
ID 
Name 

내 질문이 원래 방식에 비해 이점을 제공 할 것, 그것을 할 수있는 유효한 방법이며, 그것을 할 수있는 더 나은 방법이 있는지입니까?

답변 해 주셔서 감사합니다.

+7

데이터베이스를 설계 할 때 "프로그래밍을 쉽게"만드는 것에 초점을 두지 마십시오. 적절한 데이터베이스 설계로 인해 더 나은 프로그래머가되어 프로그래밍이 쉬워집니다. – Sampson

답변

4

저는 Rex M의 대답에 동의합니다. 이것은 표준 접근 방식입니다. PartsApplicability 테이블에서 할 수있는 한 가지 방법은 ID 열을 제거하고 PartID/DeviceID를 복합 기본 키로 만드는 것입니다. 이렇게하면 파트가 동일한 장치에 두 번 이상 연결될 수 없으며 그 반대의 경우도 마찬가지입니다.

+1

우리가 많은 수의 부품과 새롭고 변화하는 데이터를 가진 임의의 종류의 churn을 말하면 페이지 파일이 심각하게 단편화 될 수 있습니다. 자동 증가 필드를 PK로 유지하고 다른 필드에 인덱싱하는 것이 좋습니다. –

+0

+1 확실히'PartsApplicability.ID'를 제거합니다. –

+0

@Rex M : 페이지 파일 주석을 이해하지 못합니다. 또한 : 데이터를 변경합니까? 두 개의 관련 속성은 외래 키입니다. –

4

중간 조인 테이블을 사용하여 RDBMS에서 다 - 대 - 다 관계의 표준 설정을 설명합니다. 그것이 모델이 작동하게되는 방법이라면 확실히가는 길.

2

다 - 대 - 다 관계를 보유하기 위해 별도의 테이블을 사용하는 것이 올바른 방법입니다.

혜택의 일부 조인 테이블은

  1. 당신이 저장할 필요가 없습니다
  2. 부품 데이터베이스 스키마에 대한 변경으로 이어질하지 않습니다 모든 장치에 적용되는 새로운 장치 또는 부품을 만들 수 있습니다 하지 않는 각 파트 장치 매핑에 대한 널 (null) 또는 다른 sentinental 값, 즉 일이 청소기
  3. 테이블이 그들을 쉽게 이해 할 수있는 좁은 남아있을 것입니다 존재

database normal forms을 발견 한 것 같습니다. 제 3 정규형 또는 BNF는 규칙을 어기는 것이 좋지만 때때로 좋은 목표가되어야합니다.

1

두 번째 디자인은 매우 훌륭한 디자인이며 사물 간의 관계를 묘사 할 때 직장 및 내 프로젝트에서 여러 번 수행 한 것과 비슷합니다. 조회 테이블과 그와 동등한 도구는 모든 것을 하나의 테이블에 채우는 것보다 훨씬 간단합니다.

프로그래밍을 쉽게하는 데 동의하게됩니다. 궁극적으로, 더 많은 것을 배울수록 실제로 적합하지 않은 경우에도 이미 알고있는 것을 푸는 것보다 프로그래밍을 훨씬 쉽게한다는 것을 알게 될 것입니다. 테이블 등을 올바르게 조인하는 방법을 알고 있으면 열을 지속적으로 수정하는 것보다 훨씬 쉽게 데이터베이스 프로그래밍을 할 수 있습니다.