What would be the best way to store the country of a user in SQL?
What would be the best way to store the country of a user in SQL?
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:
go
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.
You don't need these in a table the same way you don't need a table for something like true and false. Two characters is enough to deduce all the information.