Запрашиваемая мнения: Акцент знаки / диакритические знаки в первичном ключе - PullRequest
2 голосов
/ 06 октября 2009

У меня есть это приложение, которое использует естественные первичные ключи. База данных использует набор символов WE8ISO8859P15. Так что в моем столе City есть первичные ключи, такие как MEDELLÍN и MÜNCHEN. У меня есть предчувствие, у нас будет много проблем с этим.

Проблемы, которые я вижу

  • Сопоставление этих данных с базами данных с другим набором символов. Я не хочу преобразование набора символов в мой первичный ключ
  • Сбрасывая данные в файлы и обрабатывая эти файлы, мы всегда должны хорошо знать специальные символы и настройки клиента

Должны ли мы разрешить диакритические знаки в ПК? Пожалуйста, не стесняйтесь высказать свое мнение.

Ответы [ 6 ]

5 голосов
/ 06 октября 2009

Попытка игнорировать диакритические знаки просто откладывает неизбежное. Да, вы можете сохранить некоторые проблемы в Восточной Европе. Но вы все еще не можете иметь дело с греческими названиями городов. Вам понадобится Unicode, и тогда уже нет смысла вводить орфографические ошибки Мюнхен / Мюнхен; это Мюнхен.

Тем не менее, в Брюсселе, известном под названием Брюссель, уже разрушено само понятие, что существует одно название города, и это Западная Европа. Таким образом, они принципиально не подходят для первичных ключей, независимо от того, как бы вы их записали.

4 голосов
/ 06 октября 2009

Почему бы и нет? Ваша модель БД уже сломана, так что почему бы не представить другой источник проблем? ;)

Если серьезно, базы данных улучшают поддержку Unicode, поэтому нет проблем с хранением естественного текста (со всеми его странностями). Ваша проблема - «первичный ключ». Существует несколько способов кодирования одного и того же текста (например, вы можете использовать акцентированные символы или диакритические знаки с простыми символами). Это означает, что вы можете получить две разные клавиши для одного и того же текста.

Существует много неправильных причин использовать бизнес-ключи в качестве PK, но нет хороших. Не делай этого. Укуси пулю и исправь это. Исправить это сейчас. Это будет стоить вам дешевле (даже если это будет стоить много), чем не починить.

3 голосов
/ 06 октября 2009

Является ли ваш атрибут (частью) ключа или нет, не имеет никакого отношения к проблеме.

У вас есть проблемы с преобразованием набора символов с ЛЮБЫМ трафиком данных в / из этого атрибута в любом случае, независимо от того, является ли ключом или нет.

Да, для того, чтобы кодировать «правильно» и иметь наилучшую возможную гарантию того, что ваши данные никогда не будут повреждены из-за проблем преобразования набора символов, вам необходим набор символов Unicode и одна из его кодировок.

Между прочим, у меня есть некоторые серьезные сомнения относительно самой таблицы. Что вы делаете с Гейдельбергом, Германия, и Гейдельбергом, Южная Африка? Оксфорд, Великобритания, и Оксфорд, США, где вообще нет штата без такового?

Какая информация зависит от этого ключа? Если их вообще нет, то ваша таблица больше относится к «типу переменной», чем к «подлинной таблице». В этом случае вы можете просто забыть таблицу и сделать ваши атрибуты названия города просто строкой.

Если вам действительно необходимо создавать некоторые "канонические варианты написания" для названий городов при экспорте данных из базы данных, то я бы посоветовал попытаться создать "таблицу фонетического поиска", в которой "часто используемые варианты написания" связаны с «каноническое правописание», которое вы должны произвести. Однако следует ожидать серьезных усилий по заполнению таких таблиц.

В этом случае, в дополнение к уже упомянутым вопросам, касающимся мюнхенского / мюнхенского и западно-греческого алфавита, не забывайте о проблемах типа Льеж / Луйк / Люттих (Мюнхен / Мюнхен).

3 голосов
/ 06 октября 2009

Да, у вас будут проблемы с этими персонажами. Выход из ASCII всегда вызывает проблемы. Но когда вы ведете бизнес не только в Великобритании и США, у вас нет выбора.

Я не вижу проблем, связанных со специальным набором символов для первичного ключа. Если вы экспортируете, импортируете, взаимодействуете или мигрируете, вам придется учитывать эти символы независимо от того, являются ли они частью вашего ПК или нет.

Но они подчеркивают проблему естественного ключа как первичного ключа. Кажется весьма вероятным, что кто-то напишет, например, Мюнхен, чтобы потом изменить его на Мюнхен, что, конечно, вызовет известную проблему обновлений на ПК.

3 голосов
/ 06 октября 2009

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

Помимо упомянутых проблем, это может быть:

  • Представьте себе, что вы переключаетесь на другого поставщика баз данных ...

Я не знаю, если ввести суррогатный первичный ключ вариант для вас, но это может быть правильное время для этого ;-) ...

Если нет, вы можете дублировать столбец :

  1. столбец pk не чувствителен к регистру, не имеет специальных символов и т. Д. *
  2. дополнительный столбец будет сохранять то, что было введено пользователем, чтобы показать его в некотором пользовательском интерфейсе ...
1 голос
/ 06 октября 2009

Вещи меняют свои имена, или их имена меняются для них. Города, университеты, парки, люди ... все непригодны в качестве первичных ключей. Может быть, уникальный ключ? Или часть уникального ключа?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...