Это хорошие практики MySQL - PullRequest
1 голос
/ 27 июля 2011

Когда я делаю SQL-запрос, например, в базе данных, где есть таблица с именем «сотрудники», какой метод записи лучше?

SELECT 'name', 'surname', 'phone' WHERE 'city'='ny' FROM 'employees' ORDER BY 'name'

SELECT name, surname, phone, WHERE city=ny FROM employees ORDER BY name

или

SELECT employees.name, employees.surname WHERE employees.city=ny ORDER BY employee.name

И почему?Есть ли для этого стандарт?

Ответы [ 6 ]

2 голосов
/ 27 июля 2011
SELECT `name`, `surname`, `phone` WHERE `city`='ny' ORDER BY `name`.

Обратите внимание, что между `и 'есть разница (первое используется для имени полей, а другое - для строк).Хотя `символ является строго необходимым , например, когда имя содержит специальные символы или если имя является ключевым словом SQL.

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

Хотя это в основном вопрос личного стиля, некоторые формы имеют свои преимущества.Мои предпочтения:

SELECT e.`name`, e.`surname`, e.`phone` 
FROM `employees` e
WHERE e.`city`= 'ny' 
 OR e.`city` = 'wa'
ORDER BY e.`name`
  1. Ключевые слова в верхнем регистре, имена таблиц в нижнем регистре (если вы создаете таблицы в нижнем регистре или задали их без учета регистра)
  2. Каждое ключевое слово по своемустрока
  3. Каждая таблица получает псевдоним (но без явного AS: сотрудники AS e)
  4. Всегда указывайте имя таблицы перед именем столбца.Таким образом, вы можете без проблем добавлять другие таблицы, которые могут иметь столбцы с тем же именем.

Другой пример:

SELECT e.`name`, e.`surname`, e.`phone`, u.rank
FROM `employees` e
[INNER] JOIN `unionreps` u
ON e.ID = u.ID
  1. СОЕДИНЕНИЯ написаны в стиле ANSI-92, а не ANSI-89 (от e, u, где e.id = u.id)
1 голос
/ 27 июля 2011

Цель состоит в том, чтобы сделать ваш SQL как можно более читабельным как для себя, так и для тех, кто может столкнуться с ним позднее.

ниже его ясно

  • что мое значение для города это строка
  • Что я выбираю, фильтрую, какие таблицы я использую и что сортирую по

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

SELECT 
   name, 
   surname, 
   phone
FROM 
   employees 
WHERE
   city='ny'
ORDER BY 
   name
0 голосов
/ 27 июля 2011

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

ВЫБРАТЬ «имя», «фамилия», «телефон» ГДЕ «город» = «ny 'ОТ' сотрудников 'ЗАКАЗАТЬ' name '

Что просто сожрал;mysql использует обратные пометки для инкапсуляции ссылок на сущности, а не одинарные кавычки.OTOH Oracle использует двойные кавычки.Когда вы используете разделители, ссылки становятся чувствительными к регистру.

Стандарт программирования, который я использую, заключается в том, чтобы всегда добавлять префиксы к именам столбцов с именами таблиц или псевдонимов (чаще последних, чтобы уменьшить объем ввода), чтобы сделать их более понятными, чтокод предназначен для выполнения.Я также добавляю к именам таблиц префикс к имени базы данных - переключение между базами данных с использованием механизма состояний (USE some_db;) просто беспорядочно:

SELECT e.name
, e.surname
, e.phone
FROM avopa.employees
WHERE e.city='ny'
ORDER BY e.name;

Обратите внимание, что ключевые слова SQL в верхнем случае, ссылки на сущности в нижнем случае, одно выражение на строку

0 голосов
/ 27 июля 2011

ИМХО, лучший стандарт таков:

select
    o.name as office_name,
    e.name as employee_name,
    count(*) as count
from employee e
left join office o on o.id = e.office_id
where e.name like 'a%'
group by 1
order by 1

Ваша цель - повышение четкости и обслуживания.Возможности / преимущества, продемонстрированные здесь:

  • Ничего в верхнем регистре (т. Е. Выберите не ВЫБРАТЬ)
  • Используйте только обратные символы для зарезервированных слов
  • Имена таблиц в единственном числе (т. е. employee не employees)
  • Просмотр имен во множественном числе (например, current_employees)
  • Подчеркивает разделяющие части имени (т.е. без camelCase или flatcase и т. д.)
  • Первичные ключивсегда с именем id
  • Внешние ключи всегда с именем table_id
  • Там, где имена столбцов сталкиваются в запросе, их псевдонимы <table>_<column>
  • Запросы форматируются, как указано выше
    • Выравнивание по левому краю, за исключением столбцов, которые находятся в отдельной строке
    • Разрывы строк по основным ключевым словам
  • Псевдонимы таблиц, как правило, с использованием всех первых букв частей имени,например, my_table_name mtn
  • Group by и order by предпочитая числа над выражениями (если вы изменяете выражение, вам не нужно группировать или сортировать по предложениям, в противном случае вы нарушаете принцип DRY)

Это происходит из-за многолетнего кодирования SQL, и я обнаружил, что это облегчает задачу.

Если у вас всегда есть согласованный формат, вам также будет проще найти ошибки синтаксиса.

0 голосов
/ 27 июля 2011

Для меня:

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

Например:

SELECT deptno, dname FROM dept WHERE loc = 'NEW YORK'

или

SELECT d.deptno, d.dname, e.ename, e.job FROM dept d
JOIN emp e ON d.deptno = e.deptno
WHERE d.loc = 'NEW YORK'

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

...