1

Тема: Проектування бази даних

Добрий вечір.

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

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

Наче БД я розумію, сам принцип теж, роботу з ними для конкретного типу та мови теж, за бажанням дізнаюсь. Але от не можу я правильно спроектувати саму базу.

Ну як, в коледжі нас звісно "навчили" теорії, про рядки, про типи, про зв'язки і тому-подібне і навіть намагались навчити проектувати, говорили за декілька (здається 4) нормальних форм, але...

На стандартному прикладі, як типу студентська Група створити базу нас то навчили, якось таким боком:

Група:
       *Код групи
        Назва групи
        Кількість студентів
        Відділення
        Код студента     
   

Студент:
       *Код студента(студентського)
        Ім'я
        Прізвище
        По батькові
        Телефон
        Ідентифікаційний код
        Дата народження

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

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

Буду вдячний за будь-який коментар.

"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds

2 Востаннє редагувалося koala (27.01.2015 23:44:02)

Re: Проектування бази даних

Група:
       *Код групи
        Назва групи
        Кількість студентів - приберіть. Цей параметр має обчислюватися базою за даними про студентів
        Відділення - група може змінити відділення? Якщо ні - то це частина ключа. Для маленьких баз некритично, а от для великих може являти проблему.
        Код студента - якого студента? В групі тільки один студент? Це у студента має бути код групи, навпаки.
Студент:
       *Код студента(студентського) - якщо студент загубив студентський, йому дадуть з таким самим номером?
        Ім'я
        Прізвище
        По батькові - ці три поля будуть оброблятися незалежно?
        Телефон - у студента тільки один телефон може бути?
        Ідентифікаційний код
        Дата народження

Подякували: 0xDADA11C7, Logans2

3

Re: Проектування бази даних

koala написав:

Група:
       *Код групи
        Назва групи
        Кількість студентів - приберіть. Цей параметр має обчислюватися базою за даними про студентів
        Відділення - група може змінити відділення? Якщо ні - то це частина ключа. Для маленьких баз некритично, а от для великих може виявити проблему.
        Код студента - якого студента? В групі тільки один студент? Це у студента має бути код групи, навпаки.
Студент:
       *Код студента(студентського) - якщо студент загубив студентський, йому дадуть з таким самим номером?
        Ім'я
        Прізвище
        По батькові - ці три поля будуть оброблятися незалежно?
        Телефон - у студента тільки один телефон може бути?
        Ідентифікаційний код
        Дата народження

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

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

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

"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds

4 Востаннє редагувалося Allright (28.01.2015 10:16:51)

Re: Проектування бази даних

Приблизно так:

*Код групи
  Назва групи

*Ідентифікаційний код студента
  ПІБ
  Дата народження
  Телефон
  Студ. квиток
  ...
  Код групи

Як спректувати відділення і факультет самі здогадаєтесь.

5

Re: Проектування бази даних

Allright написав:

Приблизно так:

*Код групи
  Назва групи

*Ідентифікаційний код студента
  ПІБ
  Дата народження
  Телефон
  Студ. квиток
  ...
  Код групи

Як спректувати відділення і факультет самі здогадаєтесь.

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

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

"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds

6

Re: Проектування бази даних

Тільки  практичний  досвід - ніякі  статті  не  допоможуть.   Це  як   вчитися   кататися  на  велосипеді   по  книжках.

Путлер капут!

7

Re: Проектування бази даних

Гм... ну, все ж таки по книжках можна (і навіть треба), паралельно з практикою, звісно. От тільки проблема в тому, що все програмування - це набір таких от "лайфхаків". Тому, щоб відповісти на це питання, треба книжку написати :)

8

Re: Проектування бази даних

Грубо кажучи, два фундаментальних правила:

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

2. чим важливіша строгість даних, ніж продуктивність роботи бази даних, тим більш нормалізованою повинна бути форма бази даних.

Подякували: Анатолій, Logans2

9

Re: Проектування бази даних

ktretyak написав:

2. чим важливіша строгість даних, ніж продуктивність роботи бази даних, тим більш нормалізованою повинна бути форма бази даних.

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

10 Востаннє редагувалося Allright (31.01.2015 14:21:12)

Re: Проектування бази даних

Від себе додам: для початку потрібно розібратися в SQL. Це дасть змогу тестувати БД на швидкість та "правильніше" спроектувати базу з точки зору зручності розробки програмного забезпечення. Не важливо, з якими СУБД ви в подальшому будете мати справу. Всі вони дуже схожі, проте відрізняються діалектом SQL, типами даних і ще багато чим і кожна зних має свої переваги і області застосування. Порадити конкретні книжки не можу, їх зараз велика кількість. Розпочніть з Wiki. Бажано встановити у себе на комп'ютері безкоштовну версію MSSQL (нема нічого зайвого, стандартний SQL) , або якусь іншу, та тренуватися у створенні  таблиць та написанні запитів (до повного розуміння Jion, union та ін.). Вивчивши і зрозумівши основи стандартного SQL та типів даних, індексів, в'юверів і т.д. можна буде згодом легко перейти на будь-яку іншу БД. Якось так...

Подякували: Анатолій, Logans2

11

Re: Проектування бази даних

Оскільки в мене зараз на часі теж проектування бази даних, то згадав ще одне просте правило, про яке чомусь не написав (мабуть для мене воно є надто очевидним):

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

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

Денормалізація може в десятки разів покращувати продуктивність виконання запитів до БД, особливо коли ці запити складні.