Подтвердить что ты не робот

Заказ столбцов в таблицах базы данных

Когда дело доходит до порядка столбцов в таблицах БД, существуют ли какие-либо стандарты или, по крайней мере, лучшие методы?

Вот соглашение о ручной работе, которое я придерживаюсь:

  • первичный ключ (т.е. id);
  • уникальные столбцы (т.е. email, ssn);
  • внешние ключи (т.е. article); столбцы
  • содержащие пользовательские данные (т.е. first_name, last_name);
  • столбцы, содержащие данные, сгенерированные системой;
    • небулевой (т.е. password_hash);
    • boolean (т.е. deleted, verified)
  • столбцы временной метки (т.е. created_at);
Тем не менее, они оставляют много вопросов без ответа, поэтому я хотел бы услышать ваши мысли.
4b9b3361

Ответ 1

Короче говоря, вы четко изложили стандартные соглашения и вы не пропустите много. ИМО, единственный шаг, который заставит кого-то выглядеть непрофессиональным, не будет иметь Первичный ключ (ы). Наличие внешних ключей происходит сразу после того, как это хорошая конвенция, но не большая сделка. (Первичные ключи с несколькими полями, которые включают внешние ключи, должны, конечно, быть в самом начале, или кого-то нужно избивать.) Я бы добавил еще две мысли:

  • У полей с похожими темами рядом друг с другом. Например, широко разделенные поля города/государства/почтового индекса были бы бесполезными. Я думаю, что это не имело бы значения ни в коем случае, было ли user_role или user_ip первым, но они звучат так, будто они должны быть рядом друг с другом.
  • Вторично с другими такими соглашениями, это не повредит для того, чтобы вещи были в алфавитном порядке.

Наличие дополнительных соглашений в вашей базе данных - очень хорошая идея (например, как вы упоминаете, всегда имея метку времени в конце). Если у вас есть поля ChangeDate и ChangeBy во многих ваших таблицах, их наличие (видимо, рядом друг с другом и) последовательно расположено хорошо.

Дополнительно, ErikE упомянули, что может быть некоторая эффективность иметь в конце вашей таблицы поля переменной длины (varchar, nvarchar), которые могут часто содержать обнуляет. Помимо этого, я не думаю, что есть какие-либо преимущества в производительности для организации определенных вещей в современных реляционных базах данных.

Нейминг

Часто, когда вы решаете порядок столбцов - это то же самое время, когда вы решаете имена столбцов, поэтому я хотел бы немного рассказать об этом. Вы можете сделать ужасные и дорогостоящие ошибки с помощью наименования ваших полей; это гораздо важнее, чем упорядочение столбцов. Заказ можно легко изменить, но плохие имена вызовут проблемы навсегда. Это огромная боль, чтобы изменить имена таблиц и столбцов через год, когда есть десяток ссылок на них. Я просто добавил ответ здесь, чтобы решить эту очень важную тему.

Ответ 2

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

Доказательство конечных NULL, уменьшающих пространство для хранения, можно найти в Расшифровка страницы данных SQL Server:

... Нулевое битовое изображение немного отличается (fe/1111 1110), так как теперь второй столбец - null. какой Интересно, что в этой строке один столбец с переменной длиной настоящее, а не два. Таким образом, существует только одиночный конец столбца переменной длины индексный индекс, 0d00/0x000d/13. Из этого можно заключить, что столбцы обрабатываются по порядку, и, следовательно, один возможно, захочет рассмотреть порядок столбцов, если конкретный столбец обычно null, это может быть больше эффективно, чтобы он был заказан последним.

Обратите внимание, что это относится только к столбцам переменной длины. Хотя это явно включает varchar, varbinary и т.д., Я не уверен в других типах данных (и у меня нет времени, чтобы окончательно определить это).

Ответ 3

В сервере MS Sql типы данных ntext, image и text (все последние устаревшие) должны быть последними столбцами в строке, чтобы избежать штрафа за производительность.

Ответ 4

вы можете найти различные лучшие практики в сети.

Всегда сохранять инструкции CREATE TABLE, наряду со всеми другими заявлениями определение схемы базы данных в безопасном место нахождения. Каждый раз, когда вы делаете изменения к объекту базы данных, убедитесь, что script изменить и проверить его на программное обеспечение для управления версиями, такое как Безопасный визуальный источник.

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

Хотя описательные имена таблиц имеют нет преимуществ по производительности. Они делают базы данных самодокументированы и проще для кода. Названия таблиц должны отражают их деловое значение.

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

Создание общедоступных таблиц на такая же файловая группа. Вы можете ожидать если данные обычно соединенные таблицы находятся на тот же диск.

Создайте кластерный индекс на каждом Таблица. В каждой таблице может быть только единый кластеризованный индекс. Если таблица имеет кластерный индекс, его данные физически сортируются в соответствии с кластеризованный индексный ключ. Кластерные индексы в SQL Server есть множество преимуществ. Например, если вы извлекаете данные из таблица с использованием предложения ORDER BY ссылаясь на кластерный индексный ключ, данные не нужно сортировать по время выполнения запроса.

Если две таблицы имеют общий столбец, например customer_id, и оба таблицы имеют кластеризованные индексы на присоединение столбца customer_id, такое таблицы будут значительно больше эффективнее, чем объединение одних и тех же таблиц основанный на той же колонке, но без кластеризованные индексы.

Убедитесь, что кластеризованный индекс построен на столбец, который содержит различные

Источник: Создание таблиц SQL Server: руководство по лучшим практикам