Нечисловое поле как PK - проблема проектирования базы данных - PullRequest
0 голосов
/ 19 марта 2012

У меня есть список названий стран и городов в utf8.Когда любой список извлекается, он должен возвращаться в том же порядке, в котором он был введен.

Например:

Country(country_name|PK)
City(city_name|PK, country_name|FK)

Страна_имя и название города не изменятся, фиксированные значения.Тем не менее, заказ будет проблемой.Чтобы убедиться, что я сохраняю значения заказа были введены как

Country:
UK
US
Africa

Я добавил новый столбец под названием sortcountry, который будет иметь числовые значения от 1 и выше.

Country(country_name|PK, sortcountry)

То же самое применимо к городуТаблица.

Я думаю, что это лучшее решение, чем country(country_id, countryname).Я правильно делаю?

Ответы [ 2 ]

0 голосов
/ 19 марта 2012

«Правильно ли я поступаю?»

Абсолютно нет.

Нет никакого упорядоченного порядка по результатам любого запроса.Если вы хотите, чтобы механизм возвращал результаты запроса в каком-то определенном порядке, вы должны указать этот порядок с помощью предложения ORDER BY.

0 голосов
/ 19 марта 2012

Нет проблем с добавлением столбца для сортировки, если сортировка не следует никаким другим естественным правилам.

Однако вы можете захотеть иметь первичный ключ только с сортировкой по стране, поскольку данные будут храниться на диске в соответствии с ихпервичный / кластерный индекс.Если вы обычно просто выбираете все страны, то вы бы хотели, чтобы они читались с диска в правильном порядке.

Затем добавьте еще один уникальный индекс к country_name, чтобы убедиться, что каждое имя уникально (как если бы оно былопервичный ключ) и для поиска.Вы не хотите запускать обновления с помощью sortcountry в качестве ключа.

...