Какой самый простой и эффективный способ создания базы данных? С моей точки зрения, есть несколько вариантов дизайна хранилища данных приложения:
- Прежде чем писать код приложения, спроектируйте базу данных как можно лучше . Это дает вам преимущество наличия базовой структуры данных для работы. Недостатком этого, на мой взгляд, является то, что у вас будет много изменений, поскольку специфика приложения влияет на то, что / где / как данные меняются на протяжении всего цикла разработки приложения.
- Проектирование базы данных по мере реализации приложения . Когда вам нужно несколько объектов базы данных при написании приложения, вы разрабатываете базу данных (в хронологическом порядке) для приложения. Преимущества были бы меньше изменений в структуре базы данных, как я вижу это. Недостатком было бы разделение времени и усилий по разработке между кодом приложения и разработкой базы данных.
По вашему опыту, что вы считаете наиболее продуктивным и эффективным методом?
database-design
Томас Стрингер
источник
источник
Ответы:
В дополнение к другим ответам ...
Во-первых, захват вашей концептуальной модели должен определить сферу и требования. Отсюда вы можете получить свои логические и физические модели данных.
Как только это будет в основном статическим, у вас будет стабильная база данных, для которой вы будете создавать приложение. Это противоречит вашему первому варианту.
Ваше второе очко закончится грязным, неуправляемым комком грязи . Модель данных никогда не будет исправлена: если вы не спроектировали ее заранее, у вас не будет времени исправить ее перед отправкой. Вы будете слишком заняты хакерством.
Произойдут незначительные изменения в схеме, объединение или разделение таблиц, изменение отношений и т. Д., Но в локализованных «островках» ваша модель + базовый дизайн не изменится.
источник
Вам будет сложно найти любой современный отдел программного обеспечения, который не использует какой-либо вариант Agile. Для сравнения, администраторы баз данных застряли в темных веках, так как в @ RobPaller все еще распространено мнение.
Модифицировать схему базы данных еще никогда не было так просто, как модифицировать код, поэтому было нежелание использовать гибкий подход к разработке и обслуживанию баз данных. Теперь, когда у нас есть инструменты и методы для работы, аналогичные разработчикам, мы определенно должны это сделать. То, что изменить схему нелегко, вовсе не означает, что вы не можете и не должны этого делать.
Я не защищаю случайный подход к проектированию базы данных (см. Комментарии), просто подход, который более близко отражает подход гибкой команды разработчиков. Если вы участвуете в гибком проекте, у вас не будет требований к работе, которая может ( или не может ) возникнуть в будущем, поэтому нужно разрабатывать то, что, как вы знаете, не то, что может быть.
Полагаю, это поставит мой голос на ваш выбор 2, и я подозреваю, что на этом я могу оказаться в холоде!
источник
Ваша логическая модель данных должна эффективно отражать бизнес-требования вашего приложения. Ваш физический дизайн базы данных должен основываться на логической модели данных в сочетании с необходимыми изменениями, которые, как вы считаете администратором базы данных, необходимы для максимизации эффективности вашей СУБД.
Если вы обнаружите, что вам необходимо внести многочисленные изменения в базовый дизайн базы данных в течение жизненного цикла разработки программного обеспечения вашего приложения, это свидетельствует о двух вещах:
При этом после того, как приложение было передано в производство, нередко приходится возвращаться и вносить итерационные изменения в модель данных, чтобы поддержать естественную эволюцию приложения или базовых бизнес-процессов.
Надеюсь это поможет.
источник
Мне посчастливилось создать несколько баз данных средней сложности, все из которых используются в бизнесе, с различными интерфейсами, включая веб, Access и C #.
Обычно я садился и заранее разрабатывал схему базы данных. Это всегда имело для меня смысл. Однако не было ни одного случая, чтобы я не заканчивал тем, что вносил изменения, добавлял новые таблицы или жил с аспектами, которые беспокоили меня и были в основном слишком поздно, чтобы исправить.
Я не думаю, что лекарство - это сначала написать код. И я не думаю, что проблема заключается в «недостаточных требованиях к бизнесу» или, по крайней мере, не в том, что могло бы быть полностью решено. Пользователи не знают, что им нужно, и я не могу заставить их думать сложнее, быть умнее, лучше понимать или лучше отвечать на мои вопросы. Или они спорят, и мне приказывают сделать что-то определенным образом.
Системы, которые я создаю, обычно находятся в новых областях, в которые никто еще не заходил. У меня нет поддержки со стороны организации, ресурсов или инструментов для выполнения такой работы, которую команда разработчиков из лучших дизайнеров могла бы получить, как команда, которая в десять раз заплатила мне за создание вещей в два раза
Я ХОРОШО в том, что я делаю. Но только один из меня делает это в среде, которая "не занимается разработкой".
Все это говорит о том, что я лучше разбираюсь в бизнес-правилах. И я вижу своего рода третий вариант:
Перед разработкой базы данных и перед написанием любого кода нарисуйте грубые экраны, показывающие, как будет работать приложение. Они должны быть нарисованы от руки, чтобы никто не комментировал шрифт, размер или размеры - вам нужна только функция.
С помощью прозрачных пленок и кусочков бумаги вы можете менять местами, чтобы один человек был компьютером, двое - нетехническими экспертами в предметной области (двое так громко разговаривают) и один человек - помощник, который делает заметки и рисует. из пользователей об их мыслительных процессах и путанице. Пользователи «щелкают» и перетаскивают и пишут в ящиках, «компьютер» обновляет экран, и каждый может испытать дизайн. Вы узнаете вещи, которые вы не могли бы узнать иначе, пока не вошли бы в процесс разработки.
Возможно, я противоречу себе - может быть, это лучшее определение требований. Но идея в том, чтобы спроектировать приложение в первую очередь, без написания кода. Я начал делать это в небольшом масштабе, и это работает! Несмотря на проблемы в моей среде, это помогает мне с самого начала лучше проектировать базу данных. Я узнал, что столбец должен переместиться в новую родительскую таблицу, потому что есть несколько типов. Я узнал, что рабочий список должен иметь постоянные заказы, которые не приходят из интегрированной системы заказов. Я учу все виды вещей!
На мой взгляд, это огромная победа.
источник
Для большинства целей я бы выбрал вариант 2: Построить базу данных параллельно с другими компонентами. Везде, где возможно, применяйте итеративный подход и предоставьте комплексную функциональность при создании каждого компонента.
Это требует определенной дисциплины проекта. Строго применяйте нормализацию (форма Бойса-Кодда / Пятая нормальная форма) каждый раз, когда вы изменяете базу данных, чтобы поддерживать качество и не получить в результате специальную и противоречивую модель. Будьте максимально агрессивны с бизнес-правилами и сопутствующими ограничениями базы данных. Если вы сомневаетесь, лучше применить ограничение на ранней стадии - вы всегда можете снять его позже. Будьте внимательны к порядку реализации архитектурных компонентов, чтобы минимизировать технические долги. Имейте хороший набор руководящих принципов проектирования базы данных, в которые покупают все команды разработчиков.
Все это, конечно, должно идти рука об руку с другими хорошими практиками разработки: непрерывная интеграция, автоматизация тестирования и, что особенно важно, с точки зрения базы данных, создание тестовых данных. Создание тестовых данных для данных реалистичного размера должно выполняться в каждой итерации в обязательном порядке.
источник
В мире архитектуры фраза «Форма следует за функцией» была придумана, а затем соблюдалась при строительстве высоких зданий. То же самое должно применяться к инфраструктуре БД и разработке приложений.
Представьте себе, что вы пишете приложение, решающее на лету, что вам нужен стол здесь и стол там. Когда ваше приложение готово, у вас есть огромное количество таблиц, которые рассматриваются как массивы. Глядя на все таблицы бок о бок, таблицы определенно не будут иметь ни рифмы, ни причины.
К сожалению, некоторые магазины разработчиков подберут что-то вроде memcached, загрузят его с данными в ОЗУ (таким образом рассматривая это как канал передачи данных) и получат базу данных, такую как MySQL или PostgreSQL, которые будут вести себя просто как хранилище данных.
Стимулом для использования базы данных должен быть правильный взгляд на нее: как на СУБД. Да, система управления реляционными базами данных. Когда вы используете RDBMS, ваша цель должна заключаться не только в создании таблиц для хранения, но и для извлечения. Отношения между таблицами должны моделироваться после данных, которые вы хотите увидеть, и того, как они представлены. Это должно основываться на связности и целостности данных наряду с известными бизнес-правилами. Эти бизнес-правила могут быть закодированы в вашем приложении (Perl, Python, Ruby, Java и т. Д.) Или в базе данных .
ЗАКЛЮЧЕНИЕ
Я бы определенно выбрал вариант 1. Он требует правильного планирования, моделирования данных и постоянного анализа данных. Тем не менее, это должно минимизировать изменения базы данных в долгосрочной перспективе.
источник
Я думаю, что это должно быть сделано до того, как появится какой-либо реальный код для приложения, но не до того, как приложение будет разработано.
Мой типичный рабочий процесс, если я работаю один:
Поскольку я часто работаю как часть команды, и мы географически разбросаны (и по часовым поясам), у нас, как правило, начальная встреча:
Затем мы возвращаемся домой, пишем свою часть, и если компоненту требуется собственное локальное хранилище, при условии, что сопровождающий этой части поддерживает согласованность API-интерфейса с их модулем. Основное хранилище данных обрабатывается как модуль с собственным API, и ожидается, что люди будут писать в него. (в тех случаях, когда скорость работы базы данных критична, API - это определения таблиц, и если вносятся изменения, мы используем представления или какой-либо другой механизм для представления более старой версии, пока все модули не будут обновлены)
источник
Я имею в виду следующее правило: «Вы можете получать из базы данных только ту информацию, которую имеете для создания данных». Итак, сначала я создаю базу данных, а затем код.
Почему? Независимо от того, какую методологию / язык / набор инструментов я использую, если все соответствующие данные хорошо спроектированы и сохранены в БД, я могу их извлечь. Независимо от того, есть ли в C # / Delphi / FORTRAN / COBOL / Assembly / VBA или Crystal Reports; ОО разработан или событие / данные / что бы ни было обусловлено; проворный или водопад. Если данные есть, я могу получить их, если инструменты, которые я использую, могут подключиться к базе данных. Я могу создать отчеты о продажах, если смогу ВЫБРАТЬ заказы для доходов за квартал - даже если мне придется записывать их побитно при сборке.
Если соответствующих данных нет или даже если они есть, но (не) структурированы таким образом, что я не могу получить нужную мне информацию - как ее кодировать?
источник
Как обычно, это зависит;)
Например, предположим, что у нас есть рабочий прототип небольшого размера, разработанный на Python и использующий плоские файлы, и пользователи довольны возможностями этого прототипа, поэтому все, что нам нужно сделать, - это произвести его, используя RDBMS в качестве его внутренней части. , В этом случае разумно ожидать, что все будет сделано правильно с первого раза - проблема невелика и четко определена. В таких случаях возможно предварительное проектирование.
С другой стороны, когда мы обнаруживаем требования в Agile-среде, нам нужно несколько итераций, чтобы лучше их понять. В таких ситуациях база данных развивается вместе с остальной частью приложения. Это то, что мы обычно делаем. Поскольку мы можем проводить рефакторинг действующих таблиц OLTP без простоев и с низким уровнем риска, нам удобна возможность рефакторинга базы данных.
источник