Как избежать конфликтов имен столбцов?

Мне недавно дали задание создать аукционную систему. Во время работы я встречал множество случаев, когда мои SQL-запросы, содержащие соединения, не выполнялись из-за неоднозначных имен столбцов. Рассмотрим эту (упрощенную) структуру таблицы для аукциона:

таблица аукцион :

  • id
  • name
  • uid (ID пользователя, создавшего аукцион)

таблица пункт :

  • id
  • имя
  • uid (ID пользователя, добавившего товар)
  • help (ID аукциона, на котором товар доступен)
  • цена (начальная цена)

таблица пользователь :

  • id
  • имя

таблица ставка :

  • id
  • uid (идентификатор пользователь, сделавший ставку)
  • iid (товар, цена которого была повышена)
  • цена (предложенная цена)

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

Я могу придумать два способа сделать это. Сначала нужно переименовать столбцы, добавив к ним префикса сокращенного имени таблицы, так что идентификатор аукциона станет a_id , идентификатор товара станет i_id , а идентификатор позиции в таблице bid станет b_i_id . Это довольно надежно, но снижает удобочитаемость имен столбцов.

Другой способ, который я могу придумать, - это написание явных запросов:

SELECT `bid`.`id`, `user`.`name`, `bid`.`price`
FROM `bid`
JOIN `item` ON `item`.`id` = `bid`.`iid`
JOIN `user` ON `user`.`id` = `bid`.`uid`
JOIN `auction` ON `auction`.`id` = `item`.`aid`
WHERE `bid`.`price` > `item`.`price`
AND `auction`.`id` = 1
GROUP BY `user`.`id`
ORDER BY `bid`.`price` DESC;

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

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

5
задан Mulki 23 February 2011 в 11:58
поделиться