2011-10-12 7 views
-1

병원 관리 시스템 용 PHP 브라우저 기반 응용 프로그램이 있습니다. 상황은 지불이 이루어지는 세 부서가 있다는 것입니다. 리셉션, 실험실 및 약국. 위의 각 위치의 작업자는 다르므로 입력 내용도 다릅니다. 각 부서는 영수증 정보를 영수증이라는 하나의 단일 테이블로 보내므로 테이블의 마지막 ID 다음의 ID 인 ID가 생성됩니다. 데이터는 테이블의 마지막 ID를 기반으로 생성 된이 ID를 기반으로 동일한 부서로 다시 전송됩니다.PHP에서 ID 중복 방지

이제 두 부서가 제출 단추를 동시에 클릭 할 때 문제가 발생합니다. 이 두 사람은 동일한 ID를 얻습니다. 그 때 마지막 ID는 두 쿼리에서 동일하기 때문입니다. 이로 인해 부서에 데이터를 저장하고 되돌려 보낼 때 문제가 발생합니다.

이제 해결책이 있습니까? 나는 방아쇠가 그것을 풀 것이라고 말했지만 나는 거기에 가고 간단하게 유지하고 싶지 않다. 랜덤 ID 생성을 생각했지만 병원 측은 영수증에 표시되는대로 지속적인 ID를 원합니다. 또한 시스템이 느려지지는 않아야한다는 점을 고려하십시오 (상당히).

EDIT : 더 많은 정보가 여기에있는 것처럼 보이므로 자동 증가가 작동하지 않습니다. 즉, 고려해야 할 3 개의 열이 있습니다. id (Pkey), receiptno 및 debitno. 사람이 동시에 지불하면 id와 receiptno는 함께 하나씩 증가하고 debitno는 비어 있습니다. 그러나 나중에 지불 할 경우 영수증은 NULL이되고 ID와 debitno는 마지막으로 입력 한 ID에서 1만큼 증가합니다. 따라서 receiptno (부서 사람에게 다시 전송 될 예정)가 채워질 필요가 없으므로 자동 증가가 올바르게 작동하지 않을 수 있습니까? 솔루션 esp autoincrement에 다시 한번 감사드립니다.

+0

도대체 누가 당신에게 방아쇠가이 문제를 해결할 수 있다고 말 했나요? 듣는 것을 그만둬야합니다. –

+0

이것은'auto_increment' 기본 키 컬럼으로 해결 된지 오래되었습니다. 어떤 종류의 ID 생성 메커니즘을 사용하고 있습니까? – deceze

+0

그리고 도대체 어떻게 당신은 임의의 ID를 좋은 아이디어로 생각 했습니까? – ThiefMaster

답변

9

데이터베이스가 고유 ID 생성을 처리하도록 ID 열에 AUTO_INCREMENT (MySQL) 필드를 사용하십시오. 다른 데이터베이스 시스템에도 비슷한 필드가 있습니다. PostgreSQL의 serial 필드 유형.

+0

네, 맞습니다. 데이터를 검색하기 위해서는 마지막 ID를 확인하고 다시 보내야합니다. 둘 다 동시에 보내면 첫 번째 요청이 두 번째 요청의 ID (정보)를 가져올 가능성이 있습니다 – Shakir

+2

삽입이 수행 된 직후에 ID를 검색하면 절대로 발생하지 않습니다. 이제까지. 삽입을 수행 한 후에 ID를 검색해야하는 사람은 당신 만이 아닙니다.이 대답은 정답입니다. –

+0

http://us2.php.net/manual/en/function.mysql-insert-id .php –

1

질문에 대한 업데이트를 읽었으므로 실제로 해당 데이터베이스를 분리해야합니다. 이해할 수있는 유일한 ID가있는 새로운 주문을 만들어야합니다. 그러나 주문은 즉시 지불되지 않을 수 있으므로 주문이 지불되면 고유 한 영수증 번호가 필요합니다. 수령을 위해 임의의 번호를 생성하고, 필드를 고유하게 만들고, 오류가없는 동안 데이터베이스의 필드를 업데이트 할 수 있습니다. 이것은 대단히 운이 좋다.

결제를위한 새 테이블을 만드는 것이 좋습니다. 따라서 주문 테이블에는 자동 증가 주문 ID (TheifMasters 답변에 따라)와 userID, 고객 ID, 날짜, 설명 등의 다른 데이터가 저장됩니다. 그러면 paymentID (자동 증가)를 저장하는 payment/transactions 테이블이 있습니다. 지급 날짜, 상태, 금액 등을 포함하는 기타 정보를 포함합니다.

이것은 지불 거래를 추적하는 데 선호되는 방법입니다. 이제는 어디에서 시작해야하는지 알았으므로 실제로 구현하는 방법에 대한 연구를해야합니다. 이유는 관계형 데이터베이스를 사용합니다!

+0

긍정 lol 나는 동의한다, tht는 그것을 효율적으로 할 것이다. 기존의 구조를 변경하라는 요청을 받았기 때문에 기본 솔루션 자체가 필요한 이유가 있습니다. 제가 주로 그 사람에 의해 말하게되는 것은 그것이 시스템을 느리게 만들 것이라는 것입니다. 그럴거야? 그렇지 않다면 이것이 최선의 해결책입니다. 시스템에 많은 구성 요소가있어서 시스템이 느려질 것이라는 두려움이 있습니다. – Shakir

+0

길게 요약하면 시스템이 느려지지 않을 것입니다. 거래 데이터가 주문 데이터와 함께 저장되는 경우 이는 시스템의 심각한 결함입니다. 결함으로 작업하려고해서는 안되며, 결함을 수정해야합니다. 지불 및 영수증 데이터는 매우 중요하므로이 앱의 일부가 올바르게 작성되면이 부분으로 만드십시오. –