2017-12-08 36 views
1

私は、という表テーブルPEOPLEを持っていて、Personの行を格納しているとします。しかし、Personは、構造体のスライス構造体スライス、即ち超大国車両FriendListそれぞれフィールドを含んでいます。PostgreSQLの構造体のGolangスライス、構造体、スライスの保存と取り出し

これらの値をどのように保存して取得する必要がありますかPostgresqlゴラン?私はこの問題に関連する実用的なチュートリアルを見つけることができません。カスタムデータ型、JSON、ORMメソッドを使用するか、カスタム関数をビルドしてこれに対処しますか?そこに多くの意見が、私はまだこの問題を解決するための作業方法を理解することはできません、助けてください。

私はOzzo-dbxを使用していますが、どのような解決策も歓迎します。

誰かが実際の例を提供できますか?申し訳ありませんが、この初心者の質問があなたを刺激するが、私はすでに数日間試みたが、(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

JSON形式で 'slice'、' struct'、 'slice'構造体の値を保存することができます(' ID'は 'int'、' Name'は 'string'など) 。それは論理的です:) –

+1

_SuperPower_、_Vehicle_、_FriendList_プロパティはどのようにデータベースに格納されていますか?その決定をコントロールしているのですか、それとも関連するテーブルがありますか?それがあなた次第なら、多くの選択肢があります。 – maerics

+0

Golangのデータ型と同じように、これらのフィールド(* SuperPower *、* Vehicle *、* FriendList *)を格納したいとします。これは**最も簡単な**です。うまくいけば、これらのフィールドはJSONエンコーディングなしで保存することができます。それは**最も高速な**です。関連テーブルを持たずに関連付けをして保存することができれば、** elagant **となります。可能であれば、「SELECT Person.Vehicle.Brand ...」のような*ドット表記*を使用してデータベースにアクセスしたいと考えていますが、これは美しく実装されているかもしれません** ...可能でしょうか? :) –

答えて

1

を続ける場合は、超大国、車、友人のために別々のテーブルを作成する必要があります。

これらのテーブルとPeopleテーブルの関係が多対1または一対一である場合、それらに外部キーを追加できます。関係が多対多である場合は、関連レコードのfキーを保持するリンクテーブルを作成する必要があります。

データを格納するには、各レコードを簡単なSQLクエリ文字列とdatabase/sqlで個別に挿入/更新できます。

その後、複雑なSQL文字列でGoコードを汚染しないように、1人の人に必要なデータを1つの行に集計するテーブルビューを作成できます。次にGoで簡単なSQL選択クエリ文字列を定義し、database/sqlで実行します。

+0

ええ、あなたの提案をありがとう...うーん...ウェブサイトのフロントエンドはあまりにも多くのネストされたオブジェクトを使用してワークフローを簡単にします...ネストされたオブジェクトと配列はどこにでもあります... ** Postgresqlの**カスタムデータ型**について読んでください、私の救世主になることを願っています...うーん...とにかく、あなたの提案に感謝します...もっと良い解決策が見つからない場合、関係表を実装しようとします:) –

関連する問題