1

완전히 새로운 데이터베이스를 정의하고 있습니다. 나는 지금 "보통"으로 기술 할 것이지만 아직도 좋은 것을 찾을 수없는 이라는 문제에 직면했다. 웹에서 좋은 정보를 찾을 수 없다. 그래서 여기에 문제가있다 :CakePHP에서 많은 hasMany 연관을 사용하여 mysql 테이블을 만드는 방법은 무엇입니까?

나는 등 (나는 가이드로 기술 할 것) 내 데이터베이스에 여러 테이블이 있습니다

  • 기술
  • 장소
  • 활동
  • 등등을 ..

이제 모든 가이드 유형에 대해 의견 기능과 과 같은 유사한 기능을 추가하고 싶습니다. 이미지 및 비디오 첨부. 나는 많은 가이드 유형을 가지고있어서 각각에 대해 별도의 주석 이미지와 비디오 테이블을 가지고 있다는 생각을 버렸다. 나는 그들 각각에 대해 하나의 테이블이 필요하다.

질문은 이것을 달성하는 가장 좋은 방법은 무엇입니까? 나는 대략 3 개의 해결책을 듣고 읽었으며 그들 중 누구에게도 익숙하지 않다.

  1. 이 문제를 해결할 수있는 UUID 사용에 대한 글을 읽었지만 제대로 작동하지 않습니다. 그게 올바른 방향이라면 누군가가 그걸 정교하게 해석 할 수 있을까요? Something about UUIDs I read but not quite understood it.

  2. 내가 읽은 다른 것은 연관 링크를 보유 할 수있는 계층 모델 "트리 테이블"을 만드는 것입니다. Managing Hierarchical Data in MySQL에 대한 자세한 정보

  3. 나는 계층 적 모델과 비슷한 방법으로 객체 테이블을 만들고 MySQL 내부에서 객체 상속과 같은 프로그램을 사용하는 방법에 대해서도 읽었습니다.

UUID는 가장 간단하게 들려서 거기에 도움을 주시면 감사하겠습니다.

나는 그들을 사용하는 방법에 대해 아무것도 몰라. 하지만 여기서 어떻게 작동하는지 생각해 봅니다. 적어도 여기에서 내가 성취하려고 노력하는 것은 무엇이고 어떻게 생각합니까?

  • 나는 새 테이블을 만듭니다. UUID 필드를 가질 수있는 가이드입니다.
  • 가이드 테이블 (스킨 등)을 가이드 테이블 (부모와 가이드는 자식으로 안내)에 연결하십시오.
  • 부모와 자녀 모두 UUID 필드가 있고 가이드를 만들 때 부모와 자녀가 동일한 UUID를 갖도록 연결될 수 있습니다. 아이는 또한 자신의 ID 필드가 있습니다.
  • 그런 다음 설명에 대한 안내 및 별도 ID int 필드를 가리키는 UUID 필드를 사용하여 설명에 대한 설명을 링크합니다.

이것이 올바른 방법인지 또는 전체 쓰레기인지 알려주세요. 그렇다면 어떻게해야합니까?

답변

0

나는 UUID에 대해 더 많이 읽고 응용 프로그램 전반의 고유 한 ID를 허용하기 때문에 데이터베이스의 "상속"스타일을 수행 할 수있었습니다.

개체와 같은 예약 된 테이블 이름 충돌을 피하기 위해 모든 테이블 이름의 시작 부분에 자체 접두사를 사용했습니다. my_와 같이 my_object와 같은 접두어를 사용할 수 있습니다. 이 예에서는 모든 테이블에 접두사를 사용해야합니다.

그래서 테이블 개체를 만들었습니다. 이진 (36) 형식의 id 필드가 있습니다. 케이크는 그것을 UUID 필드로 인식합니다. 그런 다음 1 : 1 식별 관계를 사용하고 다른 테이블을 상속했습니다. 다른 테이블과 상호 작용하고 싶었습니다.

그래서 Comments, Videos, Pictures 테이블과 1 : 1 식별 관계를 생성하여 테이블에 식별 외래 키도 기본 키가되도록했습니다.

그런 다음 기본 키없이 두 개의 1 : 1 비 식별 관계를 사용하는 매핑 테이블을 만들었습니다. 이것은 이것이 정말로 자기 자신과의 HABTM 관계 였음을 의미합니다.

이제는 다시 1 : 1 식별 관계가있는 뉴스 테이블과 같은 개체 테이블에서 다른 테이블을 "상속"합니다. 그런 다음 매핑 테이블을 사용하여 설명이나 개체와 1 : 1 식별 관계가있는 다른 항목을 뉴스 테이블에 연결할 수있었습니다.

나는 이것이 이러한 종류의 해결책을 깊이 생각하고있는 사람들에게 도움이되기를 바랍니다.

0

http://cakeapp.com을 확인하고 DB 레이아웃을 만든 다음 나중에 SQL을 다운로드하십시오.

+1

http://cakeapp.com/sqldesigners/sql/testcase 다음은 내가 시도한 것입니다.하지만 괜찮은 것처럼 보입니다.하지만 확률/장소/물건이 동일한 guide_id를 얻으면 시스템이 손상 될 가능성이 있는지 걱정됩니다. 가이드는 여러 "실제 가이드"를 나타냅니다. 아니면 아무것도 걱정하지 않습니까? – Pehmolelu

1

정상적인 hasMany 상태와의 관계에 대해 사용해 보셨습니까? Read about it here.

class Skill extends AppModel { 
    var $hasMany = array(
    'Comment' => array(
     'className'  => 'Comment', 
     'conditions' => array('Comment.type' => 1), // 1 for skills, 2 for places etc. or something like that. 
    ) 
    ); 
} 
+0

+1 A.k.a. 다형성 연관성. – deceze

+0

나는 그것을 제대로 이해했다면 테이블 간의 연결이 끊어 지므로 수동으로 코딩해야 할 것입니다. 가능하다면 링크를 깨뜨리지 않는 해결책을 찾고 싶습니다. 또는 cakephp가 그 종류의 솔루션을 얼마나 잘 처리합니까? – Pehmolelu