Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon 공장은 씨앗과 다르게 모델 간의 관계를 처리하는 방법


공장은 씨앗과 다르게 모델 간의 관계를 처리하는 방법


공장과 시드러는 데이터베이스 관리에 사용되는 도구, 특히 소프트웨어 개발의 맥락에서 테스트 또는 초기 데이터를 데이터베이스로 생성하고 채우는 데 사용됩니다. 그들은 테스트 또는 응용 프로그램 설정을위한 데이터 생성 프로세스를 자동화하고 간소화하는 데 도움이됩니다. 그러나 그들은 뚜렷한 목적과 메커니즘으로 인해 모델 간의 관계를 상당히 다르게 처리합니다.

공장은 주로 무작위 또는 사전 정의 된 속성으로 단일 또는 관련 모델 인스턴스를 생성하는 데 중점을두고 종종 Faker 라이브러리를 사용합니다. 반면에 씨앗은 여러 모델과 관계를 포함 할 수있는 데이터가 필요한 데이터로 데이터베이스를 채우기위한 일련의 지침을 실행하는 것입니다.

정의 및 목적

공장은 가짜 데이터가있는 개별 또는 관련 모델 인스턴스를 쉽고 일관되게 만들도록 설계되었습니다. 개발자는 모델의 청사진을 정의하고 속성을 채우는 방법을 지정하고 테스트 또는 데이터베이스 파종 목적으로 해당 모델의 많은 인스턴스를 생성 할 수 있도록합니다. 공장은 종종 모델 인스턴스의 속성과 존재에 중점을 둔 모델간에 분리되거나 매우 명확한 관계로 작동합니다.

씨앗은 데이터베이스를 채우기 위해 공장이나 직접 데이터베이스 삽입을 호출 할 수있는 스크립트 또는 클래스 역할을합니다. 씨앗은 데이터 생성의 순서와 논리를 제어하는보다 전체적이고 절차 적입니다. 그들은 특히 다중 상호 의존적 인 테이블이 관련 될 때 데이터 무결성을 유지하기 위해 데이터 모집단이 올바른 순서로 발생하도록합니다.

공장의 관계 처리

모델 공장에서, 관계는 일반적으로 공장 정의 자체 내부의 관계를 정의함으로써 처리됩니다. 예를 들어, 사용자 모델이 프로필 모델과 일대일 관계를 맺는 경우 사용자 공장은 사용자를 생성 할 때 관련 프로파일을 생성하고 관련된 관계 메소드 또는 콜백을 통해 프로필을 "가지고"정의 할 수 있습니다.

공장은 모델 팩토리가 인스턴스를 생성하는 데 사용될 때 동일한 작업에서 관련 모델 인스턴스를 자동으로 생성하고 연결하도록 관계형 논리를 포함시킬 수 있습니다. 이것은 종종`has ()`,`for ()`또는 관련 모델을 생성하는 사용자 정의 관계 콜백과 같은 메소드를 사용하여 수행됩니다. 이 접근 방식은 관련 데이터가 기본 모델 데이터와 함께 투명하게 생성되므로 테스트가 더 쉬워집니다.

씨앗의 관계 처리

씨앗은 공장을 사용하지만 전반적인 흐름과 창조 순서를 구성합니다. 시드는 복잡한 관계를 포함 할 수 있으므로 종자는 일반적으로 데이터베이스 제약 (예 : 외국 키)을 준수하기 위해 자식 모델 전에 부모 모델을 생성하여 관계를 관리합니다. 예를 들어, 사용자가 조직에 속하는 관계에서 Seeders는 먼저 조직을 생성 한 다음 적절한 외국 키를 조직에 연결하는 사용자를 만듭니다.

씨앗은 모든 순서로 데이터 생성을 조작하거나 조정하고 간단하거나 복잡한 데이터 세트를 결합 할 수 있으며, 때로는 다수의 관계에서 외국 키나 피벗 테이블을 명시 적으로 처리 할 수 ​​있습니다. 그들은 종종 여러 테이블에서 데이터 무결성 규칙을 충족시키기 위해 파종 순서를 결정하는 것과 같이 공장이 책임이없는 오케스트레이션을 처리합니다.

관계 복잡성 및 패턴

공장은 일반적으로 주문시 관련 레코드를 생성하는 내장 방법을 사용하여 단순하거나 중첩 된 모델 관계를 정의합니다. 그들은 원자 생성 작업에 중점을 둡니다. Â 한 번의 전화로 모델과 즉각적인 관계를 만드는 데 중점을 둡니다. 예를 들어, 사용자를위한 공장은 여러 게시물을 자동으로 생성하는 관계 또는 사용자에게 속한 프로필을 정의하여 Model Instances의 중첩 된 JSON과 같은 JSON과 같은 구조를 원활하게 생성 할 수 있습니다.

씨앗은 아마도 많은 모델의 데이터가 올바른 순서로 어떻게 생성 될 것인지 명시 적으로 정의해야합니다. 먼저 모든 조직을 작성한 다음 모든 사용자 (사용자를 조직과 연결) 한 다음 사용자와 링크 된 게시물을 만들 수 있습니다. 이 순서는 외국의 주요 제약 조건을 충족시키기 위해 유지되어야합니다. 씨앗은 또한 조건부 파종, 환경 기반 시드 및 데이터가 아직 존재하지 않는 경우에만 데이터를 만드는 복잡한 시나리오를 처리합니다.

많은 관계

다수의 관계를 다루는 것이 더 관련이 있습니다. 공장은 피벗 테이블 공장을 사용하여 관계를 창출하거나 종종 공장 정의 내부 또는 공장 생성 후에 'att 따라서 관련 모델을 쉽게 생성하고 피벗 데이터와 자동으로 연결할 수 있습니다.

한편, 씨앗은 두 모델의 인스턴스를 먼저 생성 한 다음 웅변적인 관계 메소드 또는 직접 데이터베이스 쿼리를 통해 피벗 테이블 인서트를 호출함으로써 다수의 링크를 명시 적으로 조정합니다. 씨앗은 ID를 연결하고 추가 피벗 데이터 필드를 추가하여 피벗 테이블의 모집단을 관리하여 데이터베이스가 올바른 모델 간 연결을 반영 할 수 있도록합니다.

외국 키 종속성

공장은 종종 정의 내에서 외국의 주요 종속성을 관리합니다. 공장이 다른 모델에 의존하는 모델을 생성하면 관련 공장을 중첩하여 부모 또는 관련 모델을 자동으로 생성 할 수 있습니다. 이 접근법은 존재하지 않는 레코드를 참조 할 위험을 줄이고 테스트를위한 유효한 데이터 세트의 생성을 간소화합니다.

씨앗은 외국의 주요 종속성을 명시 적으로 처리해야하며, 종종 이러한 제약을 존중하기 위해 테이블 ​​모집단을 신중하게 주문해야합니다. 종자에서는 먼저 부모 또는 참조 모델을 생성 한 다음 기본 키를 사용하여 종속 모델을 연결하는 것이 일반적입니다. 따라서 씨앗은 관계형 무결성과 관련하여 데이터베이스 모집단의 흐름을 관리하는 오케스트레이터 역할을합니다.

재사용 및 구성

공장은 재사용 가능하고 합성 가능합니다. 그것들은 한 번 정의하고 지정된 관계를 갖춘 독립형 인스턴스 또는 관련 인스턴스를 반복적으로 만들어 테스트 워크 플로우 또는 변형으로 반복 된 종자 데이터 생성을 지원하는 데 사용될 수 있습니다.

씨앗은 더 절차 적 스크립트 인 경향이 있으며, 분리 할 때 재사용이 적으며 종종 특정 데이터 모집단 시나리오 또는 환경 설정에 중점을 둡니다. 그러나 그들은 공장을 빌딩 블록으로 불러 일으키고 복잡한 데이터 환경을 설정하기 위해 이러한 호출을 의미있는 순서로 구성합니다.

거래 및 격리

공장은 일반적으로 단독으로 또는 단일 공장 전화의 일부로 인스턴스를 만듭니다. 이는 테스트 거래에 랩핑 될 수 있지만 일반적으로 그렇지 않습니다. 그들은 한 번에 모델과 관계를 생성하는 데 중점을 둡니다.

시드기는 종종 데이터베이스 트랜잭션에서 큰 데이터 모집단 시퀀스를 래핑하여 전체 파종 작업이 성공하거나 실패하여 관련 테이블의 부분 또는 손상된 데이터를 방지합니다. 이 트랜잭션 접근 방식은 파종자가 여러 상호 의존적 모델과 관계를 관리 할 때 필수적입니다.

장점 및 사용 사례

관계에 공장을 사용하는 것은 빠르고 고립 된 테스트 데이터 생성 또는 테스트 자체 내에서 필요한 시나리오에서 유리합니다. 수동 개입없이 관련 모델 생성을 단순화하여 개발자가 수동 데이터 설정 대신 테스트에 집중할 수 있습니다.

종자 설치, 초기 데이터 모집단 또는 복잡한 파종 시나리오가 선호됩니다.이 시나리오는 다중 모델 종속성 및 비즈니스 로직 준수를 포함하여 데이터베이스 모집단의 순서 및 논리가 중요합니다. Seeders는 공장 및 직접 데이터베이스 작업을 통해 개발 또는 준비를위한 완전 준비된 데이터베이스 상태를 제공합니다.

실제 예

사용자와 게시물 작성을 고려하십시오.

- 공장을 사용하면 사용자 공장에서 게시물을 자동으로 작성하는 관계를 정의 할 수 있으므로 사용자가 공장을 통해 생성되면 관련 게시물이 자동으로 생성됩니다.

- 씨앗을 사용하면 시드러가 먼저 사용자 공장을 사용하여 사용자를 만듭니다. 그런 다음 별도로 포스트 공장을 사용하여 게시물을 작성하여 루프 또는 배치에서 사용자와 명시 적으로 연결하여 참조 무결성을 보장합니다.

공장은 모델 생성 프로세스 자체 내부의 관계 논리를 캡슐화하는 데 중점을 둡니다. 씨앗은 일관된 전체 데이터베이스 상태를 보장하는 오케스트레이션 및 순서에 중점을 둡니다.

요약

공장은 공장 정의 내에 관계형 제작 논리를 포함하여 관계를 처리하여 관련 모델의 자동적이고 중첩 된 생성을 가능하게합니다. 단일 또는 작은 관련 모델 세트를 생성 할 때 단순성과 재사용 성을 촉진하며 테스트 및 빠른 가짜 데이터 생성에 적합합니다.

종자는 전체 데이터베이스 모집단 프로세스의 순서와 흐름을 조정하여 관계를 처리하여 관련 모델이 일관된 순서와 유효한 외래 키로 생성되도록합니다. 그들은 공장을 빌딩 블록으로 사용하지만 복잡한 모델 간 종속성, 환경 별 데이터 및 전체 시드 작업에서 트랜잭션 일관성을 관리하는 책임을 확장합니다.

차이점은 추상화 수준에 있습니다. 공장은 개별 모델과 즉각적인 관계형 데이터 생성에 중점을 두는 반면, Seeders는 전체 데이터베이스의 데이터 초기화, 모델 종속성 및 관계를 더 넓은 범위로 조정합니다. 이러한 구별은 공장이 관계를 선언적으로 정의하는 이유이며, 종자는 실제 데이터베이스 환경에서 이러한 관계를 안정적으로 채우기위한 절차 적 논리를 구현합니다.