it-swarm.com.ru

Существует ли соглашение об именах для MySQL?

Вот как я это делаю:

  1. Имена таблиц в нижнем регистре, используют подчеркивания для разделения слов и в единственном числе (например, 'foo', 'foo_bar' и т.д.
  2. У меня вообще (не всегда) есть автоинкремент PK. Я использую следующее соглашение: tablename_id (например, 'foo_id', 'foo_bar_id' и т.д.).
  3. Когда таблица содержит столбец, который является внешним ключом, я просто копирую имя столбца этого ключа из любой таблицы, из которой он получен. Например, скажем, таблица "foo_bar" имеет FK "foo_id" (где "foo_id" - это PK "foo").
  4. При определении FK для обеспечения ссылочной целостности я использую следующее: tablename_fk_columnname (например, в соответствии с примером 3 это будет 'foo_bar_foo_id'). Поскольку это комбинация имени таблицы/имени столбца, она гарантированно будет уникальной в базе данных.
  5. Я упорядочиваю столбцы так: PK, FK, а затем остальные столбцы в алфавитном порядке.

Есть ли лучший, более стандартный способ сделать это?

131
StackOverflowNewbie

Я бы сказал, что в первую очередь: будьте последовательны.

Я считаю, что вы почти пришли к соглашению, которое вы изложили в своем вопросе. Пара комментариев, хотя:

Точки 1 и 2 хороши, я считаю.

Пункт 3 - к сожалению, это не всегда возможно. Подумайте, как бы вы справились с одной таблицей foo_bar, в которой есть столбцы foo_id и another_foo_id, которые оба ссылаются на столбец foo таблицы foo_id. Вы можете подумать, как справиться с этим. Это немного угловой случай, хотя!

Пункт 4 - аналогичен пункту 3. Возможно, вы захотите ввести число в конце имени внешнего ключа, чтобы обеспечить наличие более одного ссылочного столбца.

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

Некоторые другие моменты:

Соглашения об именовании индексов

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

Сингулярные и множественные имена столбцов

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

Главное здесь, конечно, последовательность!

90
Tom Mac

Согласованность является ключом к любому стандарту именования. Пока это логично и последовательно, вы там на 99%.

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

Чтобы ответить на ваш вопрос прямо - нет, MySQL не имеет предпочтительного соглашения/стандарта именования, так что вы можете использовать свой собственный вариант (и ваш кажется логичным).

17
mwan

MySQL имеет краткое описание их более или менее строгих правил:

https://dev.mysql.com/doc/internals/en/coding-style.html

Наиболее распространенный стиль кодирования для MySQL от Simon Holywell:

http://www.sqlstyle.guide/

См. Также этот вопрос: Существуют ли опубликованные рекомендации по стилю кодирования для SQL?

7
Daniel W.

К счастью, PHP разработчики не являются "фанатами верблюдов", как некоторые сообщества разработчиков, которых я знаю.

Ваши соглашения звучат хорошо.

Пока они а) просты и б) последовательны - я не вижу проблем :)

PS: Лично я думаю 5) это перебор ...

4
paulsm4