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?
There are ISO country codes.
https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes
This and nothing else. Had to deal with way too many APIs that would use some sort of homebrew schema.
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
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.
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.
Sooooo I copy paste every single country code and put it in a table?
If you can’t figure out how to get a foreign table into your database let someone who knows databases do it for you
How exactly you create that table is up to you of course, I don’t know enough about your project setup.