Как СУБД сравнивает первичные ключи? - PullRequest
0 голосов
/ 26 января 2012

Я хочу защитить свои данные на уровне базы данных.Затем я решил: составной первичный ключ с индексом в 4 столбца, среди них 3 также внешние ключи.

name, id_discipline, name_step, year_step

Но я из Бразилии, и, с нашей точки зрения, у нас есть акценты, поэтому я путаю сравнение между новыми данными, которые будут вставлены в базу данных, и уже вставленными данными.Один пример:

Если я вставлю 'Mat' - '1' - '1st' - '2012', на уровне базы данных мои данные будут защищены, поскольку эти столбцы являются первичными ключами, тогда я не смогу вставить еще одну равную запись.('Mat' - '1' - '1st' - '2012')

Вопрос, среди них, name и name_step могут иметь акценты.Как СУБД будет работать при сравнении?Будут ли у меня проблемы с акцентами и сравнением?

Должен ли я использовать ISO-8859-1 в качестве своей кодировки и хранить без htmlentities()?

Заранее спасибо!

1 Ответ

2 голосов
/ 26 января 2012
  • Первое: похоже, вы немного запутались в терминологии.Максимум 1 первичный ключ на таблицу (в конце концов, отсюда и происходит первичный ключ).Может быть больше ключей или индексированных столбцов (это внешние ключи - они являются ключами какой-то другой таблицы, но в отношении этой таблицы это просто индексированные поля с ограничением).

  • Можно ли хранить строки с акцентами, зависит от типа .Для хранения национальных строк используется тип данных NVARCHAR, способ обработки и сохранения символов, отличных от ascii, зависит от используемого набора символов - это зависит от используемой СУБД.Как и другие типы данных, можно сравнивать NVARCHAR.

  • Для сравнения строк NVARCHAR сопоставление приходит на сцену.Это говорит о том, как сказать, какие строки «меньше / больше», чем другие строки.Опять же, детали меняются в зависимости от СУБД.Сортировка не имеет большого значения, когда речь идет об индексах (там вас интересует, равны ли строки или нет), это становится важным, когда вы заказываете.

  • ЭтоХорошей практикой является использование числовых идентификаторов в качестве первичных ключей .У вас могут быть индексы для строковых данных для быстрых запросов, и в то же время манипулирование данными становится проще, когда вы можете указывать записи с помощью числового идентификатора.

РЕДАКТИРОВАТЬ: Итак, к вопросу иВаш комментарий:

Если вы убедитесь, что вводите свои данные так, как ожидает БД, сравнение будет работать.Это означает, что в вашем коде данные должны быть в наборе символов, определенном для таблицы / столбца (или по умолчанию для базы данных, если вы ее не указали).Обычно самым простым способом было бы использовать NVARCHAR в качестве типа данных для полей, которые содержат строки на национальном языке и входные строки Unicode на стороне кода.

Технически, можно использовать VARCHAR для хранения натальных символьных строк., но проще ошибиться - вы должны убедиться, что везде сохранены одинаковые настройки набора символов: определение таблицы, соединение с базой данных, код.И вы можете легко зайти в тупик, когда вам вдруг понадобится ввести символы с акцентом, не содержащиеся в выбранном вами наборе символов, поэтому я настоятельно рекомендую использовать NVARCHAR и Unicode.

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