Реляционные базы данных - должно быть больше прав? - PullRequest
15 голосов
/ 15 апреля 2009

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

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

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

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

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

Заранее спасибо!

Ответы [ 19 ]

1 голос
/ 29 апреля 2009

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

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

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

1 голос
/ 30 апреля 2009

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

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

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

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

Как разработчик, я хотел бы взглянуть на заявку SQL для умничков Джо Селко. Много SQL для того, чтобы делать то, о чем вы, возможно, даже и не думали, что можете делать в SQL.

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

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

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

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

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

С точки зрения ссылок это зависит от платформы - все эти вещи, как правило, зависят от платформы. Но тогда для этого и нужен Google.

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

1 голос
/ 29 апреля 2009

Отказ от ответственности: не эксперт в проектировании баз данных.

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

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

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

1 голос
/ 28 апреля 2009

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

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

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

0 голосов
/ 05 мая 2009

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

0 голосов
/ 30 апреля 2009

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

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

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

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

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

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

0 голосов
/ 29 апреля 2009

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

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

0 голосов
/ 27 апреля 2009

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

0 голосов
/ 28 апреля 2009

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

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

-don

...