Плохие схемы баз данных в реальном мире - PullRequest
13 голосов
/ 11 сентября 2010

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

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

Найти хорошую схему немного сложно, потому что нам не нужна схема, которая хорошо спроектирована во всех аспектах, а схема, которая является более "редкой для средней".

Мы уже запланировали следующие схемы для анализа: wikimedia, moodle и drupal. Не уверен, к какой категории подходит каждый. Не обязательно, чтобы схема была с открытым исходным кодом.

Используемый механизм базы данных не важен, хотя мы бы хотели сосредоточиться на SQL-сервере, Posgresql и Oracle.

На данный момент литература будет отложена, поскольку предполагается, что эта задача даст нам примеры из реальной жизни, которые можно использовать в диссертации. то есть «Дизайн X воспринимается нами как плохой дизайн, который наш анализатор идентифицирует и предлагает усовершенствовать» вместо того, чтобы придумывать надуманные примеры.

Я обновлю этот пост, когда у нас будет готов какой-то инструмент.

Ответы [ 6 ]

7 голосов
/ 11 сентября 2010

Проверьте Dell-dvd-store , вы можете использовать его бесплатно.

Dell DVD Store - это симулятор с открытым исходным кодом для онлайн-магазина электронной коммерции с реализацией вMicrosoft SQL Server, Oracle и MySQL вместе с программами драйверов и веб-приложениями

Билл Карвин написал большую книгу о плохих проектах: Антипаттерны SQL

6 голосов
/ 11 сентября 2010

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

Вот несколько примеров:

1) Geonames.org

Вы можете найти данные и схему здесь: http://download.geonames.org/export/dump/ (прокрутите вниз до нижней части страницы для схемы, она находится в текстовом виде на сайте!)

Было бы интересно, как этот дизайн БД работает с таким ОГРОМНЫМ количеством данных!

2) OpenGeoDB

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

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

http://fa -technik.adfc.de / код / ​​opengeodb /

В обоих примерах интересно то, как они управляли иерархией объектов, таких как Страна -> Штат -> Уезд -> Город -> Деревня и т. Д.

PS: Может быть, вы тоже могли бы судить о моем дизайне БД;) Схема БД управления доступом на основе ролей

5 голосов
/ 11 сентября 2010

У vBulletin действительно плохая схема базы данных.

3 голосов
/ 12 сентября 2010

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

Вот несколько идей, которые приходят на ум:

Я работаю в компании, которая занимается управлением базами данных для нескольких крупных розничных компаний. У нас есть пользовательские базы данных, разработанные для каждой из этих компаний, в зависимости от того, как они намереваются использовать данные (для прямой почтовой рассылки, рассылок по электронной почте и т. Д.), И какие параметры анализа и выбора они предпочитают использовать. Например, компания, которая продает музыкальное оборудование в магазинах и в Интернете, будет хотеть проводить различие между покупателями и покупателями в Интернете, классифицировать покупателей по типу покупаемых ими предметов (барабаны, гитары, микрофоны, клавиатуры, записывающее оборудование, усилители, и т. д.) и отслеживайте, сколько они потратили и что купили за последние 6 месяцев или в прошлом году. Они используют эту информацию, чтобы решить, кто будет получать каталоги по почте. Эти рассылки очень дороги; может быть, один или два доллара на клиента, поэтому компания хочет, чтобы каталоги рассылались только тем, кто скорее всего что-то купит. У них может быть 15 миллионов клиентов в их базе данных, но только 3 миллиона покупают барабаны, и только 750 000 купили что-либо в прошлом году.

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

Также необходимо учитывать объем управляемых данных. Клиентская база в 10 миллионов может иметь данные о транзакциях от 10 до 20 миллионов транзакций в неделю. Или за день. Иногда для удобства управления эти данные должны быть разбиты на таблицы по диапазону дат, а затем представление будет использоваться для выбора данных из соответствующей вложенной таблицы. Это эффективно для такого огромного объема, но может показаться повторяющимся для автоматического анализатора.

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

Кроме того, как анализировать хранимые процедуры, пользовательские функции и т. Д.? Я видел действительно ужасный код, который работает довольно эффективно. И некоторые из самых уродливых, неэффективных кодов были написаны только для одноразового использования.

Хорошо, у меня нет идей на данный момент. Удачи в вашем проекте.

3 голосов
/ 11 сентября 2010

«мы работаем над количественной оценкой плохого дизайна базы данных».

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

Я предлагаю вам обдумать следующее:

Может ли физическая схема быть "плохой", в то время как логическая схема тем не менее "чрезвычайно хороша"?Намерены ли вы правильно провести различие между «логической схемой» и «физической схемой»?Как вы мечтаете достичь этого?

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

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

0 голосов
/ 14 сентября 2010

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

...