Руководство для начинающих по проектированию базы данных SQL [закрыто]

127

Вы знаете хороший источник, чтобы научиться разрабатывать решения SQL?

Помимо базового синтаксиса языка, я ищу кое-что, что поможет мне понять:

  1. Какие таблицы строить и как их связать
  2. Как разрабатывать дизайн для разных масштабов (от небольшого клиентского приложения до огромного распределенного веб-сайта)
  3. Как писать эффективные / действенные / элегантные SQL-запросы
ripper234
источник

Ответы:

60

Я начал с этой книги Яна Л. Харрингтона : « Четкое объяснение дизайна реляционной базы данных (Серия Моргана Кауфмана в системах управления данными)» (в мягкой обложке) , и нашел ее очень ясной и полезной.

и по мере того, как вы набираете скорость, эта тоже была хороша Системы баз данных: практический подход к проектированию, внедрению и управлению (Международная серия компьютерных наук) (Мягкая обложка)

Я думаю, что SQL и проектирование баз данных - это разные (но взаимодополняющие) навыки.

оборота DD59
источник
1
Начало проектирования баз данных: от новичка до профессионала - Клэр Черчер?
enthusiasticgeek
40

Я начал с этой статьи

http://en.tekstenuitleg.net/articles/software/database-design-tutorial/intro.html

Это довольно кратко по сравнению с чтением всей книги, и в нем очень хорошо объясняются основы проектирования баз данных (нормализация, типы отношений).

Юлиус
источник
Мне нравится это руководство, спасибо.
MsO
Ссылка в этом ответе больше не работает.
Grizzly Peak Software
1
Похоже, ссылка снова работает.
user8576017
1
Ссылка больше не работает
jat255
28

Опыт имеет большое значение, но с точки зрения дизайна таблиц вы можете многое узнать из того, как работают ORM, такие как Hibernate и Grails, чтобы понять, почему они делают что-то. К тому же:

  1. Храните разные типы данных отдельно - не храните адреса в таблице заказов, например, ссылку на адрес в отдельной таблице адресов.

  2. Мне лично нравится иметь целочисленный или длинный суррогатный ключ в каждой таблице (которая содержит данные, а не те, которые связывают разные таблицы вместе, например, отношения m: n), которые являются первичным ключом.

  3. Мне также нравится иметь созданный и измененный столбец временных меток.

  4. Убедитесь, что каждый столбец, который вы делаете "where column = val" в любом запросе, имеет индекс. Возможно, не самый совершенный в мире индекс для типа данных, но, по крайней мере, индекс.

  5. Настройте свои внешние ключи. Также настройте правила ON DELETE и ON MODIFY, где это уместно, для каскадирования или установки нуля, в зависимости от структуры вашего объекта (так что вам нужно удалить только один раз в `` голове '' вашего дерева объектов, и все подобъекты этого объекта получат удаляется автоматически).

  6. Если вы хотите разделить свой код на модули, вы можете захотеть сделать модульную схему своей БД - например, это область «клиенты», это область «заказы», ​​а это область «продукты», и использовать таблицы соединения / связывания. между ними, даже если они отношения 1: n, и, возможно, дублируют важную информацию (например, дублируют название продукта, код, цену в вашей таблице order_details). Прочтите о нормализации.

  7. Кто-то другой порекомендует прямо противоположное для некоторых или всего вышеперечисленного: p - никогда не бывает единственно верного способа делать некоторые вещи, а!

JeeBee
источник
1
ORM, все ваши очки антибазовые .
PerformanceDBA
1
Добавление индексов не всегда означает большую скорость. Иногда они действительно замедляют выполнение запросов. Это действительно зависит от запроса, и вы должны проверить их, explain analyzeявляется ли индекс преимуществом.
ArashM
2

Это вопросы, которые, на мой взгляд, требуют разных знаний из разных областей.

  1. Вы просто не можете заранее знать, «какие» таблицы строить, вы должны знать проблему, которую необходимо решить, и соответствующим образом спроектировать схему;
  2. Это сочетание решения по дизайну базы данных и пользовательских возможностей поставщика базы данных (т. Е. Вы должны проверить документацию по своим (r) dbms и, в конечном итоге, изучить некоторые «советы и рекомендации» по масштабированию), а также конфигурация ваших dbms имеет решающее значение для масштабирование (репликация, разбиение данных и так далее);
  3. Опять же, почти каждый rdbms поставляется с определенным «диалектом» языка SQL, поэтому, если вам нужны эффективные запросы, вы должны изучить этот конкретный диалект --btw. Вероятно, написать элегантный запрос, который к тому же эффективен, имеет большое значение: элегантность и эффективность часто противоречат друг другу.

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

cheng81
источник
2

Прошло много времени с тех пор, как я его прочитал (поэтому я не уверен, какая часть из них все еще актуальна), но я помню, что книга Джо Селко SQL для Smarties предоставляет много информации о написании элегантных, эффективных и действенных запросов. ,

user29208
источник
четвертое издание 2010 года может быть актуальным
rleir
1
Книга Celko - это исследование ошибок и продвижение идеи реализации в коде того, что должно быть реализовано в базе данных.
PerformanceDBA