나는 성공적으로 응용 프로그램을 운영하기 위해 서로 의존하는 많은 데이터베이스 관계를 가진 응용 프로그램을 가지고 있습니다. 응용 프로그램의 경첩은 일정이라고하는 모델이지만 일정에 따라 블록, 직원, 작업 제목 및 과제 (모든 블록이 함께 데이터베이스에서 과제를 가져 오게됩니다)를 가져옵니다. 하루 종일 직원 스케줄을 작성하십시오.모델 관계가 필요할 때 어떻게 오류를 방지 할 수 있습니까?
응용 프로그램을 만들 때 모든 항목이 데이터베이스에 저장되기 전에 모든 조각이 있어야한다는 확인에 많은 중점을 두었습니다. 이것은 지금까지 환상적으로 발전해 왔으며, 앱은 거의 6 개월 동안 생동감 있고 놀랐다. 딸꾹질이나 실수없이 한 달에 약 15 만 건의 요청을 제공했다. 지난 주까지.
지난 주 누군가가 일정을 변경하는 동안 데이터베이스 오류가 발생했으며 일정이 누락 된 데이터베이스에 저장되었습니다. 연결은 모든 뷰에서 호출되기 때문에이 일정이 데이터베이스에서 호출 될 때마다 응용 프로그램에서 nil을 호출 할 때 NoMethod 오류가 발생합니다.
내가 언급 한 방식으로 응용 프로그램을 설계 할 때 데이터베이스/유효성 검사에서 발생할 수있는 오류를 방지합니까? 그렇다면 어떻게 프로그래밍 방식으로 방어 할 수 있습니까? 보기에 보내기 전에 모든 관계를 점검하여 그것이 0이 아닌지 확인하십시오.
나는이 질문이 일반성이 풍부하다는 것을 알고 있으며, 내가 의미하는 바를 구체적으로 표현할 수 있다면, 의견에 알려 주시기 바랍니다.
IIRC, 대부분의 DB에서 FK 제약 조건은 nullable 인 열에 적용 할 수 있습니다.이 경우 OP에서 문제를 보호하지 못합니다. 아마도 Ruby/Rails/특정 DB에 대해 뭔가 특별한 점이 있습니다 ... 내 대답은 FK 제약이 이미 존재한다고 가정했습니다. – rmeador
데이터베이스 강제 FK 제약 조건을 사용하지 않고, Rails 검증을 통해서만 자식 개체가 만들어지고 존재하는지 확인합니다. 정보 주셔서 감사합니다! 나는 FK 제약을 조사 할 것이다! 트랜잭션 내 여러 데이터베이스 작업을 이미 래핑했지만 내 데이터베이스는 실제로이 이점을 받기 위해 트랜잭션을 지원해야합니다. 그렇지 않습니다. – BushyMark
이것은 DBMS가 제약 조건을 적용해야하는 이유입니다. 제약이없는 무수한 응용 프로그램 중 하나에 버그가있는 경우 버그가 있습니다. 일정에 할당 테이블을 참조하는 외래 키 열이 있는지 여부는 완전히 명확하지 않습니다. 그렇다고해도 삽입이 실패하고 문제가 발생할 수 없습니다. 이는 DBMS가 하나이고 데이터를 공유하는 응용 프로그램이 많아서 DBMS에서 유효성 검사를 수행해야하기 때문에 응용 프로그램이 모두 DBMS를 사용하므로 최대한의 일관성을 유지하기 때문입니다. –