2012-05-03 16 views
9

¿Cómo declaro persistente que tengo una tabla cuya clave principal es una combinación de dos campos?¿Cómo puedo definir una clave compuesta en Persistente

Por ejemplo, supongamos que tengo una tabla que contiene nombre apellido apellidos y, a continuación, en la sintaxis SQL que necesitaré algo como:

CONSTRAINT pk_PersonID PRIMARY KEY (first_name,last_name) 

Gracias,

Respuesta

3

Ver http://www.yesodweb.com/book/persistent, sección Singularidad

Person 
    firstName String 
    lastName String 
    age Int 
    PersonName firstName lastName 
    deriving Show 

Esto define una clave única hecha de firstName y lastName.

+1

Eso lo hace único, pero ¿lo convierte en la clave principal? –

+0

De forma predeterminada, hay un campo de Id. Entero que es la clave principal y se usa internamente. ¿Por qué necesitas una clave primaria específica? Si realmente lo haces, no creo que puedas hacerlo usando persistente de vanilla, es posible que tengas que codificar la tabla tú mismo. –

+1

Estoy usando una tabla existente que se comparte con las aplicaciones existentes ... Parece que tendré que superar esto con alguna solución entonces. –

3

Puede usar la sintaxis Primary <field1> <field2> como se indica a continuación.

PrimaryCompositeWithOtherNullableFields 
    foo String  maxlen=20 
    bar String  maxlen=20 
    baz String Maybe 
    Primary foo bar -- THIS LINE -- 
    deriving Eq Show 
    enter code here 

El código anterior se toma de una de las pruebas en https://github.com/yesodweb/persistent/blob/master/persistent-test/src/CompositeTest.hs#L74

This wiki page explica las diferentes sintaxis para definir el modelo en persistente. Realmente debería haber sido parte del libro de Yesod.

Cuestiones relacionadas