2014-12-12 2 views
0

너무 복잡하지는 않지만 그래도 그럼에도 불구하고 여러 다 대다 관계가있는 데이터베이스를 설정했습니다. 데이터베이스를 처음에 세 가지 테이블을 사용하여 간단히 설명하겠습니다. 더 많은 것이 있지만 단순하게 유지하는 것입니다.문자열로 자동 완성/기본 키 - PostgreSQL

데이터베이스가 완료된 프로젝트에 대한 정보를 저장하고 있습니다. 하나의 속성은 사용 된 소프트웨어입니다. 그래서 (각 열에/키) 세 개의 테이블 가지고

tblProjects을 (ProjectID [PK, ProjectTitle 등)

tblProjectsSoftware (SoftwareID [FK] ProjectID [FK]에서 UniqueID [PK ])

tblSoftwareUsed (SoftwareID [PK, SoftwareName) 쉽게 phppgadmin 데이터 항목을 확인하기 위해

는 그냥 tblSoftwareUsed의 기본 키를 'SoftwareName'를 고려하여 결정되었다

. 이것은 특정 프로젝트와 관련된 소프트웨어를 tblProjectsSoftware에 입력하려고 할 때 SoftwareID 열에서 자동 완성 기능을 사용할 수 있기 때문에 의미가없는 숫자 일 뿐이 기 때문입니다.

당신이 볼 수 있듯이 tblSoftwareUsed의 SoftwareID 컬럼에 데이터를 입력 할 때, 난 단지 수있을 것 ID가 아닌 이름으로 '필터'결과. 이 데이터베이스가 커지면 소프트웨어에서 문제가되지 않을 수도 있지만 많은 양의 레코드가 포함될 수있는 다른 속성이 있습니다. 더 자세히 설명하기 위해 tblProjects에서 프로젝트 레코드를 작성하여 데이터 입력을 시작합니다. 그런 다음 필자는 사용 된 소프트웨어에 대해 새로운 레코드 (필요한 경우)를 만들 것입니다. 그런 다음 tblProjectsSoftware에 데이터를 입력 할 때 소프트웨어 ID 또는 몇 페이지를 클릭하여 찾아야합니다.

내 질문에 소프트웨어의 이름을 기본 키로 지정했거나 PK로 ID를 그대로 두는 것이 더 좋을까요? 또한 ID 이외에 'SoftwareName'을 검색 가능하게 만드는 옵션이 누락되었습니다.

+0

글쎄, 만약 당신이 직접 글을 쓰고 있다면, 당신은 phppgadmin의 기능에 대해 더 많이 묻는 것 같이 보이는 독특한 (또는 아닌) 키를 만들 것입니다. 당신이하고있는 것처럼 보이는 것을하기 위해 웹 응용 프로그램을 작성하는 것은 꽤 사소 할 것입니다. –

+0

새로운 것을 쓰고 싶지 않습니다. 이 경우에는 문자열을 PK로 만드는 것이 나쁜지 아니면 phppgadmin을 사용하여 원하는 것을 얻을 수있는 다른 방법이 있는지 궁금합니다. – ge0m3try

+1

PK에 문자열을 사용하는 것은 단점이 없습니다. # 1, 숫자 PK를 사용하는 경우 제품 제목을 변경하면 모든 데이터를 업데이트하는 큰 어려움을 겪지 않게됩니다. 또한 웹 응용 프로그램에서 양식 필드, URL 또는 기타 문제로 인한 텍스트 걱정없이 쉽게 번호를 전달할 수 있습니다. 이와 같은 테이블에서 PK를위한 텍스트를 사용하는 데 더 많은 두통을 만듭니다. 이제 "상태"또는 몇 가지 상태와 같은 기본 테이블에서 (매우 제한적인) 데이터를 삽입 할 때 문제를 알기 때문에 아무런 문제가 없습니다. –

답변

1

은 장점과 단점이 위키 피 디아 문서에서 길이 설명 대리 키를 사용하여이있다 : 자신의 헤더를 대출

http://en.wikipedia.org/wiki/Surrogate_key

...

장점 :

  • 불변성
  • 요구 사항은 변경
  • 성능
  • 호환성
  • 균일
  • 검증
,

단점 :

  • 해리
  • 쿼리 최적화
  • 정상화
  • 비즈니스 프로세스 모델링
  • 실수로 공개
  • 실수로 가정

종종 소프트웨어 이름을 업데이트해야 할 때 두통을 피하는 등의 사유로 대리 키를 사용하려고합니다.

관련 문제