Cross-posted from “What would be the best way to store the country of a user in SQL?” by @lena@gregtech.eu in !learn_programming@programming.dev


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?

  • Lena@gregtech.euOP
    link
    fedilink
    English
    arrow-up
    0
    ·
    2 months 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
      1
      ·
      2 months 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
      0
      ·
      2 months 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.