Care sunt tipurile de structuri de date? Structuri de date: concept general, implementare. Cele mai simple structuri de date: coadă, stivă. Folosind o stivă și notație poloneză inversă

Conceptul de structură a datelor este atât de fundamental încât este dificil să găsim o definiție simplă pentru el. Sarcina devine mai ușoară dacă încercăm să formulăm acest concept în raport cu tipurile de date și variabile. După cum știți, un program este o unitate a unui algoritm (proceduri, funcții) și a datelor pe care le prelucrează. Datele, la rândul lor, sunt definite de tipuri de date de bază și derivate - reprezentări „ideale” ale variabilelor cu dimensiuni fixe cu seturi de operații cunoscute asupra lor și componentelor lor. Variabilele sunt numite zone de memorie în care sunt „mapate” tipurile de date construite.
Într-un program, este întotdeauna posibil să se distingă grupuri de variabile indirect legate (prin folosirea datelor în aceleași proceduri și funcții) și direct (prin prezența unor relații prin pointeri). Într-o primă aproximare, ele pot fi considerate structuri de date.

Există structuri de date SIMPLE (de bază, primitive) (tipuri) și INTEGRATE (structurate, compozite, complexe). Structurile simple de date sunt acelea care nu pot fi defalcate în componente mai mari decât biții. Din punct de vedere al structurii fizice, faptul important este că într-o arhitectură de mașină dată, într-un sistem de programare dat, putem spune întotdeauna în avans care este dimensiunea unui anumit tip simpluși care este structura plasării sale în memorie. Din punct de vedere logic, datele simple sunt unități indivizibile. Structurile de date integrate sunt cele care componente care sunt alte structuri de date – simple sau, la rândul lor, integrate. Structurile de date integrate sunt construite de programator folosind instrumentele de integrare a datelor furnizate de limbajele de programare.

În funcție de absență sau prezență în mod explicit conexiuni dateîntre elementele de date ar trebui să se facă distincția între structuri DECONECTATE (vectori, matrice, șiruri, stive, cozi) și structuri LEGATE (liste legate).

O caracteristică foarte importantă a unei structuri de date este variabilitatea acesteia - o schimbare a numărului de elemente și (sau) conexiuni între elementele structurii. Definiția variabilității structurii nu reflectă faptul că valorile elementelor de date se modifică, deoarece în acest caz toate structurile de date ar avea proprietatea de variabilitate. Pe baza variabilitatii se disting structuri: STATICE, SEMI-STATICE, DINAMICE. Clasificarea structurilor de date pe baza variabilității este prezentată în Fig. 1.1. Structurile de date de bază, statice, semistatice și dinamice, sunt caracteristice RAMși sunt adesea numite structuri operaționale. Structuri de fișiere corespund structurilor de date pentru memoria externă.



Orez. 1.1. Clasificarea structurilor de date

O caracteristică importantă a unei structuri de date este natura ordonată a elementelor sale. Pe baza acestei caracteristici, structurile pot fi împărțite în structuri LINEARE ȘI NELINIARE.

În funcție de caracter poziție relativă elemente în memorie, structurile liniare pot fi împărțite în structuri cu distribuție CONSECUȚIONALĂ a elementelor în memorie (vectori, șiruri de caractere, matrice, stive, cozi) și structuri cu distribuție CONECTATĂ ARBITRAR a elementelor în memorie (liste simple legate, dublu legate). Un exemplu de structuri neliniare sunt listele cu mai multe legături, arbori, grafice.

În limbajele de programare, conceptul de „structuri de date” este strâns legat de conceptul de „tipuri de date”. Orice date, de ex. constantele, variabilele, valorile funcției sau expresiile sunt caracterizate prin tipurile lor.

Informațiile pentru fiecare tip identifică în mod clar:

· 1) structura de stocare a datelor de tipul specificat, i.e. alocarea memoriei și reprezentarea datelor în ea, pe de o parte, și interpretarea reprezentării binare, pe de altă parte;

· 2) set valori acceptabile, pe care acesta sau altul obiect de tipul descris îl poate avea;

· 3) un set de operații valide care sunt aplicabile unui obiect de tipul descris.

STRUCTURA DATELOR este un set de variabile interconectate fizic (tipuri de date) și logic (algoritm, funcții) și valorile acestora.

Rețineți că conceptul de structură de date se referă nu numai la variabilele care o alcătuiesc, ci și la algoritmi (funcții) care nu numai că conectează logic variabilele între ele, ci și determină valorile interne care ar trebui să fie și caracteristice. a acestei structuri de date. De exemplu, o secvență de valori pozitive plasate într-o matrice și având o dimensiune variabilă (structură de date) poate avea un delimitator nul. Toate operațiunile de generare și verificare a acestui limitator sunt implementate prin funcții. Astfel, putem spune că o parte semnificativă a structurii datelor este „cablată” în algoritmii de procesare a acesteia.
Metoda de definire a variabilelor prin tipuri de date cunoscute de noi se caracterizează prin faptul că, în primul rând, numărul de variabile din program este fix, iar în al doilea rând, dimensiunea acestora nu poate fi modificată în timpul rulării programului. Dacă relațiile dintre aceste variabile sunt mai mult sau mai puțin constante, atunci astfel de structuri de date pot fi numite statice.

STRUCTURA DATELOR STATICE - un set de un număr fix de variabile de dimensiune constantă cu natura neschimbată a conexiunilor dintre ele
În schimb, dacă unul dintre parametrii structurii de date - numărul de variabile, dimensiunea acestora sau relațiile dintre ele - se modifică în timpul rulării programului, atunci astfel de structuri de date se numesc dinamice.

STRUCTURA DATELOR DINAMICĂ - un set de variabile, numărul, dimensiunea sau natura relațiilor dintre care se modifică în timpul funcționării programului.

Structurile dinamice de date se bazează pe două elemente ale limbajului de programare:

· variabile dinamice, al căror număr se poate modifica și este determinat în cele din urmă de programul însuși. În plus, capacitatea de a crea matrice dinamice ne permite să vorbim despre date de dimensiuni variabile;

· pointeri care oferă o relație directă între date și capacitatea de a schimba aceste conexiuni.

Astfel, următoarea definiție este aproape de adevăr: structuri dinamice datele sunt variabile dinamice și tablouri legate prin pointeri.
Vorbind despre structurile de date, nu trebuie să uităm că variabilele obișnuite sunt localizate în RAM ( memorie internă calculator). Prin urmare, structurile de date au, de obicei, ceva de-a face cu memoria. Există însă și memorie externă, care în limbaj este accesibilă indirect prin operatori (Pascal) sau funcții (C) care lucrează cu fișiere. În modul fișier binar acces aleatoriu, orice fișier este un analog al unei zone de memorie nelimitată direct adresabilă, adică din punctul de vedere al programului arată la fel ca memorie normală. Desigur, programul poate copia variabile din memorie într-o locație arbitrară din fișier și înapoi și, prin urmare, poate organiza orice structuri de date (inclusiv dinamice) din fișier.
O structură de date este un executant care organizează munca cu date, inclusiv stocarea, adăugarea și ștergerea acestora, modificarea, căutarea etc. Structura de date menține o anumită ordine de acces la ea. O structură de date poate fi gândită ca un fel de depozit sau bibliotecă. Când descrieți o structură de date, trebuie să enumerați setul de acțiuni posibile pentru aceasta și să descrieți clar rezultatul fiecărei acțiuni. Vom numi astfel de acțiuni prescripții. Din punct de vedere al programării, unui sistem de prescripții de structură a datelor corespunde unui set de funcții care operează pe variabile comune.
Structurile de date sunt cel mai convenabil implementate în limbaje orientate pe obiecte. În ele, structura datelor corespunde unei clase, datele în sine sunt stocate în variabilele membre ale clasei (sau datele sunt accesate prin variabilele membre), iar unui set de metode de clasă corespunde unui sistem de prescripții. De regulă, în limbajele orientate pe obiect, structurile de date sunt implementate sub forma unei biblioteci de clase standard: acestea sunt așa-numitele clase container ale limbajului C++, incluse în bibliotecă standard Clase STL sau clase care implementează diverse structuri de date din biblioteca Java Developer Kit limbajul Java.
Cu toate acestea, structurile de date pot fi implementate la fel de cu succes în limbi tradiționale programare cum ar fi Fortran sau C. În acest caz, ar trebui să respectați un stil de programare orientat pe obiecte: identificați clar un set de funcții care funcționează cu structura de date și limitați accesul la date doar la acest set de funcții. Datele în sine sunt implementate ca variabile statice (nu globale). La programarea în limbajul C, structura datelor corespunde la două fișiere cu textele sursă:
1. antet sau fișier h, care descrie interfața structurii de date, adică un set de prototipuri de funcții corespunzătoare unui sistem de prescripții de structură de date;
2. fișier de implementare, sau fișier C, care definește variabilele statice care stochează și accesează date și, de asemenea, implementează funcții care corespund cerințelor sistemului de structura de date
Structura de date este de obicei implementată pe baza unei mai simple structura de baza, implementat anterior sau bazat pe o matrice și un set de variabile simple. Ar trebui făcută o distincție clară între descrierea unei structuri de date din punct de vedere logic și descrierea implementării acesteia. Pot exista multe implementări diferite, dar din punct de vedere logic (adică din punctul de vedere al unui utilizator extern), toate sunt echivalente și diferă, poate, doar prin viteza de execuție a instrucțiunilor.

  • Traducere

Desigur, poți fi un programator de succes fără cunoștințe sacre despre structurile de date, dar acestea sunt absolut indispensabile în unele aplicații. De exemplu, atunci când trebuie să calculați calea cea mai scurtă între două puncte de pe o hartă sau să găsiți un nume într-o agenda telefonică care conține, de exemplu, un milion de intrări. Ca să nu mai vorbim de faptul că structurile de date sunt utilizate în mod constant în programare sportivă. Să ne uităm la unele dintre ele mai detaliat.

Coadă

Deci salută-l pe Loopy!

Loopy îi place să joace hochei cu familia sa. Și prin „joc” vreau să spun:

Când țestoasele zboară în poartă, ele sunt aruncate în vârful stivei. Rețineți că prima țestoasă adăugată la grămadă este prima care o părăsește. Se numește Coadă. La fel ca în acele cozi pe care le vedem în viata de zi cu zi, primul element adăugat în listă este primul care o părăsește. Această structură se mai numește FIFO(Primul Intrat, Primul Ieșit).

Dar operațiunile de inserare și ștergere?

Q = def insert(elem): q.append(elem) #adăugați un element la sfârșitul cozii print q def delete(): q.pop(0) #eliminați elementul zero din coada print q

Stiva

După un joc atât de distractiv de hochei, Loopy face clătite pentru toată lumea. Ea le pune într-o grămadă.

Când toate clătitele sunt gata, Loopy le servește întregii familii, una câte una.

Rețineți că prima clătită pe care o face va fi servită ultima. Se numește Stiva. Ultimul element adăugat în listă va fi primul care îl părăsește. Această structură de date mai este numită LIFO(Ultimul intrat, primul ieşit).

Adăugarea și eliminarea elementelor?

S = def push(elem): #Adăugați un element la stivă - Push s.append(elem) print s def customPop(): #Eliminați un element din stivă - Pop s.pop(len(s)-1) imprimare s

Morman

Ați văzut vreodată un turn de densitate?

Toate elementele de sus în jos sunt amplasate în locurile lor, în funcție de densitatea lor. Ce se întâmplă dacă arunci un obiect nou înăuntru?

Va ocupa spațiu în funcție de densitatea sa.

Cam așa funcționează Morman.

O grămadă este un arbore binar. Și asta înseamnă că toată lumea element părinte are doi copii. Și deși numim această structură de date o grămadă, ea este exprimată printr-o matrice obișnuită.
De asemenea, heap-ul are întotdeauna o înălțime de logn, unde n este numărul de elemente

Figura arată un max-heap bazat pe următoarea regulă: copii Mai puțin părintească. Există, de asemenea, grămezi de min-heap, unde copiii sunt întotdeauna Mai mult părintească.

Unele funcții simple a lucra cu grămezi:

Heap global currSize global def parent(i): #Obțineți indexul părintelui pentru elementul i-lea return i/2 def left(i): #Obțineți copilul din stânga al i-lea element return 2*i def dreapta (i): #Obțineți copilul drept al i-a revenire (2*i + 1)

Adăugarea unui element la un heap existent
Pentru început, adăugăm un element chiar în partea de jos a mormanei, adică. până la sfârșitul matricei. Apoi îl schimbăm cu elementul său părinte până când se potrivește.

Algoritm:

  1. Adăugați un element chiar în partea de jos a mormanului.
  2. Comparați elementul adăugat cu cel părinte; Dacă comanda este corectă, ne oprim.
  3. Dacă nu, schimbați elementele și reveniți la punctul anterior.
Cod:

Def swap(a, b): #swap elementul cu index a pentru elementul cu index b temp = heap[a] heap[a] = heap[b] heap[b] = temp def insert(elem): global currSize index = len(heap) heap.append(elem) currSize += 1 par = parent(index) flag = 0 while flag != 1: if index == 1: #Got to element rădăcină flag = 1 elif heap > elem: #Dacă indexul elementului rădăcină este mai mare decât indicele elementului nostru, elementul nostru este în locul lui flag = 1 else: #Schimbați elementul părinte cu indexul nostru swap(par, index) = par par = parent(index) print heap
Număr maxim de treceri buclă while egală cu înălțimea arborelui, sau logn, prin urmare, complexitatea algoritmului este O(logn).

Recuperarea elementului heap maxim
Primul element din grămada este întotdeauna maximul, așa că îl vom elimina pur și simplu (după ce ne-am amintit mai întâi) și îl vom înlocui cu cel mai jos. Vom pune apoi grămada în ordinea corectă folosind funcția:

MaxHeapify().

Algoritm:

  1. Înlocuiți elementul rădăcină cu elementul inferior.
  2. Comparați noul element rădăcină cu copiii săi. Dacă sunt în în ordinea corectă- Stop.
  3. Dacă nu, înlocuiți elementul rădăcină cu unul dintre copii (mai mic pentru min-heap, mai mare pentru max-heap) și repetați pasul 2.

Def extractMax(): global currSize if currSize != 0: maxElem = heap heap = heap #Înlocuiți elementul rădăcină cu ultimul heap.pop(currSize) #Eliminați ultimul element currSize -= 1 #Reduceți dimensiunea heap maxHeapify( 1) return maxElem def maxHeapify(index): global currSize lar = index l = left(index) r = right(index) #Calculați care dintre elemente copil Mai mult; dacă este mai mare decât cel părinte, schimbați locurile dacă l<= currSize and heap[l] >grămada: lar = l dacă r<= currSize and heap[r] >heap: lar = r if lar != index: swap(index, lar) maxHeapify(lar)
Și din nou cantitate maxima apelurile la funcția maxHeapify sunt egale cu înălțimea arborelui, sau logn, ceea ce înseamnă că complexitatea algoritmului este O(logn).

Facem o grămadă din orice matrice aleatorie
Bine, există două moduri de a face asta. Primul este să introduceți fiecare element în grămada unul câte unul. Este simplu, dar complet ineficient. Complexitatea algoritmului în acest caz va fi O(nlogn), deoarece funcția O(logn) va fi executată de n ori.

Mai mult mod eficient- aplicați funcția maxHeapify pentru „ sub-grămădii', de la (currSize/2) la primul element.

Complexitatea va fi O(n), iar dovada acestei afirmații, din păcate, depășește scopul acestui articol. Trebuie doar să înțelegeți că elementele din porțiunea currSize/2 până la currSize a heap-ului nu au copii, iar majoritatea „sub-heap-urilor” formate în acest fel vor avea o înălțime mai mică decât autentificarea.

Def buildHeap(): global currSize for i in range(currSize/2, 0, -1): #al treilea argument în range() - pas de căutare, în în acest caz, determină direcția.

print heap maxHeapify(i) currSize = len(heap)-1

Serios, de ce sunt toate astea? Sunt necesare grămezi pentru a implementa un tip special de sortare numit, destul de ciudat, „ sortare grămadă

" Spre deosebire de „sortarea prin inserție” și „sortarea cu bule” mai puțin eficiente, cu complexitatea lor teribilă O(n2), „sortarea grămezilor” are complexitatea O(nlogn).

Implementarea este indecent de simplă. Continuați să scoateți secvențial elementul maxim (rădăcină) din heap și să îl scrieți în matrice până când heap-ul este gol. Def heapSort(): for i in range(1, len(heap)): print heap heap.insert(len(heap)-i, extractMax()) #insert element maxim
până la sfârșitul matricei currSize = len(heap)-1

Pentru a rezuma toate cele de mai sus, am scris câteva rânduri de cod care conțin funcții pentru lucrul cu heap-ul, iar pentru fanii OOP, am formatat totul ca o clasă.

Ușor, nu-i așa? Aici vine sărbătorirea Loopy!

Hash Loopy vrea să-și învețe copiii să recunoască forme și culori. Pentru asta ea a adus acasă cantitate uriașă

După un timp, țestoasele au devenit complet confuze

Așa că a scos o altă jucărie pentru a ușura puțin procesul.

A devenit mult mai ușor, pentru că țestoasele știau deja că figurile sunt sortate după formă. Dacă am eticheta fiecare pilon?

Țestoasele trebuie acum să verifice stâlpul cu număr specific, și alegeți-l pe cel de care aveți nevoie dintr-un număr mult mai mic de cifre. Ce se întâmplă dacă avem și un stâlp separat pentru fiecare combinație de formă și culoare?

Să presupunem că numărul coloanei este calculat după cum urmează:

Numele complet vară tre pătrat
f+i+o+t+r+e = 22+10+16+20+18+6 = Coloana 92

Kra somnoros Drept triunghi
k+p+a+p+p+i = 12+18+1+17+18+33 = Coloana 99

Știm că 6*33 = 198 de combinații posibile, ceea ce înseamnă că avem nevoie de 198 de piloni.

Să numim această formulă pentru calcularea numărului coloanei - Funcția hash.

Cod:
def hashFunc(piece): words = piece.split(" ") #split the string into words color = words shape = words poleNum = 0 for i in range(0, 3): poleNum += ord(colour[i]) - 96 poleNum += ord(shape[i]) - 96 return poleNum
(cu chirilic este puțin mai complicat, dar am lăsat-o așa pentru simplitate. - aproximativ)

Acum, dacă ar fi să aflăm unde este stocat pătratul roz, putem calcula:
hashFunc(„pătrat roz”)

Acesta este un exemplu de tabel hash, unde locația elementelor este determinată de o funcție hash.
Cu această abordare, timpul petrecut căutând orice element nu depinde de numărul de elemente, adică. O(1). Cu alte cuvinte, timpul de căutare într-un tabel hash este o valoare constantă.

Bine, dar să presupunem că căutăm „ masina amel Drept triunghi” (dacă, desigur, culoarea „caramel” există).

HashFunc(„dreptunghi caramel”)
ne va returna 99, care este același număr pentru dreptunghiul roșu. Se numeste " Coliziune" Pentru a rezolva o coliziune folosim „ Metoda lanțului”, implicând că fiecare coloană stochează o listă în care căutăm înregistrarea de care avem nevoie.

Așa că punem dreptunghiul de bomboane pe cel roșu și alegem unul când funcția hash indică acel pilon.

Cheia pentru un tabel hash bun este alegerea unei funcții hash adecvate. Acesta este, fără îndoială, cel mai important lucru în crearea unui tabel hash, iar oamenii petrec o cantitate imensă de timp dezvoltării funcțiilor hash de calitate.
ÎN mese bune nicio poziție nu conține mai mult de 2-3 elemente, în caz contrar, hashingul nu funcționează bine și trebuie să schimbați funcția de hash.

Încă o dată, căutați independent de numărul de elemente! Putem folosi tabele hash pentru orice are o dimensiune gigantică.

Tabelele hash sunt, de asemenea, folosite pentru a găsi șiruri și subșiruri în bucăți mari de text folosind algoritmul Rabin-Karp sau algoritm Knuth-Morris-Pratt, care este util, de exemplu, pentru identificarea plagiatului în lucrări științifice.

Cred că putem termina aici. În viitor, intenționez să mă uit la structuri de date mai complexe, de ex. grămada FibonacciŞi Arborele de segmente. Sper că ați găsit acest ghid informal interesant și util.

Tradus pentru Habr blocat

Examen Informatica

Informația ca resursă. Metode de stocare și prelucrare a informațiilor.

Informații din Lat. „Informație” înseamnă clarificare, conștientizare, prezentare.

ÎN în sens larg informatii - Acesta este un concept științific general care include schimbul de informații între oameni, schimbul de semnale între natura vie și cea neînsuflețită, oameni și dispozitive.
Informații – acestea sunt informații despre obiecte și fenomene mediu, parametrii, proprietățile și starea acestora, care reduc gradul de incertitudine și cunoașterea incompletă a acestora.

Informatica examineaza informatiile ca informații, date, concepte interconectate conceptual care ne schimbă ideile despre un fenomen sau obiect din lumea înconjurătoare.

Resurse informaționale Acest documente individualeși matrice separate de documente, documente și matrice de documente în sisteme informatice(biblioteci, arhive, fonduri, bănci).
Pentru ca informațiile să fie folosite și în mod repetat, acestea trebuie stocate.

stocarea informațiilor - este o modalitate de diseminare a informaţiei în spaţiu şi timp. Metoda de stocare a informațiilor depinde de suportul acesteia (carte – bibliotecă, pictură – muzeu, fotografie – album). Computerul este proiectat pentru stocarea compactă a informațiilor cu capacitatea acces rapid la ea.
Prelucrarea informațiilor este transformarea informaţiei de la un tip la altul.
Prelucrarea informațiilor – însuși procesul de tranziție de la datele inițiale la rezultat este procesul de prelucrare. Obiectul sau subiectul care efectuează prelucrarea este executantul prelucrării.
Primul tip de prelucrare: prelucrare legată de primire informații noi, conținut nou de cunoștințe.
Al doilea tip de prelucrare: prelucrare asociată cu o modificare a formei, dar nu modificarea conținutului (de exemplu,
traducerea textului dintr-o limbă în alta).

Vedere importantă procesare - codificare– transformarea informațiilor în formă simbolică,
convenabil pentru stocarea, transmiterea, prelucrarea acestuia. Un alt tip de prelucrare a informațiilor este structurarea datelor (introducerea de o anumită ordineîn stocarea informațiilor, clasificare, catalogarea datelor).
Un alt tip de prelucrare a informațiilor este căutarea în anumite stocări de informații a datelor necesare care satisfac anumite condiții de căutare (interogări).



Conceptul de date structurate. Definiția și scopul unei baze de date.

Atunci când creează o bază de date, utilizatorul se străduiește să organizeze informațiile în funcție de diferite caracteristici și să recupereze rapid un eșantion cu o combinație arbitrară de caracteristici. Acest lucru se poate face numai dacă datele sunt structurate.

Structurare - este introducerea unor convenții privind modul în care trebuie prezentate datele.

date structurate - sunt date comandate.

date nestructurate - acestea sunt date înregistrate în, de exemplu, fișier text: Dosarul personal nr. 1 Sidorov Oleg Ivanovici, data nașterii. 14.11.92, Dosar personal nr 2 Petrova Anna Viktorovna, data nasterii. 15/03/91.

Pentru automatizarea căutării și sistematizarea acestor date, este necesar să se dezvolte anumite acorduri privind modul de furnizare a datelor, de ex. data nașterii trebuie să fie scris la fel pentru fiecare elev, trebuie să aibă aceeași lungime și definiție. loc printre restul informațiilor. Aceleași observații sunt valabile și pentru restul datelor (număr dosar personal, F., I., O.) După efectuarea unei structuri simple a informațiilor, va arăta astfel:

Exemplu de date structurate: Nr. Nume complet Data nașterii

1 Sidorov Oleg Ivanovici 14.11.92

Elemente de date structurate:

1) A – câmp (coloană) – este o unitate elementară indivizibilă de organizare a informației

2) B – înregistrare (linie) este o colecție de câmpuri legate logic

3) B – tabel (fișier) este o colecție de instanțe de înregistrări cu aceeași structură.

baza de date - Aceasta este o colecție de date structurate interconectate, organizate pe medii informatice, care conțin informații despre diverse entități dintr-o anumită zonă (obiecte, procese, evenimente, fenomene).

În sensul larg al cuvântului, o bază de date este o colecție de informații despre anumite obiecte lumea realăîn orice domeniu.

Sub domeniul subiectului este înțeles ca o parte a lumii reale care face obiectul studiului pentru organizarea managementului, automatizării, de exemplu, o întreprindere, o universitate etc.

Scopul bazei de date:

1) Controlul redundanței datelor. După cum am menționat deja, sistemele de fișiere tradiționale sunt deșeuri memorie externă, salvând aceleași date în mai multe fișiere. În schimb, utilizarea unei baze de date încearcă să elimine redundanța datelor prin integrarea fișierelor pentru a evita stocarea mai multor copii ale aceleiași informații.

2) Consistența datelor. Eliminarea sau controlul redundanței datelor reduce riscul unor condiții inconsistente. Dacă un element de date este stocat în baza de date într-o singură instanță, atunci modificarea valorii acestuia va necesita o singură operație de actualizare, iar noua valoare va fi imediat disponibilă pentru toți utilizatorii bazei de date. Și dacă acest element de date, cu cunoștințele despre sistem, este stocat în baza de date în mai multe copii, atunci un astfel de sistem va putea să se asigure că copiile nu se contrazic.

3) Partajarea datelor. Fișierele sunt de obicei deținute de persoane sau departamente întregi care le folosesc în munca lor. În același timp, baza de date aparține întregii organizații și poate fi partajată de toți utilizatorii înregistrați. Cu o asemenea organizare a muncii Mai mult utilizatorii pot lucra cu cantități mari de date. Mai mult, este posibil să se creeze noi aplicații pe baza informațiilor deja existente în baza de date și să se adauge la aceasta doar datele care se află în momentul prezent nu sunt încă stocate în acesta, mai degrabă decât să redefinească cerințele pentru toate datele necesare noii aplicații.

4) Menținerea integrității datelor. Integritatea bazei de date înseamnă corectitudinea și consistența datelor stocate în ea. Integritatea este de obicei descrisă în termeni de constrângeri, de ex. reguli de menținere a coerenței care nu trebuie încălcate în baza de date. Constrângerile pot fi aplicate elementelor de date dintr-o singură înregistrare sau relațiilor dintre înregistrări. De exemplu, o constrângere de integritate poate spune că salariul unui angajat nu trebuie să depășească 40.000 de ruble pe an sau că, în înregistrarea de date a unui angajat, numărul departamentului în care lucrează trebuie să corespundă unui departament real al companiei.

5) Securitate sporită. Securitatea bazei de date se referă la protejarea bazei de date împotriva accesului neautorizat al utilizatorilor. Fără măsuri de securitate adecvate, datele integrate devin mai vulnerabile decât datele din interior sistem de fișiere. Cu toate acestea, integrarea vă permite să determinați sistemul de securitate al bazei de date necesar și DBMS să-l implementeze. Sistemul de securitate poate fi exprimat sub formă de nume de autentificare și parole pentru a identifica utilizatorii care sunt înregistrați în această bază de date. Accesul la date de către un utilizator înregistrat poate fi limitat doar la anumite operațiuni (extragere, inserare, actualizare și ștergere).