Тип данных поля / вопросы проверки - PullRequest
0 голосов
/ 27 ноября 2010

У меня есть несколько вопросов о том, какие типы данных использовать и как определить некоторые поля на моем сайте. Моя текущая схема находится в MySQL, но в процессе перехода на PostregSQL.

  1. Имя и фамилия -> Поскольку у меня многоязыковой язык, все таблицы поддерживают UTF-8, но нужно ли мне объявлять их как nvarchar в случае, если пользователь вводит китайское имя? Если это так, как я могу применить проверку поля, если она настроена на прием алфавитов только в том случае, если я предполагаю, что это английские алфавиты, а не для валидных китайских или арабских алфавитов? И я не думаю, что PostregSQL в любом случае поддерживает nvarchar?

  2. Для сохранения текущей временной шкалы -> Пример Я работаю в компании А с января 2009 года по настоящее время. Так что я предполагаю, что для этого будет 3 поля: timeline_to, timeline_from, time_line present, куда и откуда - месячные / годовые varchars, а present - просто флаг для установки текущей даты?

  3. Пароли пользователей. Я использую SHA 256 + соления. поэтому у меня есть 2 поля, объявленные следующим образом:
    password_hash - varchar (64)
    password_salt- varchar (64)
    Это работает, если пароль пользователя должен быть длиной от 8 до 32 символов?

  4. время рождения -> Мне нужно записать время рождения для приложения, чтобы вычислить некоторые астрологические значения. так что это означает часы, минуты и утра / вечера. Поэтому лучше всего хранить эти 3 отдельных списка выбора с помощью varchar или использовать тип данных времени в бэкэнде и разрешать пользователям использовать один список выбора в интерфейсе?

  5. Наконец, только для месяца и года рождения, это int или varchar, если я храню их в отдельных строках? Все они имеют первичные ключи int для целей отчетности, так что int имеет больше смысла? или я должен хранить их в 1 поле только как тип даты?

Ответы [ 2 ]

1 голос
/ 30 ноября 2010
  1. NCHAR, а не NVARCHAR.

    • Никогда не создавайте переменные, которые можно исправить;это дополнительная нагрузка для упаковки / распаковки при каждом доступе.Это означает, что никогда, никогда не используйте var для индексированных столбцов, у вас будет очень вялый индекс.В наши дни дисковое пространство дешевое.

    • вам нужен столбец Language на уровне Person, который говорит вам, какой язык использовать в различных требованиях к синтаксическому анализу и проверке.

  2. Допустим, у вас есть таблицы Person, Employer и Employment.Обсуждаемые вами столбцы находятся в Employment.

    • , вам нужен столбец StartDate и столбец EndDate, это тип данных DATETIME.

    • Вы делаетене нужно «представлять» как отдельный столбец.«Present» - это всегда значение самой новой строки Employment, если не указано иное.Установите по умолчанию наибольшую дату, которую может обработать БД, например.9999-12-31;который может быть переопределен явной записью.

  3. Нет.Вам нужен только один столбец CHAR (256).Хэнк объяснил это.

  4. Для любого компонента даты или времени используйте тип данных DATETIME.Вот для чего это.База данных обрабатывает это последовательно и прекрасно индексирует.Вы выполняете арифметику DATE, используя различные функции db ().И вы избежите всех проблем, связанных с его кодированием в виде INT и т. Д. (Недопустимые недопустимые даты и время).

  5. BirthDateTime - один столбец DATETIME.

0 голосов
/ 27 ноября 2010
  1. Понятия не имею, никогда не имел дело с этим полем очень много.

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

  3. Поскольку вы хэшируете, вы всегда получите 256-битную шестнадцатеричную строку в качестве вывода независимо от того, что вводитда, поэтому все пароли из 8-32 символов будут работать.

  4. Используйте DATETIME в бэкэнде.Вы можете сделать что-то вроде MONTH (), чтобы извлечь части прямо в синтаксисе SQL.Конечно, вам нужно отформатировать дату как раз для того, чтобы SQL принял ее, но это не так уж сложно.

  5. Опять же, все извлекается с помощью функций DATETIME в SQL.

...