2012-05-03 3 views
7

테이블 및 열의 이름이 이미 정의되어있는 기존 (MySql) db로 작업해야합니다.PersistEntity/PersistField에서 DB의 열 및 테이블 이름으로 매핑하는 규칙은 무엇입니까

문서를 제대로 이해했다면 (이 주제에 대한 좋은 설명서를 찾지 못해서 링크가 매우 높이 평가 될 것입니다.) 테이블 이름은 PersistIdentity와 관련되어 있으므로 대문자로 시작해야합니다. 내가 직면하고있는 경우).

그러나 열 이름은 자동으로 대문자가됩니다 (적어도 선언문에서 자동 생성 된 코드를 설명하는 코드 스 니펫의 Yesod 책의 영구적 인 장에 포함되어 있음). 따라서 DB의 열은 소문자.

위의 설명이 실제로 사실입니까?

특히 ID에 대한 테이블과 열에 대한 매핑을 제어 할 수 있습니까? 그렇다면 명명 규칙에 자동으로 적용되는 규칙은 무엇입니까? 따라서 어떤 이름이 금지됩니까?

또한 필드 중 하나는 VARCHAR (30)입니다. 지속성에 어떻게 알릴 수 있습니까? 그것은 현재 (yesod의 (STABLE)을 통해) 불평이 :

errMessage = "BLOB/TEXT 컬럼 키 길이없이 키 명세서에서 사용되는 'my_field'"(자동 마이그레이션의 결과이다}

하는 I 아마 어쨌든 비활성화해야합니다). 그러나 바운드 된 VARCHAR 필드를 선언하고 싶다면 Persistent 및 자동 마이그레이션 도구를 통해이를 수행 할 수 있습니까?

감사합니다,

답변

6

나는 MySQL의 백엔드에 권한 아니지만, IIRC (그리고 코드를 기반으로), 당신은 maxlen=... 속성을 사용하여 최대 길이를 제어 할 수 있습니다. 마찬가지로 sql=... 특성을 사용하여 필드가 데이터베이스에 가질 이름을 직접 제어 할 수 있습니다. 따라서, 예를 들어, 다음은 작동 할 수 있습니다 :

Person sql=people 
    name Text sql=full_name maxlen=40 
    age Int 

을 나는 또한 당신이 기존의 스키마를 처리하는 경우에는 자동 마이그레이션 코드를 비활성화해야합니다 동의합니다.

+0

감사합니다. 또한 Persistent의 문서 (Yesod 책에서)가 (SQL을 사용하여 필드 이름을 지정하는 것에 대한) 제 질문의 일부로 대답했음을 보았습니다. 그 부분의 중복성으로 인해 유감입니다. –

관련 문제