0

저는 환자의 의료 기록 작업을 시작한 MySQL 데이터베이스를 설계하고 있습니다. 예를 들어 medications 테이블에는 patient_id, med_name, usage_dates, dosage, reason 등의 고유 한 키가없는 테이블이 여러 개 있습니다. 유일하게 보장되는 고유 키는 모두 들판.고유 한 키가없는 데이터베이스 테이블의 각 행에 대해 고유 한 ID를 생성해야합니까?

patient_id을 선택하면 웹 응용 프로그램에서 해당 환자의 데이터를 쉽게 검색 할 수 있지만 여러 사용자가있는 데이터베이스 내에서 행에 대한 포인터를 저장할 수없는 경우 행을 편집하거나 삭제하기에 어색한 시스템입니다. 이 표에 DBMS는 올바른 행을 찾기 위해 각 필드의 값을 선택해야합니다. 내가 데이터베이스에 대해 아는 것에서부터, 이것은 큰 데이터베이스에서 비효율적 일 수 있다고 생각합니다.

ID 번호가있는 새 필드를 만들어 각 테이블에서 기본 키로 사용하는 것이 더 효율적입니까, 아니면 DBMS 방식이 나보다 똑똑하며 완전히 필요하지 않습니까?

+0

당신이 진심 :

나는의 라인을 따라 뭔가를 건의 할 것

? 가장 큰 존경심으로 당신은 데이터베이스에 대해 "거의"알지 못했지만 환자의 의료 기록을위한 데이터베이스를 설계하고 있다고합니다. – sqlvogel

+0

예! 잘. 의료 기록은 우리가 현재하고있는 일 중 일부에 지나지 않습니다. 우리의 신생 기업 (의료 기기 개발)은 현재 겨우 네 사람이고 나는 컴퓨터 전문가입니다. 프로토 타입과 통신 할 수있을 정도로 데이터베이스가 필요합니다. 우리가 필요한 전문 분야의 사람들을 고용 할 예정입니다. 내가이 일을하는 동안, 나는 가능한 한 많이 배울 기회를 가지기 때문에,이 단계에서는 그다지 중요하지 않은 것에 대한 나의 질문이 나온다. – tobek

+1

"고유 키를 가질 수 없습니다"및 "유일하게 보장 된 고유 키는 모든 필드가 함께 있습니다"는 완전히 반대되는 것을 의미합니다. 그거 알아? 의약품 테이블의 키가 {patient_id, med_name, start_date} 인 것 같습니다. 어쨌든 patient_id는 꽤 선택 적이어야하므로 많은 환자와 많은 약들에 대한 성능이 좋을 것입니다. 프로토 타입 및 테스트. –

답변

2

언제든지 간단한 숫자 기본 키 (예 : mysql auto_increment)를 추가하여 각 행에 고유 한 식별자를 지정할 수 있습니다. 외래 키 관계에서 테이블을 사용해야 만하는 경우 복합 기본 키는 모든 조인/FK 사양에서 기본 키의 구성 요소 필드 각각을 나열해야하는 경우 심각한 문제가됩니다. 비교해 보면, 간단한 int 기본 키를 추가하면 FK/join 관계에 대해 하나의 필드를 전달할 필요가 줄어 듭니다.

patients (id, name, ....) 
meds (id, brand, name, ...) 
patient_meds (patient_id, med_id, dosage, ...) 
+0

+1 이것은 아마도 "이름"이 아닌, 각 유형의 med에 대한 더 많은 정보가있을 수 있다고 가정 할 때 분명히 할 것입니다. – Travesty3

1

그렇습니다.이 키는 "합성 키"라고하며 분명히 AUTO_INCREMENT 필드로 추가 할 것입니다. 그렇게하면 업데이트가 훨씬 간단하고 빠릅니다.

1

ID 필드는 거의 항상 좋은 아이디어라고 생각합니다. 데이터베이스의 한 행을 고유하게 식별하는 데 사용할 수있는 하나의 열을 보장합니다. 또한 테이블의 기본 키가 인덱싱되므로 쿼리를 더 빠르게 만들 수 있으므로 고유 한 ID 열을 기반으로 선택하면 MySQL이 모든 행을 검색하여 검색 할 필요가 없으므로 좋은 생각이라고 생각합니다. 너 찾고있어. 정확한 위치를 알고 있으므로 쿼리가 훨씬 빠르게 실행됩니다.

1

예, "우수 사례"입니다. 업데이트 외에도 삭제 및 특정 조인을 훨씬 빠르게 수행합니다.

많은 타사 도구는 고유 한 기본 키를 사용합니다.

관련 문제