Код Перший проти Першої бази даних


77

Коли я розробляю і створюю програмне забезпечення, над яким я працюю, я, як правило, спочатку проектую і створюю резервні таблиці SQL, а потім переходжу до власне програмування. Проект, над яким я зараз працюю, хоч і мене спантеличив правильно. Це, мабуть, пов’язано з відсутністю хороших, твердих вимог, але я, на жаль, цього не можу зробити. Це така ситуація "просто йди, щоб це сталося" .. але я відступаю.

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

Якщо комусь цікаво, я використовую SQL Server як бекенд, а MS Access - як передній додаток. (Доступ теж не мій вибір ... тому, будь ласка, не ненавидіти його занадто погано.)



6
@gnat: Це зовсім інше.
Роберт Харві

1
Якщо це закривається як дублікат, це повинен бути дублікат цього питання . Відповіді та запитання більше відповідають тому, що я задаю.
RubberDuck

1
@Mawg це робочий проект. Я відштовхнувся стільки, скільки можу, щодо того, щоб зменшити вимоги. Робота над цим повинна починатися, і я нічого більше не можу з цим зробити.
RubberDuck

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

Відповіді:


85

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

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

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

TL; DR: База даних залежить від бізнесу - вона їх визначає. Дані вам не знадобляться, якщо у вас немає процесу, який працює з ними (звіт - це також процес). Спершу реалізуйте процес, і ви знайдете, які дані йому потрібні. Спершу моделюйте дані, і ви, можливо, зможете порахувати, скільки припущень було неправильним, коли ви вперше моделювали їх.

Трохи поза темою, але дуже важливо: робочий процес, який я описую, часто використовується разом із дуже важливими практиками, такими як "Найпростіша річ, яка могла б працювати", тестова розробка та фокус на роз'єднанні вашої архітектури від деталей, які стати на шляху (підказка: база даних). Щодо останнього, ця розмова досить добре підводить ідею.


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

6
І просто поставити ім'я на ньому: Ця практика все (можливо , в ) важливі практики в Agile розвитку (зростаючому розвиток, найпростіше , що може працювати, тест-приводом, користувач повинен першим ...).
sleske

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

12
Якщо ви справді зафіксуєте всі вимоги за допомогою свого першого методу, і ви справді висловите всі ці вимоги у вашій кінцевій базі даних , я можу погодитися з цією відповіддю. Але я бачив багато, багато проектів, де задоволення від отримання чогось "працюючого" призводить до того, що "якщо це працює, база даних повинна бути достатньо хорошою", навіть коли це БЕЗПЕЧНА конструкція бази даних, з неминучими і серйозними проблемами з продуктивністю пізніше. Крім того, багато людей, здається, думають, що якщо код перевіряє дані, вам не потрібні обмеження CHECK or FOREIGN KEY. Ви робите .
Росс Пресер

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

17

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

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

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


Я погоджуюся від усієї душі, але цього не відбудеться. Дякую за ваш час.
RubberDuck

9
Якщо у вас немає часу зробити це правильно, де ви знайдете час для цього?
Вальтер Мітті

Хто сказав щось про те, щоб не зробити це правильно @WalterMitty? Будь ласка, дивіться посилання на відео у прийнятій відповіді. База даних - це деталь , яка не потребує можливості працювати над 95% програмного забезпечення.
RubberDuck

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

Ви неправильно зрозуміли мене @WalterMitty. Я прийняв цикл зворотного зв'язку. Я побудую те, що, на мою думку, повинно (без бази даних), а потім віддам його користувачам. Змініть програму. Повторіть. Після кількох повторів цього я повинен точно знати, як буде виглядати база даних. Як я розумію, підхід Agile розроблений спеціально для вирішення нечітких вимог. Це добре бачиться в мені на цьому проекті.
RubberDuck

12

Мій досвід такий:

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

Також пам’ятайте:

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

Висновок: рекомендую спершу розробити базу даних.


Це все дуже правдиві речі, і насправді це буде заміщенням "непроцесуального" та електронної таблиці, але я не бачу, як це відповідь на моє запитання. Ви можете, будь ласка, уточнити?
RubberDuck

1
@RubberDuck У кінці своєї відповіді я додав уточнення.
Tulains Córdova

11

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

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

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


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

Вимоги спочатку, хоча вам не слід чекати, коли вимоги будуть виконані (вони ніколи не є). Пройдіть, як тільки вам достатньо, щоб мати уявлення про те, які цілі програми, а потім отримуйте більше, коли вам це потрібно.
sleske

@sleske - Хороший аналітик повинен відчути більш "динамічні" (тобто розпливчасті та мінливі) частини вимог та створити певну гнучкість у дизайні, щоб легко впоратися з примхами користувачів.
Джеймс Андерсон

1
@JamesAnderson: Насправді я величезний фанат гнучких принципів розробки, де ти зазвичай розробляєш лише те, що тобі зараз потрібно , якщо тільки ти не знаєш, що не зможеш змінити дизайн пізніше (рідко це трапляється). Але я починаю виходити з теми ...
sleske

8

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

Для початкової "бази даних", використовуйте щось надзвичайно просте, можливо, просто ключі / значення, збережені у файлі. Я незнайомий з MS Access, тому не знаю, яким був би "легкий" найсильніший "бекенд". (Таблиця з електронними таблицями?) Що б не було швидко і брудно, плануйте його викидати.

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

Тепер, можливо, ваші зацікавлені сторони є експертами з БД - це було зі мною часом! - у такому випадку зробіть кілька конструкцій БД.


3
+1 ні для "коду по-перше", ні для "бази даних по-перше", але для "не функціонального першого прототипу gui-прототипу" (так само "швидкого прототипування"), оскільки за відсутності вимог прототип gui допомагає уточнити вимоги за допомогою ендузерів.
k3b

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

@Mawg так, на жаль, це небезпека. Один із варіантів (принаймні на Java) - використовувати дивний "погляд і відчуття", щоб зрозуміти, що це прототип.
user949300

Якщо ви не знаєте, куди ви їдете, будь-який код потрапить до вас.

-1

Оскільки вимоги не зрозумілі, можна почати з дуже рудиментарної моделі даних з ключовими елементами, які ви знаєте, що вам потрібно, можливо, лише базовими таблицями та ПК. Решту даних серіалізуйте у двійкові чи XML та зберігайте BLOB у базі даних для початку. Це повинно дозволяти розробляти інтерфейс користувача та бізнес-рівень (середній рівень) без повністю реляційної моделі, але у вас все одно буде наполегливість зберігати та отримувати та прості пошуки ключів за необхідності.

Як приклад, можливо, у вас є Особа, тому у вас є PK Person Id. Решта атрибутів не відомі, тому почніть з таблиці Person з ідентифікатором особи ПК та іншим стовпцем, який зберігатиме Blob, усі дані про людину.

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

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

В основному ви починаєте з табличної моделі і переходите до реляційної в міру просування проекту.

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


Таким чином лежить божевілля. Ніколи не зберігайте дані, поки ви не будете готові зберегти дані. Нормалізація даних після факту - це кошмар.
RubberDuck

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

-2

Взагалі я думаю, що код надходить після даних, тому що код маніпулює даними.

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


3
це, здається, не пропонує нічого суттєвого щодо питань, викладених та пояснених у попередніх 5 відповідях
грунт

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