Какова наилучшая практика для именования таблиц базы данных для обеспечения естественной организации?

Мы размещаем общие префиксы для связанных таблиц, чтобы они отображались рядом друг с другом в нашем программном обеспечении для управления базами данных (Toad, Enterprise Manager и т.д.).

Итак, например, все пользовательские таблицы начинаются со слова User:

  • Пользователь
  • UserEvent
  • UserPurchase

В идеале, в честь трех великих достоинств программиста эти таблицы должны называться User, Event, Purchase соответственно, чтобы сохранить некоторую типизацию, согласовано?

Является ли это соглашение о наименовании лучшей (только?) практикой для группировки связанных таблиц естественно?

Ответ 1

Я имею тенденцию идти против зерна в соглашениях об именах по двум пунктам здесь...

  • Мне не нравится использовать префиксы, чтобы вещи группировались вместе в данном пользовательском интерфейсе. Для меня таблицы следует называть такими, что в коде они легко читаемы и имеют смысл. Было много исследований (в основном игнорируемых программистами), которые показывают, что такие вещи, как использование подчеркиваний, логических имен, устранение сокращений и устранение таких вещей, как префиксы, оказывают очень большое влияние как на понимание, так и на скорость работы с кодом. Кроме того, если вы используете префиксы для разбивки таблиц, что вы делаете, когда таблица используется несколькими областями - или, что еще хуже, она начинается только в одной области, но позже начинает использоваться в другой области. Вам теперь нужно переименовать таблицу?

  • Я почти полностью игнорирую длину имени. Меня гораздо больше беспокоит читаемость и понятность, чем я хочу занять 1/10 секунды дольше, чтобы ввести имя столбца или таблицы. Когда вы также помните, что все время тратилось, пытаясь вспомнить, если вы сократили "число" как "нет", "num" или "nbr" и имейте в виду использование таких вещей, как Intellisense, использование более длинных и более значимых имен Мне нелегко.

Учитывая эти вещи, если ваша таблица UserEvents действительно связана с событиями, связанными с пользователем, тогда это имя имеет смысл. Использование только событий привело бы к тому, что вы получили таблицу с именем плохо, потому что имя на мой взгляд недостаточно ясное.

Надеюсь, это поможет!

Ответ 2

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

Прочитайте книгу Джо Селко " Стиль программирования SQL." Его первая глава в этой книге посвящена соглашениям об именах, руководствуясь стандартом ISO 11179 для именования метаданных. Одна из его рекомендаций - избегать ненужных префиксов в вашем соглашении об именах.

Ответ 3

Я бы использовал это обозначение i.e "UserEvent", если эта таблица является представлением отношения "многие ко многим" между таблицами "Пользователь" и "Событие".

Ответ 4

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

  • Пользователи (Id int, Name varchar)
  • Учетные записи (Id int, имя varchar)
  • Логины (Id int, Name varchar)
  • События (Id int, имя varchar)
  • UserEvents (UserId int, EventId int)
  • AccountEvents (AccountId int, EventId int)
  • LoginEvents (LoginId int, EventId int)

Ответ 5

Я предполагаю, что соглашение об именах в SQL является или, по крайней мере, должно следовать тем же принципам, что и на других языках программирования. Я всегда предпочитал имена переменных/имя класса, которые четко определяли цель, и это обычно означает более типизированное. Я думаю, что важно помнить, что код написан только один раз, но читается много раз, поэтому ясность имеет жизненно важное значение. Последние 4 или 5 лет я заметил, что имена переменных выросли с "eDS" до "employeeDataSet", и я думаю, что IntelliSense является основной причиной этого. Я думаю, что мы увидим то же самое в SQL с Red SQL SQL Prompt, и теперь MS SQL2008 внедрили Intellisense в мир баз данных mainstrem.

Ответ 6

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

Имя, например UserEvents, должно использоваться, когда содержимое каждой строки описывает взаимосвязь между пользователем и событием. Если бы я увидел такую ​​таблицу в базе данных, которая была для меня новой, я ожидал увидеть первичный ключ в этой таблице, состоящий из двух внешних ключей: один для таблицы Users и один для таблицы Events.

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

В этом последнем вопросе возникают некоторые вопросы: дома многие новые люди будут быстро добираться до базы данных? Какая документация будет доступна этим людям? Насколько важны эти новые люди для успеха проекта: ijncludes база данных или успех дизайнера базы данных?

Ответ 7

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

Ответ 8

Лично я переименовываю свои таблицы следующим образом:

  • Основные таблицы: tbl_user
  • Справочные таблицы: ref_profil
  • Связанные таблицы: lnk_user_profil