Реляционные базы данных - должно быть более правильно?

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

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

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

Все, что я могу сейчас сделать, это, вероятно, моя база данных фильмов в конце моего личного сайта, которая, вероятно, рухнет, если бы я был Amazon и должен был хранить миллионы фильмов. Итак, существует ли вопрос масштабируемости? Я уверен, что в дизайне базы данных есть довольно "стандартный" массив предметов/концепций, которые вы просто должны понимать и иметь возможность применять в реальной жизни, если вы собираетесь работать с базами данных на профессиональном уровне.

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

Спасибо заранее!

Ответы

Ответ 1

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

  • Дизайн языка запросов
  • Оптимизация запросов
  • Переписывание запросов
  • Типы данных
  • Организация хранения
  • Управление транзакциями
  • Протоколы связи
  • Шифрование
  • Аутентификация и идентификация
  • Схема схемы
  • Репликация
  • Резервное копирование и восстановление
  • Двухфазные фиксации
  • Оптимистичный concurrency контроль
  • Блокировка и пессимистическое управление concurrency
  • Разрешение
  • Контроль доступа на основе этикеток
  • Теория множеств
  • Теория отношений
  • Распределенный запрос
  • Логическая логика
  • Пользовательские типы и функции
  • Управление каталогом
  • Управление буфером
  • Сортировка
  • Интернационализация (I18N), Локализация (L10N), Глобализация (G11N)
  • Кванторы
  • Аудиторская
  • Триггеры
  • Сохраненные процедуры

Я не претендую на полноту или минимальность.

Ответ 2

Стандартный текст в поле "Введение в системы баз данных", C. J. Date.

У меня есть опыт работы на 20 лет; Я прочитал его, подумал, что это отлично, и я написал реляционную базу данных из-за этого (правильный, а не этот SQL-малярий!).

Ответ 3

Целая другая область - это моделирование размеров и хранилище данных.

Я много лет работал с реляционным моделированием, а затем прочитал The Data Warehouse Toolkit и получил совершенно новое представление о том, как это сделать могут быть использованы.

Ответ 4

Получите больше грязи с CJ Date База данных по глубине: теория отношений для практиков, если его "Введение в системы баз данных" недостаточно для вас.

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

Ответ 5

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

http://database-programmer.blogspot.com/2008/09/comprehensive-table-of-contents.html

Это сайт Кеннета Даунса, он исходит из самых основополагающих принципов, если SQL и делится на более сложные предметы. В конце концов, человек написал структуру вокруг БД.

Другой - высокая масштабируемость...

http://highscalability.com/

Они попадают во все сферы БД.

Надеюсь, что это поможет.

Ответ 6

Я думаю, что set + реляционная алгебра - это то, о чем мало знают пользователи базы данных, но было бы полезно учиться. Когда вы цените логику, связанную с отображением одного отношения к другому, вы начинаете более четко понимать, почему такие вещи, как нормализация, хороши, почему NULL лучше избегать, если это возможно, и т.д. Вы также начинаете видеть недостатки в SQL по сравнению с более чистыми реляционными языками запросов, где функции налагают ограничения на парадигму из-за причин производительности и т.д.

Ответ 7

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

Ответ 8

Я считаю, что оптимизация существующих баз данных может быть интересна двенадцати. То есть почему вы должны денормализовать таблицы.

Некоторая базовая алгебра отношений - полезное знание и тесно связана с теорией множеств.

Ответ 9

Очень распространенный сценарий состоит в том, чтобы сопоставлять уродливые базы данных с моделью сущности, которая необязательно отражается непосредственно в структуре БД. Разработка того, какой способ лучше всего моделировать данные в вашем домене, может быть сложным.

Полнотекстовый поиск и XML - это темы, которые, кажется, все больше появляются.

У меня нет опыта в этом, но я знаю, что DB2 (у которой есть пробная версия) имеет некоторые сумасшедшие новые функции)

Удачи: -)

Ответ 10

http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html

http://blogs.msdn.com/pathelland/archive/2007/07/23/normalization-is-for-sissies.aspx

http://www.25hoursaday.com/weblog/2007/08/03/WhenNotToNormalizeYourSQLDatabase.aspx

http://itc.conversationsnetwork.org/shows/detail571.html

http://www.scribd.com/doc/2592098/DVPmysqlucFederation-at-Flickr-Doing-Billions-of-Queries-Per-Day

http://highscalability.com/flickr-architecture

http://highscalability.com/ebay-architecture

http://www.addsimplicity.com/downloads/eBaySDForum2006-11-29.pdf

http://blog.maxindelicato.com/2008/12/scalability-strategies-primer-database-sharding.html

http://blog.maxindelicato.com/2008/12/the-ihsdf-theorem-a-proposed-theorem-for-the-tradeoffs-in-horizontally-scalable-systems.html

http://www.iamcal.com/talks/

http://natishalom.typepad.com/nati_shaloms_blog/2009/04/writing-your-own-scalable-twitter.html

http://www.mysqlperformanceblog.com/

http://www.cecs.uci.edu/~papers/ipdps07/pdfs/SMTPS-201-paper-1.pdf

http://video.google.com/videoplay?docid=7278544055668715642

http://www.niallkennedy.com/blog/uploads/flickr_php.pdf

Ответ 11

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

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

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

Ответ 12

Отказ от ответственности: не специалист по дизайну базы данных.

Некоторые проблемы производительности могут быть обработаны либо с помощью:

  • денормализация вашей базы данных, поэтому для уменьшения количества таблиц для присоединения
  • добавление индексов Фильтрация
  • должна быть выполнена так, чтобы вы сначала удалили самую большую из несовпадающих данных, затем вы вишневы выбираете следующее условие для уменьшенного набора. Лучше перейти от 100 значений → 10, соответствующих первому условию → 1, соответствующего первому и второму условию, чем 100 значений → 80, соответствующее второму условию → 1, соответствующему первому и второму условию. Кажется тривиальным, но важно иметь в виду.
  • divide et impera - девиз для масштабируемости. Если у вас есть что-то, что масштабируется нелинейным способом, скажем O (N ^ 2), имеет смысл держать N как можно ниже, и вы должны разбить свой набор данных на более мелкие наборы, если они независимы, и вы можете выработать разбиение. Примером этого является очертание, обычно используемое для хранения баз данных пользователей на крупных социальных сайтах. (NB: пример, я бы не реализовал его таким образом) Вместо того, чтобы иметь огромную базу данных со всеми пользователями, у них есть 26 серверов (по одной для каждой буквы алфавита), затем они помещают все псевдонимы с одинаковой первой буквой на том же сервере. Это имеет следующие преимущества:

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

Ответ 13

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

Стандартные методы (по меньшей мере, для иерархии) упоминались в этих сообщениях SO:

edit: там также пространственная база данных приложения для использования ГИС, где у вас есть структуры данных и/или индексы на основе местоположений точек, используя R-деревья и тому подобное. Использование этих функций немного отличается от обычных функций не пространственной базы данных.

Ответ 14

На мой взгляд, есть три "трека" с навыками базы данных: разработчик, администратор баз данных и архитектор. С точки зрения развития, вы хотите сосредоточиться на разработке, понять архитектора и собрать как можно больше материалов DBA по мере необходимости.

Как разработчик, ключевым моментом (на мой взгляд) было бы сделать ваш SQL действительно хорошим стандартом. Как интервьюер, если я ищу разработчика, мне все равно, можно ли создавать базы данных так же, как вы можете писать запросы. Предполагая, что вы знаете о своих основных командах CRUD, вы знаете о:

Хранимые процедуры (не только, как их использовать, но когда и почему)
Виды (в том числе материализованные виды)
Триггеры (вставка, обновление, удаление, как и почему)
Курсоры (особенно влияние на производительность)
Ссылочная целостность
Сделки
Индексы
Добавление значений по умолчанию, ограничений и идентификаторов к таблицам
Комплексное использование группы и Функции особенно:
 - Обработка даты и времени
 - Обработка строк
 - Обработка нулей

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

Как разработчик, одно бронирование, на которое я бы посмотрел, - это Joe Celko SQL для Smarties. Множество SQL, чтобы делать то, что вы, возможно, никогда не думали о возможности делать в SQL.

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

Посмотрите на свою текущую базу данных и придумайте кучу действительно неудобных вещей, которые кто-то может действительно захотеть узнать. Подумайте о маркетинге, тенденциях, большинстве и наименее популярном. Затем попробуйте объединить их в один запрос.

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

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

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

В терминах ссылок это зависит от платформы - все это имеет тенденцию быть специфичным для платформы. Но тогда для чего предназначен Google.

Я не подозреваю полностью, что вы хотите, но стоит знать, поскольку многие люди, которые считают, что они знают SQL, действительно действительно не...

Ответ 15

Я настоятельно рекомендую начать с www.dbdebunk.com. У этого есть много практических вещей, которые противостоят теории. Сайт немного устарел, но по-прежнему полезен. Даже коммерческий контент не слишком дорог, если вы действительно хотите стать профессионалом базы данных.

Ответ 16

Я бы посоветовал немного сузить область действия. выбрать сервер sql и стать экспертом в нем... например, получить mysql, узнать разницу между типами хранилищ, типами репликации и т.д. реализовать репликацию несколькими различными способами. получить большой набор данных и попытаться оптимизировать запросы. сделайте несколько опорных точек и оптимизируйте свои индексы для этого. исследовать стратегии резервного копирования. как повысить производительность репликации и резервных копий, когда у вас есть база данных 10gb, которая последовательно добавляет 100 000 транзакций каждый день. написать программное обеспечение для вставки записей и сценариев для выполнения репликации и резервного копирования.

трудно стать эффективным dba без реального опыта, когда вы пытаетесь охватить все серверы sql. просто сосредоточьтесь на одном... я бы предложил mysql или mssql, но независимо от того, что плавает ваша лодка.

-don

Ответ 17

Существует только один строгий метод концептуального моделирования схемы реляционной базы данных, о которой я знаю (и я потратил много времени на поиск). Он смутно назвал "Object-Role Modeling". Вот пара ссылок.

http://www.agilemodeling.com/artifacts/ormDiagram.htm

http://www.tdan.com/view-articles/5033

http://en.wikipedia.org/wiki/Object_role_modeling

http://en.wikipedia.org/wiki/NORMA

и здесь плагин для Visual Studio

Ответ 18

Ну, честно говоря, база данных - это всего лишь способ хранения и доступа к данным. В значительной степени то, что делает файловая система.

Параллель от LDAP заключается в том, что он является протоколом и этим не является определение того, что вы можете с ним сделать и как его реализовать, то же самое можно сказать и о SQL.

Итак, если вы хотите узнать больше о базах данных, вы на самом деле говорите, что хотите узнать больше о протоколе SQL и/или о том, как хранить и извлекать данные.

Вам может быть интересно узнать, что такое "B-Tree" и как оно используется. Еще одна вещь, заслуживающая внимания - EAV (Entity-Attribute-Value) и почему схема так важна для нее.

Благодаря этим знаниям вы могли бы реально развить свою собственную БД и при этом оценивать то, что RDBM уже сделал для вас.

Если вы хотите более практичный подход взглянуть на документацию, которую предоставляет PostgreSQL с открытым исходным кодом, возможно, начиная с this.

Ответ 19

Вы можете начать с чтения одной из (почти недавних) обзоров, посвященных основам и тенденциям в Базах данных: Анатомия баз данных