creating a schema from a database 테이블 간의 다 대다 관계가 작성되지 않습니다.DBIx :: Class가 many-to-many 접근자를 생성하지 않는 이유는 무엇입니까?
주요 문제입니까?
테이블 구조에서 다 대다 관계가 있음을 감지하고 자동으로 스키마 클래스에 해당 코드를 생성 할 수 있습니까?
creating a schema from a database 테이블 간의 다 대다 관계가 작성되지 않습니다.DBIx :: Class가 many-to-many 접근자를 생성하지 않는 이유는 무엇입니까?
주요 문제입니까?
테이블 구조에서 다 대다 관계가 있음을 감지하고 자동으로 스키마 클래스에 해당 코드를 생성 할 수 있습니까?
이러한 종류의 코드를 개발할 때 문제는 다중 참조를 포함하는 많은 테이블이 다 대다 테이블이 아니며 여러 다른 이유로 참조. 예를 들어, 나는 뭔가가 많은 테이블에서 많은 테이블로 간주 될 수있는 허구의 앱을위한 스키마를 만들 것이다.
create table category (
id primary key,
...
);
create table sub_category (
id primary key,
category references category(id),
...
);
/* EDIT:
This is the table that could be regarded as many_to_many
by an automated system */
create table product (
id primary key,
category references category(id),
sub_category references sub_category(id),
...
);
뭔가 특히 속도를 고려할 때, 여러 테이블이 웹 사이트의 데이터베이스에 가입 할 필요없이, 사용의 용이성을 위해이 방법을 구축 할 수 있습니다. 개발자가 쉽게 알아낼 수 있어야하고 체크섬 아래에 many_to_many 줄을 추가하는 동안 코드 조각이 확실히 '이것은 many_to_many'상황이 아니라고 말할 수 있습니다.
DBIX :: Class 스키마 출력은 좋은 출발점이며, 특히 MySQL 이외의 데이터베이스에서 자동 번호 매기기로 작업 할 때 특히 유용하다고 생각합니다. 위의 "Do not modify this line"항목을 수정해야합니다 (many_to_many는 당연히 체크섬 아래로 이동할 수 있습니다.)
예, 비슷한 상황이라고 생각합니다. 그러나이 상황에서 어떻게 될지 모르겠습니다. 접근자가 데이터의 의미가 아니라 접근 할 수 있지만, 무엇인가를 망가 뜨리지는 않습니다. 아니면 무언가를 놓치고 있습니까? –
그것은 아무런 피해도 입지 않을 것입니다. 그것은 부정확하다. 현재 시스템이 되었기 때문에 기본 스키마가 빌드 될 때 올바르지 않고 "완료"하지 않습니다. many_to_many 커넥터를 사용할 필요가 없으므로 시스템은 현재 그런 이유로 빌드하지 않습니다. 그것들을 추가하면 복잡성과 잘못된 가능성이 추가 될 것이므로 나는 그것을 버리는 것이 최선의 선택이라고 주장 할 것입니다. – Horus
나는 당신의 대답이 현상금을받을만한 가치가 있다고 생각합니다. 아직도 나는 모든면에서 그것에 동의하지 않는다. 설명해 주셔서 감사합니다! –
그것은 참으로 다소 근본적인 문제입니다 - many_to_many는 "관계 다리"아닌 것입니다 "관계." 반면, 실제 관계가 올바르게 발견되면 자동으로 다 대다 관계를 추가하는 것이 쉽다는 것을 의미합니다. has_many
두 개 이상의 테이블을 검색합니다. 관계. 그런 다음 이러한 관계의 각 쌍마다 다 대다 관계 브리지를 만듭니다. (물론 DBIx :: Class가이 작업을 수행하기를 희망 할 수도 있습니다.)
[v0.07015] (http : // cpansearch. perl.org/src/RKITOVER/DBIx-Class-Schema-Loader-0.07033/Changes) (2011-12-09에 발표 됨) –
@eugeney : DBIx :: Class 개발자는 정말 훌륭합니다. 자신의 IRC 채널에서 Caelum과 관련된 문제와 그 둘 모두에 대한 해결책을 가졌으므로 지금 당신은 그들을 라이브에서 볼 수 있습니다 .Awesome! –