Запросы длиной более 50 символов (примерно) рекомендуется разбивать на несколько строк, подгоняя текст по горизонтали. Например так:
SELECT fields FROM tables t WHERE conditions AND more conditions GROUP BY fields ORDER BY fields LIMIT limits |
или так:
SELECT fields FROM tables t WHERE conditions AND more conditions GROUP BY fields ORDER BY fields LIMIT limits |
Для оформления строки с SQL-кодом используются кавычки q// или qq//. Как и в случае обычных одинарных и двойных кавычек, если интерполяция внутри строки не нужна (т. е. в случае SQL почти всегда), то лучше использовать q//.
Примеры:
$dbh->do(q/ SQL /); $dbh->do(q/ SQL /, undef, $value, ); $dbh->do(q/ SQL /, undef, $value, ); $dbh->do(q/ SQL /, undef, $value, ... $value10, ); |
Все ключевые слова SQL записываются заглавными буквами, все наименование таблиц, полей, пользовательских функций — строчными.
При именовании таблиц и полей не допускается использование заглавных букв. Допускаются только строчные латинские буквы, цифры и знак подчёркивания. Пример: "name_of_the_table".
Хорошее правило для того, как придумывать названия таблиц БД (но то же правило относится к названию массивов / списков)...
Таблица состоит из записей, запись в таблице почти всегда (если только это не таблица для связи многие-ко многим) отражает какой-то объект реального (или виртуального) мира. Назовите этот объект по-английски: точно, чётко и исчерпывающе, дабы не допускать разночтений и затем переведите во множественное число.
Удачные примеры: «users», «domains«, «domain_shop_categories», «user_doc_attachments».
Неудачные примеры: «statistics» — понятно, что имеет отношение к статистике, но неясно что это за статистика и объекты какого вида хранятся в таблице;
«queue» — понятно, что это какая-то очередь, но что именно за очередь неясно и объекты какого вида хранятся в таблице.
В каждой таблице (за исключением таблиц, где необходимы составные ключи, например таблиц для обеспечения связей многие-ко-многим) обязательно должно быть поле с именем "id" (или "<tablename>_id") и типом INT, для которого должен быть создан первичный ключ:
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY |
Поле для первичного ключа может быть названо по другому и иметь другой тип, но это обязательно обсуждается с другими членами команды и выносится соответствующее обоснование.
Все поля, использующиеся для связи с другими таблицами по их первичному ключу, именуются как "<tablename>_id", где "<tablename>" — имя таблицы в единственном числе. Примеры наименований: domain_id, user_id.
В командах INSERT / REPLACE всегда перечисляйте имена полей таблицы:
REPLACE INTO wf_parking (hostname, uri_path, html, fwdto) VALUES (?, ?, ?, ?) -- ПРАВИЛЬНО |
Никогда не делайте так:
REPLACE INTO wf_parking VALUES (?, ?, ?, ?) -- НЕПРАВИЛЬНО! Не перечислен список полей |
Если имена полей явно не перечислять, то при любом изменении состава полей таблицы, например, при добавлении нового поля — неминуемо получим ошибку («column count doesn't match value count» и т. п.).