답변

56

착용하는 것보다 더 많은 데이터베이스 구속 조건이 필요하지 않습니다. 자동차에 시트 벨트가 필요합니다. 문제가 생길 때까지 모든 것을 마음껏 운전할 수 있습니다. 시트 벨트 (구속)는 당신 (데이터)을 안전하게 유지합니다.

데이터베이스 수준에서 데이터 무결성을 적용하기 위해 제약 조건을 생성하는 것이 좋습니다. 1) 레일스 외부의 어떤 지점에서 데이터베이스와 상호 작용하고 2) 실수로 잘못된 데이터를 유발하는 코드

데이터베이스 제약 조건은 더 많은 작업이 될 수 있지만 특히 코드가 데이터에 대한 가정을 할 수 있고 많은 유효성 검사를 수행 할 필요가없는 경우 많은 작업을 절약 할 수 있습니다.

ActiveRecord가 외래 키를 지원하지 않는 이유는 데이터베이스에 종속적이지 않고 모든 데이터베이스 시스템에서 외래 키가 보편적으로 지원되지 않기 때문입니다.

+13

나는 시트 벨트 유추를 좋아한다! – Zabba

+1

또 다른 이유는 Rails 애플리케이션이 단일 프로세스가 아니라면 단일 서버에서 실행되는 하나의 스레드가 여러 요청을 동시에 처리 할 수 ​​있다는 것입니다. 'validates : username, uniqueness : true'와 같은 일은 각 앱 인스턴스가 요청한 사용자 이름을 확인하고 찾지 못하고 삽입하기 때문에 실패 할 수 있습니다. 고유 색인만으로는이를 방지 할 수 있습니다. 일반적으로 "현재 데이터베이스 **에있는 데이터를 기준으로이 데이터가 유효합니까?" 데이터베이스 자체에서만 신뢰할 수 있습니다. –

9

Foreigner 플러그인으로 외래 키 지원을 추가 할 수 있습니다.

ActiveRecord에서 지원되는 모든 데이터베이스가 외래 키를 지원하는 것은 아니므로 Rails 프레임 워크는이를 핵심 기능으로 포함하지 않습니다.


주 : 4.2 added FK support 레일로 위가 더 이상 정확합니다.

+0

나는 알고있다. 나는 단지 알고 싶어한다. 우리는 이것을 필요로 하는가 ??? ..... – jojo

+2

짧은 대답은 중요하다. 그러나 기본적으로 당신은': options'을 사용해야한다. 해시시. ActiveRecord는 FK에 대한 지원을 기대할 수없는 추상화 수준에 있습니다. –

관련 문제