2012-05-03 45 views
9

如何向Persistent聲明我有一個表,其主鍵是兩個字段的組合?如何在Persistent中定義組合鍵

例如,假設我有一個包含FIRST_NAME和姓氏表,然後在SQL語法,我需要這樣的:

CONSTRAINT pk_PersonID PRIMARY KEY (first_name,last_name) 

感謝,

回答

3

http://www.yesodweb.com/book/persistent,節唯一

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

這定義了由firstName和lastName組成的唯一鍵。

+1

這使得它獨一無二,但它使它成爲主鍵嗎? –

+0

默認情況下,存在一個整數id字段,它是主鍵並在內部使用。爲什麼你需要一個特定的主鍵?如果你真的這麼做,我認爲你不能用香草持久性來做,你可能必須自己編碼。 –

+1

我正在使用與現有應用程序共享的現有表...看起來好像我需要用一些解決方法來克服此問題。 –

3

您可以按照以下代碼使用Primary <field1> <field2>語法。

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

上面的代碼是從其中一個測試在https://github.com/yesodweb/persistent/blob/master/persistent-test/src/CompositeTest.hs#L74

This wiki page採取解釋了在持久定義模型的不同的語法。它確實應該是Yesod書的一部分。