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?

    • einkorn@feddit.org
      link
      fedilink
      arrow-up
      1
      ·
      2 months 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
      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.

    • ExperimentalGuy@programming.dev
      link
      fedilink
      arrow-up
      1
      ·
      2 months ago

      This is the only real way to do it, the other solutions involve “standards” which more often than not aren’t all encompassing. Make sure that any user input of a country is just them uploading the jpg of their home country without any sort of validationbecausee everyone is loyal to their home country.