Як зануритися в потворну базу даних?


26

Я впевнений, що багато хто з вас мали / мали справу з потворною базою даних. Ви знаєте, що база даних, яка не нормалізується зовсім, та база даних, де вам потрібно зробити великий болісний запит, щоб отримати найтривіальніші дані, та база даних, яка виробляється, і ви не можете трохи змінити ... ви знаєте , "он той".

Моє запитання: як ти з цим справляється?

  • Ви намагаєтеся створити нову базу даних?
  • Ви здаєтеся і залишите це в спокої?
  • Яку пораду ви можете дати?

Відповіді:


29
  • Перше, що я роблю, - це створити діаграму взаємовідносин між особою (ERD). Іноді ви можете просто описати метадані за допомогою інструментів командного рядка, але для економії часу є деякі інструменти, які можуть генерувати схему автоматично.

  • По-друге, вивчіть кожну таблицю та стовпець, щоб переконатися, що я дізнався значення того, що вона зберігає.

  • По-третє, вивчіть кожне відношення і переконайтесь, що я розумію, як таблиці співвідносяться один з одним.

  • По-четверте, прочитайте будь-які погляди або триггери, щоб зрозуміти спеціальні операції забезпечення цілісності даних або каскадні операції.

  • По-п’яте, прочитайте будь-які збережені процедури. Читайте також права доступу до SQL, якщо такі є.

  • По-шосте, прочитайте частини коду програми, які використовують базу даних. Ось де застосовуються деякі додаткові правила бізнесу та правила цілісності даних.


оновлення: я щойно прочитав цікаву статтю " 9 Що робити, коли ти успадковуєш базу даних " з хорошим контрольним списком.

Підсумок:

  1. Резервні копії
  2. Дослідження (етапи документації схеми, про які я згадував вище)
  3. Поговоріть з колишніми розробниками
  4. База даних про помилки
  5. Контроль вихідного коду
  6. Поговоріть із користувачами та / або власниками бізнесу
  7. Встановіть довіру до користувачів, виправивши кілька речей або зробивши деякі вдосконалення
  8. Створіть середовище розвитку
  9. Викиньте застарілі об’єкти

13

Це не завжди можливо, але одне, що працювало на мене в певних ситуаціях, - це замінити деякі таблиці переглядами. Потім ви зможете прибрати внизу таблиці, а в деяких випадках врешті-решт розпоряджатися думками. Як я вже казав, працює лише в деяких випадках.


В Oracle Матеріалізовані погляди також можуть допомогти у цьому.
Лі Риффел

9

Словник даних - ваш друг. Також спробуйте реверсувати інженерію бази даних за допомогою інструменту зворотної інженерії на Visio та створити власний набір діаграм. Оскільки зворотна інженерія інтерактивна - ви будуєте діаграми - це набагато цікавіше, ніж читання словника даних. Активність процесу є його перевагою, і мені здається, що це дуже розслаблює.

Більшість робіт, які я роблю, - це зберігання даних, де розмивання схем бази даних вихідної системи - це щось основне. Я робив подібні речі досить багато разів і вважаю, що це працює дуже добре.

Visio pro не такий вже й дорогий, і механізм моделювання Visio дозволяє ділитися моделлю між кількома діаграмами. Як бонус, ви можете додати в діаграми пропущені сторонні ключі, і ви отримаєте корисний набір документації для системи до кінця.


6

На додаток до ідей Білла Карвіна, пропоную поговорити з користувачами - періодично користувачі знають небагато про те, для чого використовується їх база даних, особливо якщо вони звітують з неї.


6

Я маю справу з дуже некрасивим для програмного забезпечення постачальника, що окрім внесення пропозицій, я не можу багато чого змінити. Я завжди наполягаю на тому, щоб все змінилося, але оскільки це поза моїм контролем, я застряг у сміття.

Одне з речей, які я швидко почав використовувати, оскільки база даних абсолютно не має стосунків, - це загальний запит імені для схеми:

--Find Column named like 'blah' in a specific table
SELECT O.NAME, O.ID, C.NAME, O.XTYPE
FROM SYSOBJECTS O LEFT JOIN SYSCOLUMNS C ON O.ID=C.ID
WHERE C.NAME LIKE '%SearchFor%' AND O.XTYPE IN ('U','V') AND O.Name like '%TableName%'
ORDER by O.Name

або

--Find all Columns in DB with name like 'blah'    
SELECT O.NAME, O.ID, C.NAME, O.XTYPE
FROM SYSOBJECTS O LEFT JOIN SYSCOLUMNS C ON O.ID=C.ID
WHERE C.NAME LIKE '%SearchFor%' AND O.XTYPE IN ('U','V')
ORDER by O.Name

Оскільки в деяких таблицях є занадто багато стовпчиків з поганою назвою, а також занадто багато стовпців для пошуку, щоб знайти те, що я міг би використати для формування взаємозв'язків між таблицею.

Я знаю, що це не дуже допомагає в частині переробки дизайну, але це дуже допомагає в розумінні та розшифровці поганої схеми.


6

SchemaCrawler - це мій інструмент виявлення баз даних, який має пару функцій, які полегшують дослідження потворних баз даних. SchemaCrawler має функцію "grep", що дозволяє шукати таблиці та стовпці, використовуючи регулярні вирази. Наприклад, ви можете шукати таблиці та стовпці з "ACCOUNT" як частина їх імені, і вони, ймовірно, будуть пов’язані якимось чином.

SchemaCrawler також підводить зовнішні ключові зв'язки, навіть якщо немає сторонніх ключів. Це робиться шляхом знаходження «слабких асоціацій» за допомогою загальних умов іменування, таких як таблиці - імена, як правило, множини, але імена стовпців - ні, і назви стовпців можуть мати префікс _ID. Ви можете знайти пов’язані таблиці за допомогою цих висновків.


5

Залежить від того, наскільки це потворно, і наскільки ви маєте контроль над дизайном і що з ним взаємодіє. Мені довелося протягом багатьох років спілкуватися з низкою потворних баз даних на моїй теперішній роботі, і ось, як я з ними справився:

Дані працівника

Існує база даних, яка містить дані про співробітників. Це база даних постачальників, тому я не маю над цим контролю. (Un?) На щастя, я не маю прямого доступу до нього. Я отримую сміттєзвалище щоранку.

Найкраще, що мені вдалося керувати, - це написати сценарій, який прочищає введення з ранкового дампа (так, щоб вибір слова був навмисним) та перемістити його у більш корисний формат та працювати з очищеними даними.

Навіть якби я міг це змінити, я, мабуть, не став би - лише тому, що існує велика кількість інших програм, які покладаються на те, що вони налаштовані так, як є, і я не можу примусити їх зміни.

Дані онлайн-навчання

Це було безладом мого власного дизайну. Я побудував його свіжим поза коледжем, не маючи наставника, який би міг мені допомогти ... З тих пір я це поправляв трохи за раз. Оскільки я керую єдиною програмою, яка отримує доступ до даних, під час оновлення частин сайту я "оновлю" конфігурацію бази даних. Я напишу сценарій перетворення та енергійно перевіряю його на копії, щоб переконатися, що всі зміни, які потрібно внести, будуть внесені.

Це було тривалим процесом, але його іде добре.

Дані навчання в класі

Мій пілотний проект інтегрував дані з 3-х різних баз даних, всі розроблені дещо інакше моїм попередником ... який був вихователем медсестри, який брав клас чи два програмування.

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

Зрештою, це було б головним кандидатом на початок чистоти ... задній вигляд завжди 20/20.

Наприкінці...

Я не знаю, наскільки це було корисно, і я можу детальніше розібратися (до певної міри, юридична компанія yada yada і все). Остаточна відповідь - "Це залежить".


5

Отже, прочитавши всі ваші відповіді, я даю вам свою:

Спочатку я шукаю "Основну таблицю", потім, за допомогою ручки та паперу, я починаю зіставляти відносини з іншими таблицями, після чого, якщо є якийсь код програми, на який слід подивитися, я починаю робити декілька необроблених ескізів про те, як надходять дані.

Після того, як я отримаю гарне уявлення про те, як працює db, я просто прошу перевірити місця, де можна змінити речі. Це воно.

Я не знаю чому, але я віддаю перевагу документу над будь-яким програмним забезпеченням для моделювання баз даних.


5

Через його використання зовнішнім додатком ви не можете змінити "інтерфейс" бази даних. Я не знаю, який тип бази даних ви використовуєте (oracle, mysql, mssql), але я бачу це як один із способів:

  • побудова інтерфейсу бази даних, використовуючи такі типи об'єктів, як процедури перегляду та збереження.
  • покрокове рефакторинг (нормалізація, перейменування поля ...)
  • зміна програми клієнта (якщо потрібно)

Перегляди, що зберігаються процедури приховують внутрішні модифікації (зміни) баз даних.


4

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


4

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


4

Якщо ви зможете поділити проблему на проблеми, якими можна обернути мозок, ви можете атакувати їх по черзі. Іноді, просто розуміючи, що є одна таблиця, на якій не всі заграні, може дати вам пляж, з якого можна працювати. Таким чином, ви розширюєте своє "чисте місце", щоб охопити більшу частину бази даних шматками.


4

Якщо у вас є Visio (частина Microsoft Office), ви можете спробувати функцію зворотного інженера . Це не дуже, але це, принаймні, дасть вам початок (за частку вартості «справжніх» інструментів, таких як Rational Rose).



3

Білл дав чудову відповідь. Я додам, що я б увійшов до інтерфейсу користувача як тестовий користувач і спробував зрозуміти, що саме роблять користувачі з даними. Це допоможе вам зрозуміти, чому стоять деякі збережені програми або дизайн. Розуміння того, що означає дані та для чого використовується, є критично важливим для розуміння бази даних.

Якщо база даних перебуває на бізнес-функції чи предметі, з яким ви взагалі незнайомі (скажімо, це планування польотів, а ви раніше працювали лише над фінансовими заявками), то попросіть користувачів трохи прочитати матеріал з цього питання або перейдіть до бібліотеки самостійно або шукайте в Інтернеті тему. Запитайте користувачів, чи є юридичні чи регуляторні проблеми, про які вам потрібно знати. Знову ж таки, деякі з цих предметів можуть пояснити те, що здається дивним вибором дизайну.


3

Якщо це база даних постачальників (і я бачив деякі справді погані), все, що ви можете зробити, це скаржитись на це продавцю.

Для вбудованих додатків зазвичай розробникам достатньо певної освіти, і ви можете почати змінювати схему, щоб покращити продуктивність. Це вимагає часу, і це, як правило, повільний процес.

На мій досвід, створення нової бази даних насправді не є можливим, оскільки переміщення сотень ГБ або ТБ даних - це не все так можливо.

Залишати його в спокої також зазвичай не є варіантом. Оскільки кількість даних у базі даних зростає, продуктивність буде погіршуватися і погіршуватися (надається до того моменту, коли я бачу проблеми, як правило, вони досить чортово погані). Зрештою користувачі не зможуть користуватися програмою, оскільки продуктивність настільки погана.


3

Ах ... некрасива база даних, чим більше підприємство, тим більше застарілих баз даних ми знайдемо.

  • Налаштування продуктивності люди не скаржаться на такі бази даних, поки не знайдуть проблем із продуктивністю. Тож у нашій організації ми визначаємо окремі запити та тонко налаштовуємо їх як виправлення.
  • Обмеження даних тепер ми знаємо, де смердючий сміття, тому намагайтеся уникати потоку даних через такі бази даних. Створіть базу даних для поетапних дій та перенаправляйте свої дані до цих таблиць, щоб почати та використовувати старі в якості дампів.
  • Уникайте приховування даних Архів / обрізання старих даних, які більше не потрібні. Повинна бути команда, яка вирішує, як довго потрібні дані в базі даних. Після цього ви можете перемістити його в плоскі файли або навіть на магнітоли.
  • Поступово його припиняють, як тільки ви зможете досягти перенаправлення даних і усікання даних. Переконайте інші команди почати використовувати нову базу даних.

Це працює не завжди, але якщо ми не докладемо зусиль, це лише погіршиться. Я намагаюся переробити бази даних разом із програмами, це може додати більше роботи для міграції даних, але продуктивність - це чарівний трюк, який я завжди виймаю з капелюха.

Удачі з вашим потворним другом дівчини;)


2

Подивіться, чи доступний вам варіант сеансу передачі знань, і якщо так, то скористайтеся ним повністю.

Крім того, багато СУБД оснащені інструментами, які дозволяють малювати / друкувати схему бази даних з деякою корисною інформацією (тобто іноземними ключами).

Крім того, (викрадено з NXC) ви можете повернути інженеру до бази даних за допомогою таких інструментів, як Visio.


2

Мені подобається запускати профайлер запитів і спостерігати, що відбувається у виробничій системі. Дає мені деяке уявлення про те, які таблиці є "гарячими" та які запити щодо них є.


1

Покладіть резервну копію на пісочний сервер, а потім починайте писати та виконувати тестові запити. Мені завжди здається, що складну систему легше зрозуміти, чи можу я взяти її за руки, і не переживаю за її порушення.

Крім того, мені подобається, щоб The Daily WTF був відкритий у вікні браузера. Переймання чужої конструкції зазвичай передбачає багато моментів "я не можу повірити, що вони зробили {WTF}", і це допомагає кудись поїхати, де люди зрозуміють ваш біль.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.