2012-05-03 3 views
7

Ich muss mit einer vorhandenen (MySql) db arbeiten, wo die Namen von Tabellen und Spalten bereits definiert sind.Was sind die Regeln der Zuordnung von PersistEntity/PersistField zu Spalten- und Tabellennamen im DB

Wenn ich die Dokumentation richtig verstehe (und ich fand keine gute Dokumentation zu diesem Thema, so dass Links sehr geschätzt werden), sind Tabellennamen mit PersistIdentity verwandt und müssen daher mit einem Großbuchstaben beginnen (was nicht der Fall ist) der Fall, dem ich gegenüberstehe).

Spaltennamen werden jedoch automatisch nicht großgeschrieben (zumindest im Jessod-Buch, Kapitel Persistent, im Code-Snippet, das den automatisch aus Deklarationen generierten Code beschreibt), daher müssen Spalten in der DB mit beginnen ein Kleinbuchstabe.

Ist die obige Beschreibung tatsächlich richtig?

Kann ich speziell die Zuordnung von Tabellen zu Identitäten und Spalten zu Feldern steuern? Wenn nicht, welche Regeln werden dann automatisch für die Benennung angewendet? Welche Namen sind daher verboten?

Auch eines der Felder ist ein VARCHAR (30). Wie kann ich das Persistent mitteilen? Sie wirft derzeit (durch yesod devel), dass:

errMessage = "in Schlüsselspezifikation verwendet BLOB/TEXT Spalte 'my_field' ohne Schlüssellänge"}

die das Ergebnis der Auto-Migration ist (was ich wahrscheinlich sollte sowieso deaktivieren). Wenn ich jedoch ein begrenztes VARCHAR-Feld deklarieren möchte - kann ich das über Persistent und sein Tool für die automatische Migration tun?

Danke,

Antwort

6

Ich bin nicht eine Autorität auf dem Backend MySQL, aber IIRC (und basierend auf dem Code), können Sie die maximale Länge steuern die maxlen=... Attribut verwendet wird. In ähnlicher Weise können Sie über das Attribut sql=... den Namen, den das Feld in der Datenbank haben soll, direkt steuern. So könnte beispielsweise folgende Arbeiten:

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

Ich stimme auch, dass Sie den Automigrations Code deaktivieren sollten, wenn Sie mit einem bereits vorhandenen Schema zu tun hat.

+0

Danke, ich sah auch, dass die Dokumentation von Persistent (im Yesod-Buch) einen Teil meiner Frage beantwortete (über die Angabe von Feldnamen mit sql), also Entschuldigung für die Redundanz dieses Teils. –

Verwandte Themen