Как убедить кого-то нормализовать базу данных? - PullRequest
16 голосов
/ 02 июня 2009

Так что я работал над этим проектом на работе, где я кодирую сайт php, который взаимодействует с базой данных, которую я не могу контролировать. База данных была «разработана» сотрудником, который работал в компании еще много лет, чем я; так что в итоге решения остаются за ними.

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

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

Есть ли у кого-нибудь предложения о том, как убедить «старшего» сотрудника в правильном проектировании базы данных? Или какие-либо предложения о том, как избежать получения покровительственных лет для дизайна, в котором я не участвовал? Должен ли я просто отказаться от работы над такими проектами в будущем? Оставить комментарий в моем коде о том, что база данных была не моей?

Спасибо.

Редактировать: Дополнительная информация в ответ на комментарии ...

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

Чтобы уточнить некоторые детали, база данных предназначена для системы запросов на поездки, поэтому данные в ней связаны с информацией о посетителях, датами и т. Д. Схема, которую использует текущая база данных, непредсказуема от начала до конца. От простейших несоответствий в шаблонах именования переменных (пример: num_of_visitors, прибытиеMethod и т. Д.) До наличия отдельных отношений, определенных для одного атрибута «один-к-одному» состояния. Пример: statusID представляет статус запроса на поездку, в нем может быть только одно действительное состояние, выбранное из группы возможных состояний (Одобрено, Отклонено, Ожидает, Отменено.) По какой-то причине база данных имеет таблицу состояний, содержащую: tour_id (Первичный ключ отношения тура), statusID. Это позволяет определять несколько состояний для каждого запроса тура. Который, по замыслу, запрос на тур должен быть только в одном состоянии в любой момент времени. Так что это недостаток дизайна, а не недосмотр моего.

Ответы [ 12 ]

22 голосов
/ 02 июня 2009

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

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

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

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

19 голосов
/ 02 июня 2009

Сменить работу.

EDIT:

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

Серьезно подумайте о поиске новой работы. Есть действительно отличные рабочие места для разработчика. Это не так. Ты зря тратишь время.

4 голосов
/ 02 июня 2009

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

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

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

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

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

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

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

3 голосов
/ 02 июня 2009

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

2 голосов
/ 02 июня 2009

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

Я бы порекомендовал последовать совету, который уже дан для создания слоя вокруг базы данных. Заполните его комментариями типа «Делать эту сложную вещь, потому что таблицы БД 1 и 2 не нормализованы». Не помещайте критику в свои комментарии. Храните их строго технически. Время от времени обсуждайте с вашими коллегами / менеджером дизайн базы данных. Купите связанную книгу и положите ее где-нибудь на всеобщее обозрение. Когда кто-то спрашивает, предложите одолжить его. Тем не менее, ваши основные усилия должны писать хороший код.

2 голосов
/ 02 июня 2009

Попытка скрыть плохо спроектированную базу данных за слоем - это всего лишь «взлом», и IMO это должен быть план B. Для плана А я бы попытался «подняться» на более высокий уровень.

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

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

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

2 голосов
/ 02 июня 2009

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

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

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

2 голосов
/ 02 июня 2009

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

1 голос
/ 09 июля 2009

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

1 голос
/ 02 июня 2009

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

...