2011-02-05 4 views
3

응용 프로그램 내에서 데이터베이스 제약 조건을 처리하는 일반적인 질문과 관련하여 질문을 보았습니다. 그러나 내 질문은 훨씬 더 구체적이고 어떻게 관련되어 있습니까? PHP로 작성된 애플리케이션 로직 내에서 원시 mysql 제약 조건을 처리한다.PHP/MYSQL - 응용 프로그램에서 데이터베이스 수준 제약 조건을 처리하는 방법

다른 언어/데이터베이스 래퍼 (예 : ADO.NET)에서 try/catch 내에서 데이터베이스 상호 작용을 배치하고 적절한 예외를 throw합니다.이 경우 PHP입니까?

또한 엄격한 ORM을 사용하면 데이터베이스 수준 제약 조건이 필요하지 않습니까? 다른 언어/데이터베이스 래퍼에서

답변

0

try/catch 블록의 위대한 신화는 프로그래머가 놀라 울 정도로 강력한 코드를 생성하고 실제로 실패한 데이터베이스 쿼리에서 복구 할 수 있다는 것입니다. 그러나 db 오류를 복구하는 기능은 처음에는 어떤 종류의 오류가 있었는지에 달려 있습니다. SQL 구문 오류가있는 경우 사용자가 쿼리에 입력 한 코드 또는 SQL 문을 생성하는 일부 서브 루틴에서 코드를 가져 왔습니까? 질문? 코드가 아니라 사용자가 아니라면 코드를 다시 호출하면 같은 오류가 다시 발생하므로 try/catch 블록을 사용하면 시작부터 운명이 정해 지므로 쿼리가 실행되지 않습니다. 그리고 이것은 일반적으로 웹 서버에서 실행되는 PHP 스크립트에서 얻은 코드 유형이며, 쿼리를 실행하고 실패하고 실패를 확대하고 포기합니다. 반면에 PHP에서 대화식 응용 프로그램을 작성하고 임의의 돌연변이 (매우 이상한 예가 있지만 어쨌든)를 통해 유효한 SQL 문을 전개하려고하는 유전 알고리즘과 같이 db 오류를 올바르게 처리해야한다면 try/catch 블록으로부터 몇 가지 이점을 얻을 수 있습니다.

이는 데이터베이스 수준의 제약 조건에도 적용됩니다. 제약 조건 위반을 적절히 처리해야하는 장기 실행 응용 프로그램이 있다면 잘 그 견고성을 구축해야합니다. 그러나 나는 PHP를 사용하는 사람이 거의 없다고 상상한다. 99 %의 PHP가 웹 페이지를 덤프하는 데 사용되고, 다양한 래퍼와 ORM이 디자인에이를 반영한다. .NET이 오류 복구 논리가 필요한 독립 실행 형 응용 프로그램을 작성하는 데 사용될 확률은 훨씬 높습니다.

원래 질문의 변형, 사용시기 또는 왜 데이터베이스 제약 조건을 사용하는 이유는 무엇입니까? 테이블을 컴파일 할 때 테이블 간의 관계를 알 수없는 매우 동적 인 데이터베이스 구조 (예 : 응용 프로그램 자체의 일부로 새 테이블을 만들거나 삭제할 때)가 가장 유용합니다. 무거운 데이터웨어 하우스 또는 데이터 마이닝 또는 문자열 이론을 원할 것입니다.

0

, (예를 들어 ADO.NET) 당신이 시도/캐치 내 데이터베이스 상호 작용을 배치하고, 적절한 예외를 throw이 PHP의 경우?

그것은 PDO와 관련이 있습니다 ... 그리고 저는 Mysqli가 생각하기에 몇 년 후에 그것을 잘못 사용했습니다. 그러나 그것은 단지 PDOException을 throw합니다 ... 'duplicate key'또는 'not null'에 대한 특정 예외 유형이 없습니다 ... 예외 메시지/코드에서 파싱해야합니다. 또한

, 엄격한 ORM 의 사용은 데이터베이스 수준 제약의 필요성을 부정 하는가?

아니요. PHP로 이것을 에뮬레이션하면 더 많은 오버 헤드가 생길 수 있기 때문에 db가이를 처리 할 수있게하는 것이 일반적으로 더 좋습니다.

+0

맞아요. ORM 주석의 요점은 ORM을 사용할 때 오버 헤드가 이미 존재한다고 생각하는 것입니다. 그렇다면 왜 데이터베이스 자체에 복제해야합니까? – jondavidjohn

+0

그럼 ORM 디자인 방법에 달렸습니다 ... Doctrine 1.2는 그렇게 설정하거나 db/engine이 지원하지 않는다면 에뮬레이트합니다. 따라서 네이티브 지원을 지원하는 db를 사용하면 ORM이 더 효율적으로 실행됩니다. – prodigitalson

관련 문제