Как правильно называть таблицы в бд
Перейти к содержимому

Как правильно называть таблицы в бд

  • автор:

Как правильно именовать таблицы, столбцы в базе данных?

Всем привет. Изучаю базы данных, установил MySQL, создал БД. Вопрос — как правильно именовать БД, таблицы, столбцы в базе данных? В ЯП есть правила именования переменных, методов и т.д., а в БД есть такие правила, рекомендации. Гугл выдает разные варианты. Почему спрашиваю, а) чтобы самому потом не запутаться, б) чтобы комп не ругался, не очень хочется потом все переписывать, лучше сразу делать правильно. Например, как правильно назвать столбец: «name column» или «name_column» или «NameColumn» и т.д. Если правил нет, то как вы товарисщи называете эти сущности?
Все спасибо за конструктивные ответы.

  • Вопрос задан более трёх лет назад
  • 28164 просмотра

Структура баз данных — Основы SQL

Почти все приложения работают с большим количеством информации, которая хранится в виде таблиц в базах данных.

В этом уроке мы более подробно поговорим о структурах и выясним, как устроены таблицы и базы данных.

Что такое таблица

Рассмотрим для примера Хекслет. Мы храним информацию о студентах и о курсах. При этом нужно разнести информацию по двум разным таблицам, чтобы было удобно работать. Другими словами, в разных таблицах мы храним разные сущности.

В базе данных Хекслета сущность «Студенты» будет храниться в одной таблице, сущность «Курсы» — в другой.

Сама таблица представляет собой набор столбцов и строк. Пересечение столбца и строки — это ячейка.

В таблице «Студенты» каждая строка содержит в себе информацию об одном конкретном человеке. Еще строки называют записями.

Каждый столбец определяет, какого типа данные хранятся в ячейке, например:

  • Имя
  • Фамилия
  • Год рождения
  • Дата регистрации

Еще столбцы иногда называют полями.

Таблица с данными студентов Хекслета может выглядеть так:

Таблицы в базах данных

Многие привычные приложения содержат десятки, сотни и тысячи таблиц с разнообразными данными.

Чтобы всем было удобно работать с такими объемами данных, к таблицам предъявляются конкретные требования:

  • Название таблицы. Оно должно быть уникально в рамках одной базы данных. Название таблицы мы задаем при создании, но его можно изменить при необходимости
  • Столбцы или поля. У каждого поля уникальное имя в рамках одной таблицы
  • Тип данных столбца. Он ограничивает набор допустимых значений, которые можно присвоить столбцу. Например, в столбец числового типа нельзя записать текстовые строки. Тип данных присваивается каждому столбцу
  • Строки или записи. Их количество в разных таблицах сильно отличается — от нескольких штук до миллиардов записей. В базах данных нет никаких гарантий относительно порядка строк в таблице

Базы данных, в которых данные хранятся в виде таких таблиц, называются реляционными базами данных. Работать с ними можно с помощью реляционных СУБД.

Структура таблиц

Таким образом, каждая таблица должна иметь определенную структуру.

Эта структура определяет столбцы и включает в себя имена полей и их типы:

first_name string last_name string email string created_at datetime

Рассмотрим этот пример подробнее. В нем прописаны названия полей и типы:

  • Поля first_name , last_name и email содержат обычный текст, поэтому мы задаем тип данных string (строки)
  • В поле created_at мы сохраняем дату добавления пользователя в систему. Для этого поля установлен тип данных datetime , поэтому туда нельзя записать текст

Вот такую таблицу мы можем создать с этими полями:

Yii Framework

В разных модулях и примерах по-разному называются таблицы и поля.

Мне кажется логичным называть таблицы также, как модель, с большой буквы: Product, PriceDescription. А поля также, как свойства модели: userId, userName.

Однако, все миграции, что я производил, создают такое: price_description и т.д., поля везде по-разному называются. Есть ли какой-то ПСР по этом вопросу?

Bio man Сообщения: 609 Зарегистрирован: 2013.07.22, 10:40

Re: Правильный нейминг таблиц и полей MySQL

Сообщение Bio man » 2015.07.20, 15:33

Стандарта не встречал, но вроде-как большинство пользуется такой записью:
Таблицы — post_author
Поля — user_id
Да и Gii так устроен, что имя таблицы post_author преобразует в название модели PostAuthor.
И еще 1 рекомендация, таблицы называть в единственном числе, что бы автоматически сгенерированое имя модели было тоже в единственном числе.

Лично я предпочитаю идти по пути yii для однообразия, да и привычно так.

nepster Сообщения: 838 Зарегистрирован: 2013.01.02, 03:35

Re: Правильный нейминг таблиц и полей MySQL

Сообщение nepster » 2015.07.20, 17:27

не знаю я считаю тупняковым называть таблицу в единственном числе. Поэтому называю примерно так:

Posts — таблица
Post — модель

Вместо id post_id, это вам потом поможет в том, что будет меньше ошибок типа: ambiguous

Поля в базе данных: user_id
Название переменных: $userId

unclead Сообщения: 160 Зарегистрирован: 2015.03.13, 19:44

Re: Правильный нейминг таблиц и полей MySQL

Сообщение unclead » 2015.07.20, 18:57

Стандартов нет, главное выбрать свой и следовать на протяжении всего проекта.
Я встречал как и таблицы во множественном числе, так и в единственном.

вот вырезка из доки по уии1

Большинство приложений хранят данные в БД. Мы предлагаем соглашения для именования таблиц и их полей. Стоит отметить, что Yii не требует строгого следования этим правилам.

Таблицы и поля именуются в нижнем регистре.
Слова в названиях разделяются символом подчёркивания (например, product_order).
В именах таблиц используется либо единственное число, либо множественное, но не оба сразу. Мы рекомендуем использовать единственное число.
Имена таблиц могут содержать префикс. Например, tbl_. Это особенно полезно, когда таблицы нашего приложения находятся в БД, используемой одновременно другими приложениями.

имя таблицы в бд: единственное или множественное число

таблица — это, по сути, описание сущности. так что, называй её так же, как и сущность.

aol ★★★★★
( 01.03.12 12:42:21 MSK )

В RoR множественное число

sdio ★★★★★
( 01.03.12 12:42:36 MSK )
Ответ на: комментарий от aol 01.03.12 12:39:42 MSK

namezys ★★★★
( 01.03.12 12:45:21 MSK ) автор топика
Ответ на: комментарий от namezys 01.03.12 12:45:21 MSK
aol ★★★★★
( 01.03.12 12:46:29 MSK )
Ответ на: комментарий от aol 01.03.12 12:46:29 MSK

это ответ за или против?

namezys ★★★★
( 01.03.12 12:50:05 MSK ) автор топика

moot ★★★★
( 01.03.12 12:51:19 MSK )
Ответ на: комментарий от namezys 01.03.12 12:50:05 MSK

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

aol ★★★★★
( 01.03.12 12:53:00 MSK )
Ответ на: комментарий от aol 01.03.12 12:53:00 MSK

я вот тоже к названию сущности склоняюсь. а мой коллега к названию множества сущностей.

namezys ★★★★
( 01.03.12 12:54:18 MSK ) автор топика

Единственное. Но уже не помню почему. Просто запомнил, что множественное — моветон.

dizza ★★★★★
( 01.03.12 12:54:20 MSK )
Ответ на: комментарий от moot 01.03.12 12:51:19 MSK

namezys ★★★★
( 01.03.12 12:54:23 MSK ) автор топика
Ответ на: комментарий от namezys 01.03.12 12:54:23 MSK

Зачем? Это дело ваш предпочтений/соглашений. Как договоритесь так и будет.

sdio ★★★★★
( 01.03.12 12:57:42 MSK )
Ответ на: комментарий от sdio 01.03.12 12:57:42 MSK

Так вот договорится мы и не можем

namezys ★★★★
( 01.03.12 12:58:06 MSK ) автор топика
Ответ на: комментарий от aol 01.03.12 12:39:42 MSK

select count(age) as age_count from persons group by age having age > 18;

достаточно для ответа? 🙂

Slavaz ★★★★★
( 01.03.12 12:58:29 MSK )
Ответ на: комментарий от namezys 01.03.12 12:58:06 MSK

Тогда подеритесь, кто победит тот и решит проблему.

sdio ★★★★★
( 01.03.12 12:59:01 MSK )
Ответ на: комментарий от namezys 01.03.12 12:54:23 MSK

Всё очень просто: если в таблице будет храниться всегда только одна запись, то единственное число. Если хранится множество записей, то множественное 🙂

Slavaz ★★★★★
( 01.03.12 13:00:04 MSK )

но в 99% в самописном ынтырпрайзе ты можешь встретишь исконно русские названия таблиц «faily» и прочие «polzovateli»

exception13 ★★★★★
( 01.03.12 13:07:04 MSK )

Сделал множественное только потому, что:

set areas [list [$r SMEMBERS $topicid:areas]] foreach area $areas <> 

Выглядит нелепо. Т.е. как сто странно, что множество с именем во множественном числе будет помещаться в список с именем в единственном числе. Или как тогда назвать переменную единственного числа в цикле? Вобщем возникает нелепость имен.

Хотя конечно это не совсем таблица, но близко и тоже голову ломал и сначало единственным числом назвал.

Suntechnic ★★★★★
( 01.03.12 13:08:07 MSK )
Ответ на: комментарий от exception13 01.03.12 13:07:04 MSK

Давно пришел к выводу что в большинстве случаев транслитерация это очень и очень плохо.

Suntechnic ★★★★★
( 01.03.12 13:08:51 MSK )
Ответ на: комментарий от Slavaz 01.03.12 12:58:29 MSK

exception13 ★★★★★
( 01.03.12 13:11:17 MSK )
Ответ на: комментарий от Suntechnic 01.03.12 13:08:51 MSK

Давно пришел к выводу что в большинстве случаев транслитерация это очень и очень плохо.

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

exception13 ★★★★★
( 01.03.12 13:12:22 MSK )
Ответ на: комментарий от namezys 01.03.12 12:54:18 MSK

да, видимо, придется драться, как тут предлагают 😀
ибо тут тоже единого мнения нет.

aol ★★★★★
( 01.03.12 13:16:32 MSK )
Ответ на: комментарий от exception13 01.03.12 13:11:17 MSK

selo_i_lyudi лучше, чтоб враги не догадались 🙂

Slavaz ★★★★★
( 01.03.12 13:32:39 MSK )
Ответ на: комментарий от exception13 01.03.12 13:12:22 MSK

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

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

Suntechnic ★★★★★
( 01.03.12 13:50:52 MSK )

У нас внутри компании единственное число используется.

Посмотрел сейчас как сделано в mysql в дэфолтных таблицах information_schema и mysql. В первой множественное число, а во второй единственное. Кажется они тоже не договорились ))

impr ★
( 01.03.12 13:56:27 MSK )

я за единственное. потому что смотрю на них как на инстанци класса. а если речь о many-to-many, то — нет.

AGUtilities ★★★
( 01.03.12 14:00:57 MSK )
Ответ на: комментарий от aol 01.03.12 12:39:42 MSK

select name, surname, age from person where age > 18;

А теперь по-русски прочитай. И подумай, что тут не так.

melkor217 ★★★★★
( 01.03.12 14:46:30 MSK )
Ответ на: комментарий от melkor217 01.03.12 14:46:30 MSK

на кой мне читать это по-русски? я ж не в одинэсе программирую?!
а ты почитай книгу про ддд, и подумай, что тут так. (с)

aol ★★★★★
( 01.03.12 15:04:55 MSK )

Если ты хранишь в одной записи один файл тогда лучше file, если несколько то files

anonymous
( 01.03.12 15:22:43 MSK )
Ответ на: комментарий от anonymous 01.03.12 15:22:43 MSK

Если ты хранишь в одной записи один файл тогда лучше files, если несколько то fileses

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *