Відносини баз даних Visual C # (Sharp)

У той час як відносини є потужною методикою, вони також можуть чрезвайно ускладнити завдання Щоб спростити структуру таблиці, ми можемо розбити її на дві (або більше) таблиці і створити відношення між ними Цей процес називаєтьсянормалізацією(http://enwikipediaorg/wiki/Database_normalization)

ВИЗНАЧЕННЯ

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

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

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

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

•&nbsp&nbsp один розіграш з кількома виграли– В оди н розигри ш кіль про че-

ловек можуть мати квитки з відібраними номерами

•&nbsp&nbsp один виграв на кілька розіграшів– Хот я тако е розвитку е і маловіри –

ятно, теоретично одна людина може виграти кілька розіграшів

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

20000531 ніхто 5 6 13 23 25 37 43 20000603 Джек 7 10 11 18 32 41 5 20000607 ніхто 15 23 24 28 38 39 45

20000610 Джек 1 3 12 23 29 33 27

20000614 ніхто 2 4 13 19 39 45 26

20000617 ніхто 3 8 17 19 21 25 35

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

20000531 ніхто 5 6 13 23 25 37 43

20000603 Джек Дділл 7 10 11 18 32 41 5 20000607 ніхто 15 23 24 28 38 39 45

20000610 Джек 1 3 12 23 29 33 27

20000614 ніхто 2 4 13 19 39 45 26

20000617 ніхто 3 8 17 19 21 25 35

Тут в іншому полі вказується другий власник квитка з виграшною комбіне номерів – Джилл Але додавання іншого поля порушує всю структуру таіци і набагато ускладнює обробку даних, т к при аналізі рядка необхідно виконувати перевірку на наявність додаткового поля Також порушується аккатная структура, що явно неправильно

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

2 0 0 0 0 5 3 1 5 6 1 3 2 3 2 5 3 7 4 3

2 0 0 0 0 6 0 3 7 1 0 1 1 1 8 3 2 4 1 5

2 0 0 0 0 6 0 7 1 5 2 3 2 4 2 8 3 8 3 9 4 5

20000610 1 3 12 23 29 33 27

20000614 2 4 13 19 39 45 26

20000617 3 8 17 19 21 25 35

Але створюється файл з таблицею власників виграли квитків:

20000603 Джек 20000603 Джилл 20000610 Джек

Рядки таблиці виграли містять два поля – дату розіграшу та імя виіавшего даний розіграш Зверніть увагу на відсутність записів для розришей без виграли, тобто таблиця містить тільки дати розіграшів, в котих був виграв

ПРИМІТКА

Дані три таблиці служать прикладом правильної нормалізації даних При Прилиньте нормалізації кожна таблиця містить унікальні дані У даному прерії одна таблиця містить інформацію про виграшних номерах, а інформація про власників квитків з цими номерами зберігається в іншій таблиці Таблиця номерів і таблиця виграли повязані датою, але кожна з таблиць є самодостатньою

Тепер розглянемо варіант, коли власниками виграли квитків є дві різні людини, але з однаковим імям Відповідні дані можуть влядеть таким чином:

20000531 ніхто

5

6

13

23

25

37

43

20000603 ніхто

7

10

11

18

32

41

5

20000607 ніхто

15

23

24

28

38

39

45

20000610 Джек

1

3

12

23

29

33

27

20000614 Джек

2

4

13

19

39

45

26

20000617 ніхто

3

8

17

19

21

25

35

Ми знаємо, що два записи з полями Джек не відображають одного і того ж Джека Тім чином, у нас є проблема із забезпеченням однозначності Це звичайна проблема реляційних баз даних, і поширеним способом її вирішення яяется присвоєння кожному Джеку унікального ключа Таким унікальним ключем може бути, наприклад, jack_i і jack_2 Але з використанням jack_i і jack_2 мається проблема, яка полягає в тому, що нам буде необхідно виконати пошук у базі даних, щоб дізнатися, чи є в ній запис Джек, після чого знайти останній запис Джек Операції цього роду, як правило, ресурсомісткі, і обио їх слід уникати Інше рішення полягає у використанні наданого базою даних поля, в якому генеруєтьсяунікальний ключ Він може бути номером рядка або ідентифікатором GUID (Globally Unique Identifier, глобальний унікальний ідентифікатор) При генеруванні унікального ідентифікатора компютером таблиця буде виглядати так: 20000531 1877_ds 5 6 13 23 25 37 43 20000603 1877_ds 7 10 11 18 32 41 5

458

2000.06.07

1877_ds

15

23

24

28

38

39

45

2000 06 10 1023_ad 1 3 12 23 29 33 27

2000.06.14 1022 2 4 13 19 39 45 26

2000 06.17 1877_ds 3 8 17 19 21 25 35

У цій таблиці ідентифікатори не дають жодного уявлення про власників вгравшіх квитків Щоб отримати цю інформацію, треба взяти ключ і відкрити відповідний йому файл власника квитка, що виграв Наприклад, щоб уать, хто такий l877_ds, необхідно відкрити файл 1877_dstxt, де ми дізнаємося, що даний розіграш не виграв ніхто При такому підході процес визначення влельца квитка, що виграв складається з декількох кроків, але реляційна база даних справляється з таким типом задач досить ефективно

НАВІЩО ПОТРІБНІ ЦІ ТИСЯЧІ ІНТЕРФЕЙСІВ API, БІБЛІОТЕК І МЕТОДИК

Протягом останніх 12 років були розроблені і випущені следующи е технології: Ope n Database Connectivity (ODBC, відкриті засоби звязку з БД), Remote Data Ob-jects (RDO, віддалені обєкти даних), Jet Database Engine (механізм СУБ Д Jet), Data Access Objects (DAO, обєкти доступу до даних), ActiveX Data Objects (ADO, обєкти данни х ActiveX), Object Linking and Embedding, Database (OLE DB, повязуючи і вбудовування обєктів (для баз даних)), ADONE T і Language Integrated Query (LINQ, мова інтегрованих запитів) Це означає, що кожні два роки вводиться нова технологія баз даних Кожній технопогіі баз даних супроводжують бібпіотек і дл я полегшення написання коду В результаті мається приголомшливо е кількість способо в дл я роботи з технологією, якої майже 40 пет

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

Програмування баз даних явпяется нудною роботою Хоча программіровані е баз даних д х дуже важливо, розробка коду СУБД – одна з найбільш трудомістких завдань програмування, з причини спожності і просто величезного розміру табпі ц баз даних Дл я будь-якого промислового додатки таблиць и з 30 полях і – дапек про не рідкість Розробляючи код дл я додати, видалити або модифікування я рядки в таблиць е з 30 полями, розробник головним чином намагається вирахувати, яке пе відноситься до якого елементу даних Тому зовсім не дивно, що разротчікі намагаються автоматизувати свою роботу Зрештою, набагато ІНТЕРЕОМ працювати над виявленням причини помилки в багатопотоковому пріпоженіі, нежеп і над помилкою помещени я даних не в те поле

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

Суть пробпем и при використанні мови программіровані я дл я обробки наборів даних полягає в тому, як інтегрувати мову зданими Але в кінці тунелю вен світло, яке м є зміна я мов програмування, такі як обєкти UNO (Universal Network Objects, універсальні мережеві обєкти) та анонімні е предмети Обєкти UNO розглядаються в наступному розділі

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*