Соглашения об именах MySQL, должно ли имя поля включать имя таблицы? - PullRequest
16 голосов
/ 23 августа 2009

Друг сказал мне, что я должен включить имя таблицы в имя поля той же таблицы, и мне интересно, почему? И должно ли быть так? Пример:

(Table) Users  
(Fields) user_id, username, password, last_login_time

Я вижу, что префикс 'user_' не имеет смысла, так как я знаю, что он уже для пользователя. Но я тоже хотел бы услышать от вас. примечание: я программирую на php, mysql.

Ответы [ 9 ]

13 голосов
/ 23 августа 2009

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

Users: id or user_id, username, password, last_login_time
Post: id or post_id, user_id, post_date, content

Я обычно использую 'id' в качестве имени поля первичного ключа, но в этом случае я думаю, что user_id и post_id также вполне приемлемы. Обратите внимание, что дата публикации называлась «post_date», потому что «date» является ключевым словом.

По крайней мере, это мое соглашение. Ваш пробег может отличаться.

10 голосов
/ 23 августа 2009

Не вижу смысла включать имя таблицы, это лишнее. В запросах вы можете в любом случае ссылаться на поля как <имя таблицы>. <Имя поля> (например, «user.id»).

4 голосов
/ 23 августа 2009

С такими общими полями, как 'id' и 'name', хорошо бы ввести имя таблицы.

Причина в том, что это может сбивать с толку при записи объединений в нескольких таблицах.

Это на самом деле личное предпочтение, но это и есть причина (и я всегда так делаю).

Какой бы метод вы ни выбрали, убедитесь, что он соответствует проекту.

3 голосов
/ 23 августа 2009

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

Это я взял из схемы именования CakePHP, и я думаю, что она довольно аккуратная.

2 голосов
/ 23 августа 2009

Префикс имени столбца именем таблицы - это способ гарантировать уникальные имена столбцов, что упрощает объединение.

Но это утомительная практика, особенно если у нас длинные имена таблиц. Обычно проще использовать псевдонимы, когда это уместно. Кроме того, это не помогает, когда мы присоединяемся.

Как модельер данных, мне трудно постоянно быть последовательным. Со столбцами идентификаторов я теоретически предпочитаю иметь только ID, но я обычно нахожу, что у меня есть таблицы со столбцами с именами USER_ID, ORDER_ID и т. Д.

Существуют сценарии, в которых может быть полезно использовать общее имя столбца в нескольких таблицах. Например, когда логическое отношение супертипа / подтипа отображается как дочерние таблицы, полезно сохранить столбец супертипа во всех таблицах подтипа (например, ITEM_STATUS) вместо того, чтобы переименовывать его для каждый подтип (ORDER_ITEM_STATUS, INVOICE_ITEM_STATUS и т. д.). Это особенно верно, когда они являются перечислениями с общим набором значений.

1 голос
/ 20 июля 2011

На самом деле, есть причина для такого наименования, особенно когда речь идет о полях, к которым вы, вероятно, присоединитесь. В MySQL, по крайней мере, вы можете использовать ключевое слово USING вместо ON, тогда users u JOIN posts p ON p.user_id = u.id становится users u JOIN posts p USING(user_id), что является более чистым IMO.

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

1 голос
/ 24 августа 2009

Например, в вашей базе данных есть таблицы, в которых хранится информация об отделах продаж и отдела кадров, вы можете назвать все свои таблицы, связанные с отделом продаж, как показано ниже:

SL_NewLeads SL_Territories SL_TerritoriesManagers

Вы можете назвать все свои таблицы, связанные с отделом кадров, как показано ниже:

HR_Candidates HR_PremierInstitutes HR_InterviewSchedules

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

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

0 голосов
/ 14 июня 2016

Мы должны определить первичные ключи с префиксом tablename.

Мы должны использовать use_id вместо id и post_id вместо просто id.

Преимущества : -

1) Легко читаемый

2) Простота дифференцирования в запросах на соединение. Мы можем минимизировать использование псевдонима в запросе.

таблица пользователей: user_id (PK)

таблица сообщений: post_id (PK) user_id (FK) здесь пользовательская таблица PK и таблица сообщений FK одинаковы

Согласно документации ,

3) Таким образом, мы можем получить преимущество из ЕСТЕСТВЕННОЕ СОЕДИНЕНИЕ и СОЕДИНЕНИЕ с ИСПОЛЬЗОВАНИЕМ

Естественные объединения и объединения с помощью USING, включая варианты внешнего соединения, обрабатывается в соответствии со стандартом SQL: 2003. Цель состояла в том, чтобы выровнять синтаксис и семантика MySQL по отношению к NATURAL JOIN и ПРИСОЕДИНЯЙТЕСЬ ... ИСПОЛЬЗУЯ согласно SQL: 2003. Тем не менее, эти изменения в соединении обработка может привести к различным выходным столбцам для некоторых объединений. Кроме того, некоторые запросы, которые, казалось, работали правильно в более старых версиях (до 5.0.12) должен быть переписан для соответствия стандарту.

Эти изменения имеют пять основных аспектов:

1) Способ, которым MySQL определяет столбцы результатов операций соединения NATURAL или USING (и, следовательно, результат всего предложения FROM).

2) Расширение SELECT * и SELECT tbl_name. * В список выбранных столбцов.

3) Разрешение имен столбцов в соединениях NATURAL или USING.

4) Преобразование соединений NATURAL или USING в JOIN ... ON.

5) Разрешение имен столбцов в состоянии ON для JOIN ... ON.

Примеры: -

SELECT * FROM user NATURAL LEFT JOIN post;
SELECT * FROM user NATURAL JOIN post;
SELECT * FROM user JOIN post USING (user_id);
0 голосов
/ 07 декабря 2010

Похоже, вывод: Если имя поля уникально для разных таблиц - используйте префикс с именем таблицы. Если имя поля может дублироваться в других таблицах, назовите его уникальным.

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

...