2017-12-08 1 views
1

Lassen Sie sagen, ich habe eine TabellePEOPLE benannt, die Reihen von Person speichern abruft. Jedoch enthält die Personslice, struct und Scheibe struct, das heißt, die Superpower, Fahrzeug und Freund Felder sind.Speicher und Golang Scheibe, Struktur und Scheibe der Struktur in Postgresql

Wie soll ich speichern und diese Werte in Postgresql mit Golang abrufen? Ich kann kein praktisches Tutorial zu diesem Problem finden. Verwenden Sie benutzerdefinierte Datentypen oder JSON- oder ORM-Methoden oder erstellen Sie benutzerdefinierte Funktionen, um mit diesen umzugehen? Viele Meinungen da draußen, aber ich kann immer noch keinen funktionierenden Weg finden, dieses Problem zu lösen. Bitte helfen Sie mir.

Ich benutze Ozzo-dbx, aber jede Lösung ist willkommen.

Kann jemand ein funktionierendes Beispiel liefern? Sorry, wenn dies newbie Frage, die Sie reizt, aber ich habe bereits versucht, für ein paar Tage und haben immer versagt ... (T_T)

type Transport struct { 
    Brand string 
    Size int 
} 

type Friend struct { 
    Name   string 
    IsProgrammer bool 
} 

type Person struct { 
    ID   int 
    Name  string 
    Superpower []string //slice 
    Vehicle Transport //struct 
    FriendList []Friend //slice of struct 
} 
+1

Sie können 'slice',' struct' und 'slice of struct' Werte im JSON Format und andere Werte' as is' speichern (so 'ID' als' int', 'Name' als' string' usw.) . Es wird logisch sein :) –

+1

Wie sind die Eigenschaften _SuperPower_, _Vehicle_ und _FriendList_ in der Datenbank gespeichert? Kontrollieren Sie diese Entscheidung oder gibt es verwandte Tabellen für sie? Wenn es an dir liegt, hast du viele Möglichkeiten; Wenn die Datenbankstruktur bereits eingestellt ist, dann müssen Sie nur mit diesen Assoziationen umgehen ... – maerics

+0

Ich möchte diese Felder speichern (* SuperPower *, * Vehicle * und * FriendList *), als ob die Datentypen in Golang. Dies ist das ** einfachste **. Hoffentlich können diese Felder ohne JSON-Codierung gespeichert werden, dann ist das das ** schnellste **. Wenn es möglich ist, ohne relative Tabellen mit Assoziation zu speichern, dann ist das ** elagant **. Wenn möglich, möchte ich mit * Punktnotation * auf die Datenbank zugreifen, zB 'SELECT Person.Vehicle.Brand ...', dann kann das schön ** implementiert werden ** ... ist das möglich? :) –

Antwort

1

In den meisten Fällen sollten Sie erstellen separate Tabellen für Supermächte, Fahrzeuge und Freunde.

Wenn die Beziehungen zwischen einer dieser Tabellen und der People-Tabelle "Viele-zu-Eins" oder "Eins-zu-Eins" sind, können Sie ihnen Fremdschlüssel hinzufügen. Wenn die Beziehung number-to-many ist, sollten Sie eine Verknüpfungstabelle erstellen, die die fkeys der verknüpften Datensätze enthält.

Um die Daten zu speichern, können Sie jeden Datensatz einzeln mit einfachen SQL-Abfragezeichenfolgen und database/sql einfügen/aktualisieren.

Danach können Sie Tabellenansichten erstellen, die die gewünschten Daten pro Person in einer einzigen Zeile zusammenfassen, sodass Sie Ihren Go-Code nicht mit komplexen SQL-Strings belasten. Dann definieren Sie einfache SQL-Select-Abfragezeichenfolgen in Go und führen sie mit database/sql aus.

+0

Ja, danke für deinen Vorschlag ... Hmmm ... das Frontend der Webseite benutzt zu viel geschachteltes Objekt, da das ihren Workflow erleichtern wird ... Verschachtelte Objekte und Arrays sind überall ... Haha ... I lesen Sie über ** benutzerdefinierte Datentypen ** in Postgresql, hoffe, dass das mein Retter sein wird ... Hmmm ... Wie auch immer, danke für Ihren Vorschlag ... wird versuchen, die Beziehungstabelle zu implementieren, wenn keine bessere Lösung gefunden werden kann :) –

Verwandte Themen