Знаете ли вы хороший источник, чтобы научиться разрабатывать решения SQL?
Помимо базового синтаксиса языка, я ищу кое-что, что поможет мне понять:


Я начал с этой книги: Ясно объясненный дизайн реляционной базы данных (серия Morgan Kaufmann в системах управления данными) (мягкая обложка) Яна Л. Харрингтона и нашел ее очень ясной и полезной.
и, когда вы набираете скорость, эта тоже была хороша Системы баз данных: практический подход к проектированию, внедрению и управлению (Международная серия компьютерных наук) (Мягкая обложка)
Я думаю, что SQL и проектирование баз данных - это разные (но взаимодополняющие) навыки.
Начало проектирования баз данных: от новичка к профессионалу - Клэр Черчер?
Это вопросы, которые, на мой взгляд, требуют разных знаний из разных областей.
Тем не менее, возможно, вы захотите прочитать несколько книг, лично я использовал эта книга в своем университетском курсе базы данных (и нашел достойный, но я не читал других книг в этой области, поэтому мой совет - проверить некоторые хорошие книги по проектированию баз данных).
Прошло много времени с тех пор, как я его прочитал (поэтому я не уверен, какая часть из них все еще актуальна), но я помню, что книга Джо Селко SQL для Smarties предоставляет много информации о написании элегантных, эффективных и действенных запросов. .
четвертое издание 2010 года может быть актуальным
Книга Celko - это исследование ошибок и продвижение идеи реализации в коде того, что должно быть реализовано в базе данных.
Опыт имеет большое значение, но с точки зрения дизайна таблиц вы можете многому научиться из того, как работают ORM, такие как Hibernate и Grails, чтобы понять, почему они делают что-то. Кроме того:
Храните разные типы данных отдельно - не храните адреса в таблице заказов, например, ссылку на адрес в отдельной таблице адресов.
Мне лично нравится иметь целочисленный или длинный суррогатный ключ в каждой таблице (которая содержит данные, а не те, которые связывают разные таблицы вместе, например, отношения m: n), которые являются первичным ключом.
Мне также нравится иметь созданный и измененный столбец временных меток.
Убедитесь, что каждый столбец, который вы делаете "where column = val" в любом запросе, имеет индекс. Возможно, не самый совершенный в мире индекс для типа данных, но, по крайней мере, индекс.
Настройте свои внешние ключи. Также настройте правила ON DELETE и ON MODIFY, где это необходимо, для каскадирования или установки нуля, в зависимости от структуры вашего объекта (так что вам нужно удалить только один раз в `` голове '' вашего дерева объектов, и все подобъекты этого объекта получат удаляется автоматически).
Если вы хотите сделать свой код модульным, вы можете захотеть сделать модульную схему своей БД - например, это область «клиенты», это область «заказы», а это область «продукты», и использовать таблицы соединения / связывания. между ними, даже если они связаны 1: n, и, возможно, дублируют важную информацию (например, дублируют название продукта, код, цену в вашей таблице order_details). Прочтите о нормализации.
Кто-то другой порекомендует прямо противоположное для некоторых или всего вышеперечисленного: p - никогда не бывает одного верного способа делать некоторые вещи, а!
ORM, все твои баллы - анти-база данных.
Добавление индексов не всегда означает большую скорость. Иногда они действительно замедляют выполнение запросов. Это действительно зависит от запроса, и вы должны проверить их с помощью explain analyze, если индекс является преимуществом.
Head First SQL - отличное введение.
Я начал с этой статьи
http://en.tekstenuitleg.net/articles/software/database-design-tutorial/intro.html
Это довольно кратко по сравнению с чтением всей книги, и в нем очень хорошо объясняются основы проектирования баз данных (нормализация, типы отношений).
Мне нравится это руководство, спасибо.
Ссылка в этом ответе больше не работает.
Похоже, ссылка снова работает.
Ссылка больше не работает
Мне очень понравилась эта статья .. http://www.codeproject.com/Articles/359654/important-database-designing-rules-which-I-fo