2016-09-17 3 views
1

제가 방금 만난 문제에 대한 최선의 해결책을 찾으려고합니다. 이해가 안되는 일을하는 것을 싫어하므로 누군가가 도울 수 있기를 바랍니다.기본 키의 자동 번호 대 텍스트 문자열?

호텔 정보를 저장하는 테이블이있는 Access 데이터베이스와 일정을 저장하는 다른 테이블이 있습니다. 여정 테이블은 호텔 테이블의 호텔 목록에서 선택합니다.

적절한 관계를 만들고 싶지만 일정표 테이블의 호텔 필드에 연결되어있는 호텔 테이블의 자동 번호 기본 키를 사용하면 작동하지 않습니다. 문자열 길이가 꽤 얻을 수있다하더라도, 호텔 테이블에 기본 키로 호텔 이름을 사용

A. : (. 일련 번호 ID이 호텔의 이름과 일치하지 않기 때문에)

는에 더 잘가요 긴?

B. Itineraries 테이블의 Hotels 필드에있는 표시 컨트롤을 Hotels 테이블 자동 번호 기본 키를 나열하는 콤보 상자로 변경하지만 숨 깁니다. 대신 호텔 이름이있는 열을 보여줍니다. 나는 그 해결책을 찾았습니다 : http://www.trigonblue.com/accesslookup.htm

솔루션 A는 긴 텍스트 문자열로 색인 생성 속도를 늦출 수 있으며, 새로운 필드가 테이블에 삽입되면 솔루션 B가 엉망이된다고 생각합니다.

나는 틀린 대답을 여기에서 골라 내고, 길의 아래에서 문제를 가지고있는 것을 싫어할 것이다.

누구든지 나를 도와 줄 수 있습니까? 제 질문의 어떤 부분을 명확히해야하는지 알려주세요.

감사합니다.

+0

당신은 여전히 ​​호텔과 호텔의 ID를 사용하여 일정 사이의 관계를 추가 할 수 있습니다 - 단지와 함께 여행 일정에 인덱스 긴 fiedl "HotelID을"추가 "중복 허용"- 호텔 이름에 응답 – dbmitch

+0

감사를 연결하는 것보다 훨씬 더 나은 . 미안하지만 초보자이고 이해가되지 않을 수도 있습니다 - 호텔 ID가 여행 일정란에 번호가 없습니까? 나는 당신의 질문에 대답하기 위해 어떤 AutoNumbers가 호텔 이름 – arbitel

+0

에 해당하는지 모르겠다. 옵션 B는 갈 길이 멀다. 그것의 가장 안전하고 권장되는 방법 :) 이유 : 당신은 열쇠를 사용하고 있지만 열쇠! :) :) –

답변

1

자동 전화 번호는 기본 키를 설정하는 가장 효율적인 방법이며, DBMS가 찾고자하는 것을 찾기 위해 DBMS에서 가장 적은 작업입니다. 테이블에 기본/외래 키 관계가있을 경우 특히 그렇습니다.

저장 및 인덱싱 목적으로이 방법을 사용하면 이점은 있습니다 (Access에서는 큰 문제가 아니지만 다른 경우에는 그렇습니다).

+0

답장을 보내 주셔서 감사합니다. - 그래서 옵션 B가 최선입니까? 아니면 Autonumber를 사용하여 관계를 설정하는 또 다른 방법이 있습니까? – arbitel

+1

"* 솔루션 B가 새로운 필드가 테이블에 삽입되면 엉망이된다고 생각하는 이유는 확실하지 않습니다. *"적절한 방법입니다. 호텔 이름을 정렬하기 위해 콤보 상자를 변경하면됩니다. 아무 것도 엉망이되지 않습니다. 디스플레이에 표시됩니다. 원하는 경우 정렬을 위해 더 빠르게 호텔 이름에 색인을 추가 할 수 있습니다. – dbmitch

+0

유일한 해결책은 열 개수와 열 너비를 선택하는 것입니다. 그러면 Key가 1 열이고 원하는 디스플레이가 2 열이라고 가정하십시오. 조회 도구를 2 열로 설정하고 너비를 0 "1"로 설정합니다. 두 번째 열 앞에 새 필드를 삽입하면 대신 표시됩니다. 나는 필드를 삽입하지 않는 것을 기억할 수 있지만, 더 좋은 방법이있는 것처럼 보입니다. – arbitel

1

이름을 거의 기본 키로 사용하지 않아야합니다. CODE 또는 ID의 형태로 고유 ID를 사용하는 것이 훨씬 안전한 방법입니다. 이름의 사용을 피하는 것은 당신을 수 있습니다 :

  • 추상 식별자
  • 저장 한 위치
  • 변경 이름의 이름에서 이름,
  • 사용 덜 한 곳에, 필요한 경우 디스크 공간 및 메모리
  • 빠른 인덱싱, 삽입, 삭제, 조인, 정렬 및 그룹화를 수행하십시오.

때때로 코드 또는 ID가 있거나 내부/외부 규칙에 의해 제약을 받기는하지만 대부분의 경우 자동 번호 지정 기본 키가 매우 유용합니다.숫자

  • 때문에 효율적으로
  • 숫자를 저장, 그래서 그것은
  • 새로운 항목이 항상 고유 테이블의 끝 부분에 삽입하고 최소한의 노력을 필요로하는 보장 작업을 빠르게 : 그것은이다 페이지 이동 또는 색인 변경
+0

"고유해야 함"- 새 행이 중복을 생성 할 수 있도록 자동 번호를 다시 1에 다시 시드 할 수 있습니다. 또한 의도적으로 중복을 만들려면 autonumber 속성이있는 열을 업데이트 할 수 있습니다. 귀하가 주장하는 보증은 오직 1 차 키에만 적용되며 일련 번호와는 아무런 관련이 없습니다. – onedaywhen

+0

이것은 Access입니다. 시드를 사용하는 것은 DDL을 사용하여 가능하지만 [권장되지 않음] (http://superuser.com/questions/288087/how-do-i-set-the-first-value-of-autonumber-in-access # comment301363_288087) – ThunderFrame

+0

"새 항목은 항상 테이블 끝 부분에 삽입됩니다."- 자동 번호 및/또는 기본 키가 있는지 여부에 관계없이 모든 테이블에 동일한 내용이 적용될 수 있습니다. autonumber가 증가하지 않고 (무작위가 아닌) 최대 값에 도달하지 않은 경우 파일이 압축 될 때 PK가 클러스터 된 인덱스를 지정하기 때문에 디스크의 실제 순서가 변경되지 않는다는 것을 의미한다고 생각합니다. 가장 최근에 작성된 행에 대한 경합이 종종 발생하기 때문에 모호한 점입니다. 같은 물리적 페이지에 있다면 잠금 문제가 발생할 수 있습니다. 무작위 자동 번호가 더 좋을 수도 있습니다. – onedaywhen

관련 문제