Image

Imagevybe wrote in Imageru_java

Categories:

Вопрос по БД

Всем доброе время суток. Возможно вопрос не туда, но думаю тут народ сможет мне это разъяснить. А то что-то туплю..
Значит он относится к проектированию БД.
Предположим у меня есть сущность "Пользователь". И один из атрибутов этого пользователя - город, в котором он живет.
Сомо собой, городов в итоге будет ограниченное колличество. Они будут постоянно повторяться. И вот тут затуп.. Я вижу 3 варианта:
1) Оставить поле Город в таблице Пользователи, проиндексировать его и оставить борьбу с избыточьностью на совести СУБД.
2) Создать таблицу Города с сурогатным ключом (какой-нибудь ID) и полем для названия города. Вынести ID как форин кей в таблице пользователей. При этом придется следить за не вставлением дубликатов в таблицу городов.
3) Создать таблицу Города с натуральным строковым ключем - названием города, и сделать под это поле форин кей в таблице пользователей.

У каждого подхода я вижу свои приимущества и недостатки, но все таки как правильно и главное почему?

UPD:
Я привел это только как пример. Возможно неудачный. Допустим есть только города и города с одинаковым названием считаются одним городом. Т.е. мне там нужно точно без дупликатов.
Не обращайте внимания на суть - у меня другие бизнес процессы и структуры данных, которые просто было бы безсмысленно объяснять.