Я так не думаю.Вот мой двухминутный краткий обзор:
Это очень плохо нормализовано. По крайней мере city
-> country
следует перенести в другую таблицу (и оттуда нормализовать).Я считаю, что почтовые индексы могут пересекать границы города (или я очень плохо помню);Мне неизвестен такой город, который пересекает государственную границу.
formatted_address
является «оптимизацией» и, вероятно, должен быть вычисляемым полем: то есть все данные для его воссоздания должны существовать в другом месте .(Это означает, что теперь не нужно беспокоиться об этом.)
Удачное проектирование.
Простая "более нормализованная" форма просто делаетпредложенное выше:
LOCATIONS
location_id -- int
is_point_of_interest -- bool
name -- varchar(100) -- NULL
street_number -- varchar(10) -- NULL
street -- varchar(40) -- NULL
city_id -- int
postal_code -- varchar(10)
latitude -- float(10,6)
longitude -- float(10,6)
last_updated_at -- timestamp
CITIES
city_id
name -- varchar
-- similarly, the following should be normalized to STATES and COUNTRIES
state -- varchar(40)
state_code -- varchar(3)
country -- varchar(40)
country_code -- varchar(3)
Конечно, CITIES могут быть дополнительно нормализованы, и поэтому может таблица POSTALS: я не знаю достаточно ни о почтовых кодах, ни о предметной области приложения.postal_code
действует как часть неявного составного-суррогата-ФК, так что это не супер ужасно , как там.Однако перемещение его в отдельную таблицу может легко допустить ограничения проверки и целостности.
Редактировать: Лучше всего будет нормализовать таблицу POSTALs, поскольку допустимо только очень небольшое количество почтовых кодов дляданный город: я не уверен в связи между почтовым индексом и городом, поэтому не могу рекомендовать, как это сделать.Возможно, посмотрите на существующие схемы?