following post과 같은 문제가 있습니다.Rails에 데이터베이스 수준의 제약 조건이 필요합니까?
그래서 Rails가 기본적으로 외래 키를 생성하는 것을 지원하지 않는 이유는 무엇입니까? 필요하지 않습니까? 또는 수동으로 수행해야합니까?
following post과 같은 문제가 있습니다.Rails에 데이터베이스 수준의 제약 조건이 필요합니까?
그래서 Rails가 기본적으로 외래 키를 생성하는 것을 지원하지 않는 이유는 무엇입니까? 필요하지 않습니까? 또는 수동으로 수행해야합니까?
착용하는 것보다 더 많은 데이터베이스 구속 조건이 필요하지 않습니다. 자동차에 시트 벨트가 필요합니다. 문제가 생길 때까지 모든 것을 마음껏 운전할 수 있습니다. 시트 벨트 (구속)는 당신 (데이터)을 안전하게 유지합니다.
데이터베이스 수준에서 데이터 무결성을 적용하기 위해 제약 조건을 생성하는 것이 좋습니다. 1) 레일스 외부의 어떤 지점에서 데이터베이스와 상호 작용하고 2) 실수로 잘못된 데이터를 유발하는 코드
데이터베이스 제약 조건은 더 많은 작업이 될 수 있지만 특히 코드가 데이터에 대한 가정을 할 수 있고 많은 유효성 검사를 수행 할 필요가없는 경우 많은 작업을 절약 할 수 있습니다.
ActiveRecord가 외래 키를 지원하지 않는 이유는 데이터베이스에 종속적이지 않고 모든 데이터베이스 시스템에서 외래 키가 보편적으로 지원되지 않기 때문입니다.
Foreigner 플러그인으로 외래 키 지원을 추가 할 수 있습니다.
ActiveRecord에서 지원되는 모든 데이터베이스가 외래 키를 지원하는 것은 아니므로 Rails 프레임 워크는이를 핵심 기능으로 포함하지 않습니다.
주 : 4.2 added FK support 레일로 위가 더 이상 정확합니다.
나는 알고있다. 나는 단지 알고 싶어한다. 우리는 이것을 필요로 하는가 ??? ..... – jojo
짧은 대답은 중요하다. 그러나 기본적으로 당신은': options'을 사용해야한다. 해시시. ActiveRecord는 FK에 대한 지원을 기대할 수없는 추상화 수준에 있습니다. –
나는 시트 벨트 유추를 좋아한다! – Zabba
또 다른 이유는 Rails 애플리케이션이 단일 프로세스가 아니라면 단일 서버에서 실행되는 하나의 스레드가 여러 요청을 동시에 처리 할 수 있다는 것입니다. 'validates : username, uniqueness : true'와 같은 일은 각 앱 인스턴스가 요청한 사용자 이름을 확인하고 찾지 못하고 삽입하기 때문에 실패 할 수 있습니다. 고유 색인만으로는이를 방지 할 수 있습니다. 일반적으로 "현재 데이터베이스 **에있는 데이터를 기준으로이 데이터가 유효합니까?" 데이터베이스 자체에서만 신뢰할 수 있습니다. –