Cross-posted from “What would be the best way to store the country of a user in SQL?” by @[email protected] in [email protected]


I use Gorm. This is the current code:

package main

import (
	"fmt"
	"log"

	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

type Env struct {
	DB     *gorm.DB
	Logger *log.Logger
}

type User struct {
	ID           uint
	Username     string
	Name         string
	Email        string
	PasswordHash string
	Country      string //should probably be a foreign key of another table
}

func initDB() {
	env := &Env{}
	db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{})
	if err != nil {
		fmt.Printf("Error opening database: %v", err)
		return
	}
	env.DB = db
	env.DB.AutoMigrate(&User{})

}

func main() {
	initDB()
}

As you can see in the comment in the code, I assume the best way would be to have a table of countries and then assign each user to one via a foreign key. However, it seems a bit cumbersome to manually create a list of all countries. Is there a better way to do this?

    • einkorn@feddit.org
      link
      fedilink
      arrow-up
      27
      ·
      2 days ago

      This and nothing else. Had to deal with way too many APIs that would use some sort of homebrew schema.

    • Lena@gregtech.euOP
      link
      fedilink
      English
      arrow-up
      4
      ·
      2 days ago

      Am I supposed to make an SQL statement that puts these country codes into a table, along with the country’s name? There’s probably a better way. Maybe I could make a new entry for every unique country a user is from

      • deadcream@sopuli.xyz
        link
        fedilink
        arrow-up
        29
        ·
        2 days ago

        Why do you need to store the name of a country in the database? Frontend can take the country code and display a full name on its own, and do it in a localized way too.

      • schnurrito@discuss.tchncs.de
        link
        fedilink
        arrow-up
        8
        ·
        2 days ago

        not sure I understand the distinction between the “am I supposed to” and “maybe I could” parts?

        You should create a table of all countries, you can just copy that from the above link. Then you reference that table with a foreign key in your users table.