У мене є деякі бази даних, створені спочатку за допомогою Entity Framework Code; програми працюють і взагалі я дуже задоволений тим, що Code First дозволяє мені робити. Я - перший програміст, а другий - DBA, за необхідності. Я читаю про DataAttributes, щоб далі описати на C #, що я хочу робити з базою даних; і моє запитання: яке покарання я буду їсти, якщо ці nvarchar(max)
рядки будуть в моїй таблиці (див. приклад нижче)?
У цій конкретній таблиці є кілька стовпців; в C # вони визначаються як такі:
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string Name { get; set; }
public string Message { get; set; }
public string Source { get; set; }
public DateTime Generated { get; set; }
public DateTime Written { get; set; }
Я очікую запит та / або сортування на основі Імені, Джерела, Створеного та Написаного. Я очікую, що ім’я та джерело будуть розміром у 0-50 символів, зрідка до 150. Я очікую, що ця таблиця розпочнеться досить маленькою (<100k рядків), але значно зросте з часом (> 1м рядків). Очевидно, повідомлення може бути невеликим або великим, і, ймовірно, не буде запитуватися проти нього.
Що я хочу знати, чи визначається хіт ефективності для моїх стовпців Ім'я та Джерело, як nvarchar(max)
коли я ніколи не очікую, що вони будуть перевищувати 150 символів?
varchar(max)
скрізь шкодить вашій роботі - не робіть цього! Використовуйте відповідні типи даних - використовуйте varchar(max)
ТОЛЬКО, якщо ВАМО потрібно більше 8000 символів! (Я ніколи не бачив, щоб ім’я чи електронна пошта людини були такими довгими!) - Дивіться, в чому сенс використання VARCHAR (n) Більше? для отримання додаткової інформації
[MaxLength]
або[StringLength]
атрибути. Деякі додаткові можливі негативні фактори занадто широких стовпців згадуються у відповіді @ PaulWhite тут