Teorier om relasjonsdatabaser. Relasjonsdatabaseteori: normalisering, relasjoner og sammenføyninger. Utdannings- og vitenskapsdepartementet i Den russiske føderasjonen

Merknad: Denne og de to neste forelesningene er viet teorien om relasjonsdatabaser. Siden hele den relasjonelle tilnærmingen til databaseorganisering er rent praktisk, er denne teorien hovedsakelig pragmatisk. Hovedproblemet som relasjonsdatabaseteori tar sikte på å løse er å oppdage de nyttige egenskapene til visse databaseskjemaer og utvikle måter å konstruere slike skjemaer på. Dette problemet blir ofte referert til kort som.

Introduksjon

Til tross for sin praktiske orientering, relasjonsdatabaseteori er et uavhengig vitenskapelig felt der mange kjente forskere har jobbet (og fortsetter å jobbe), hvis navn vil vises i våre forelesninger. Vi planla ikke å beskrive i detalj hovedresultatene på feltet i dette kurset. Vårt mål er å gi kun de definisjonene og utsagnene som er nødvendige for en generell forståelse av prosessen relasjonsdatabasedesign basert på normalisering.

Siden de viktigste egenskapene til relasjonsdatabaser fra et praktisk synspunkt er basert på konseptet funksjonell avhengighet, har vi tatt med en kort omtale av relevante teoretiske problemstillinger i et eget foredrag. Blant disse spørsmålene, stenginger og som dekker sett med funksjonelle avhengigheter, Armstrongs aksiomer og Heaths teorem om tilstrekkelig tilstand tapsfri relasjonsdekomponering. Konseptene og uttalelsene i denne forelesningen er virkelig nødvendige for å mestre stoffet i forelesning 7, men vi forsøkte også å demonstrere for leserne med enkle eksempler hva det er relasjonsdatabaseteori, hva er kompleksitetsnivået og hvor intuitivt det er.

Merk at vi ikke skilte ut teoretisk materiale vedr flerverdige avhengigheter Og forbindelsesavhengigheter. Dette ble gjort av to grunner. For det første er disse typene avhengigheter mindre vanlige i modellering fagområde ved hjelp av databaser. Derfor anså vi det som tilstrekkelig å presentere i forelesning 8 kun det grunnleggende om det relevante teoretiske materialet. For det andre, selv om teorien flerverdige avhengigheter Og forbindelsesavhengigheter, faktisk ikke mye mer komplisert enn teorien funksjonelle avhengigheter, definisjonene og utsagnene er for tungvinte for dette kurset.

Funksjonelle avhengigheter

Det viktigste fra et praktisk synspunkt normale former for forhold er basert på grunnleggende relasjonsdatabaseteorier konsept funksjonell avhengighet. For videre presentasjon trenger vi flere definisjoner og utsagn (vi vil forklare og illustrere dem etter hvert).

Generelle definisjoner

La det bli gitt relasjonsvariabel r, og X og Y er vilkårlige delsett av r-overskriften ("sammensatte" attributter).

I mening relasjonsvariabel r attributt Y er funksjonelt avhengig av attributt X hvis og bare hvis hver verdi av X tilsvarer nøyaktig én verdi av Y. I dette tilfellet sies det også at attributtet X funksjonelt definerer attributt Y (X er determinanten ( avgjørende faktor) for Y, og Y er avhengig av X). Vi vil betegne dette som r.X->r.Y .

For eksempel vil vi bruke relasjonen EMPLOYEE_PROJECTS (SLUN_NAME, SLU_NAME, SLU_ZARP, PRO_NOM, PROJECT_RUK)(Fig. 6.1). Selvfølgelig, hvis SLU_NOM er primærnøkkelen i forholdet ANSATTE, så for dette forholdet er det rettferdig funksjonell avhengighet (FD) SLN_NAME->SERV_NAME .

Faktisk for kroppen i forholdet ANSATTE_PROSJEKTER i den formen den er vist i fig. 6.1, blir følgende FD-er (1) også utført:


Ris. 6.1.

SLUN_NOM->SLUN_NAME SLUN_NOM->SLUN_ZARP SLU_NOM->PRO_NOM SLUN_NOM->PROJECT_RUK (SLUN_NAME, SLU_NAME)->SLUN_ZARP (SLUN_NAME, SLUN_NAME)->PRO_NOM (SLUN_NOM_ZA)->,PROMRU_NAME)->,PROMRU_NAME, ... K og etc.

Siden navnene på alle ansatte er forskjellige, er følgende FD-er (2) også oppfylt:

SERV_NAME->SERV_NAME SERV_NAME->SLU_ZARP SER_NAME->PRO_NAME, osv.

Dessuten, for eksemplet i fig. 6.1 er oppfylt og FD (3):

SLU_ZARP->PRO_NOM

Vær imidlertid oppmerksom på at karakteren til FD-gruppen (1) er forskjellig fra naturen til FD-gruppene (2) og (3). Det er logisk å anta at ansattes identifikasjonsnummer alltid skal være forskjellige, og hvert prosjekt har kun én leder. Derfor må FDene til gruppe (1) være sanne for enhver gyldig verdi relasjonsvariabel ANSATTE_PROSJEKTER og kan betraktes som invarianter, eller integritetsbegrensninger dette relasjonsvariabel.

Gruppe-FDer (2) er basert på den mindre naturlige forutsetningen at alle ansatte har forskjellige navn. Dette er sant for eksempelet i fig. 6.1, men det er mulig at FD-gruppene (2) over tid ikke vil bli tilfredsstilt for noen verdi relasjonsvariabel ANSATTE_PROSJEKTER.

Endelig er FD for gruppe (3) basert på den svært unaturlige antakelsen om at ingen ansatte som er involvert i ulike prosjekter får samme lønn. Igjen er denne antagelsen sann for eksemplet i fig. 6.1, men mest sannsynlig er dette en tilfeldighet.

I fremtiden vil vi bare være interessert i disse funksjonelle avhengigheter, som må være oppfylt for alle mulige verdier forholdsvariabler.

Legg merke til at hvis attributt A til en relasjon r er en mulig nøkkel, så gjelder det for enhver attributt B i denne relasjonen alltid

PROGRAMMERING I DELPHI 6 MILJØ

Database. Lag en rapport med Word.

Godkjent av Redaksjons- og forlagsrådet

universitetet som laboratorieverksted

Voronezh 2004


UDC 681.3

Vorobyov E.I., Korotkevich D.E.. Programmering i Delphi 6-miljøet: Laboratorieverksted: Del 2: Databaser. Lag en rapport med Word. Strømmer. Voronezh: Voronezh. stat tech. Univ., 2004. 107 s.

Den andre delen av laboratorieverkstedet diskuterer teoretisk og praktisk informasjon for å skrive programmer i Delphi 6-miljøet om emnet: "Designe databaser, lage rapporter i Word og bruke tråder når du lager applikasjoner med høy ytelse."

Publikasjonen oppfyller kravene til statens utdanningsstandard for høyere profesjonsutdanning i retning 230100 "Informatikk og informatikk", spesialitet 230104 "Computer-Aided Design Systems", disiplin "Programmering i høynivåspråk".

Bord 3. Il. 19. Bibliografi: 7 titler.

Vitenskapelig redaktør: Dr. Tech. vitenskaper, prof. Ja.E. Lvovich

Anmeldere: Institutt for informatikk, Voronezh Forestry Academy (avdelingsleder, doktor i tekniske vitenskaper, prof. V.E. Mezhov);

Dr. Tech. vitenskaper, prof. O.Yu.Makarov

© Vorobyov E.I., Korotkevich D.E., 2004

© Design. Voronezh delstaten

Teknisk universitet, 2004


Introduksjon

Database konsept

Databaser regnes som den største fordelen med Delphi. Selv spesialiserte språk for å jobbe med databaser (som MS Visual FoxPro) er klart dårligere når det gjelder enkelhet og programmeringskraft for denne typen applikasjoner. Delphi skjuler all kompleksiteten og gir samtidig den største kraften. Det har aldri vært en oppgave som ikke kunne implementeres i Delphi på kort tid. Og det viktigste er at alt dette er implementert veldig praktisk og lett å forstå. I Delphi kan du lage enkle applikasjoner, selv med komplekse databaser, uten en eneste linje med kode. Denne opplæringen dekker laboratorieoppgaver for å mestre teknikker for arbeid med lokale databaser.

Relasjonsdatabaseteori

For ti år siden var databaseprogrammering en svært vanskelig oppgave. I dag er det vanskelig å forestille seg, fordi takket være Delphi har prosessen med å skrive programmer blitt forenklet, og antallet databasevarianter er allerede i dusinvis.

Databaser er delt inn i lokale (installert på klientens datamaskin, der programmet kjører) og eksterne (installert på serveren, en ekstern datamaskin). Serverdatabaser er plassert på en ekstern datamaskin og kjøres under kontroll av serverprogramvare. Deres viktigste fordeler inkluderer muligheten til å jobbe med en database samtidig av flere brukere, og samtidig er det minimal belastning på nettverket. Det finnes også nettverksdatabaser som skaper for mye belastning på nettverket og er upraktiske å bruke for både programmereren og sluttbrukeren. Når et program kobles til en nettverksdatabase, laster det ned en nesten fullstendig kopi av det fra serveren. Hvis du har gjort endringer, vil din kopi bli fullstendig lastet ned tilbake. Dette er svært upraktisk fordi det skaper en stor belastning på nettverket på grunn av overdreven dataoverføring. I klient-server-teknologi sender klientprogrammet en enkel tekstforespørsel til serveren for å motta noen data. Serveren behandler den og returnerer bare den nødvendige delen av data. Når du trenger å endre noen data, sendes det igjen en forespørsel til serveren om å endre dem, og serveren endrer dataene i databasen. Dermed overføres hovedsakelig bare tekstforespørsler over nettverket, som vanligvis tar opp mindre enn en kilobyte. Alle data behandles av serveren, noe som betyr at klientens maskin belastes mye mindre og ikke er så ressurskrevende. Serveren sender kun de mest nødvendige dataene til klienten, noe som betyr at det ikke er unødvendig nedlasting av en kopi av hele databasen. Takket være alt dette er nettverksdatabaser allerede utdaterte og praktisk talt ikke brukt. De er nesten fullstendig erstattet av klient-server-teknologi. Men lokale databaser vil alltid leve. Formatet på lagringen deres kan endres eller noen nye funksjoner kan bli lagt til, men selve databasene vil eksistere. For videre vurdering må vi definere et nytt konsept - bord. Så langt er det kun generelle prinsipper som er diskutert, så det generelle begrepet har blitt brukt databaser. En databasetabell er som en todimensjonal matrise der data er ordnet i en kolonne (et godt eksempel på en tabell er Excel). En database er, grovt sett, bare en fil som kan lagre fra én til flere tabeller. De fleste lokale databaser kan bare lagre én tabell (dBase, Paradox, XML). Men det er representanter for lokale databaser, der flere tabeller er inneholdt i en fil (for eksempel Access).

Lokale databaser

Blant lokale databaser, la oss vurdere relasjonsdatabaser som de vanligste. Hva er en relasjonsdatabase? Dette er en tabell der kolonnene er navnene på dataene som er lagret i den, og hver rad lagrer selve dataene. En databasetabell ligner på et Excel-regneark (for å være mer presis lagrer Excel dataene i et proprietært format bygget på databaseteknologi). Lokale databasetabeller kan lagres på en lokal harddisk eller sentralt lagret på en nettverksstasjon på en filserver. Disse filene kan kopieres ved hjelp av standardverktøy som alle andre filer, fordi databasetabellene i seg selv ikke er knyttet til en bestemt plassering. Hovedsaken er at programmet kan finne tabellen. Hver tabell må ha ett unikt felt som vil identifisere raden unikt. Dette feltet kalles nøkkelfeltet. Disse feltene brukes veldig ofte til å koble flere tabeller sammen. Men selv om tabellen ikke er relatert, er nøkkelfeltet fortsatt nødvendig. Det anbefales å bruke en numerisk type som nøkkel, og hvis databasen tillater det, vil det være bedre om den er av typen «autoincrement» (automatisk økende/minske tall eller teller). Kolonnenavn i en databasetabell må også være unike, men i dette tilfellet ikke nødvendigvis numeriske. De kan kalles hva du vil, så lenge det er unikt og forståelig. Hver kolonne (databasefelt) må ha en bestemt type. Antall typer og deres varianter avhenger av databasetypen, for eksempel støtter dBASE-formatet (filer med DBF-utvidelsen) kun 6 typer, og Paradox støtter allerede opptil 15. Databasen kan lagres i én fil (Access) ) eller i flere (Paradox, dBase). Mer presist lagres tabelldata alltid i én fil, men tilleggsinformasjon kan finnes i separate filer. Ytterligere informasjon kan inkludere indekser, begrensninger eller en liste over standardverdier for spesifikke felt. Hvis minst én av filene blir ødelagt eller slettet, kan dataene bli utilgjengelige for redigering.

Hva har skjedd indekser? Svært ofte gjennomgår data fra tabeller en slags endringer, så før du redigerer en rad, må du finne den. Selv statiske tabeller som brukes som oppslagsverk er også gjenstand for søkeoperasjoner før de forespurte dataene vises. Søk er en ganske tidkrevende operasjon, spesielt hvis tabellen inneholder mange rader. Indekser er rettet mot å fremskynde denne prosedyren, og kan også brukes som utgangspunkt for sortering. På dette stadiet er det nok å vite at et uindeksert felt ikke kan bestilles.

Hvis du trenger et bord som skal bestilles etter feltet " Etternavn", må dette feltet først indekseres. Da trenger du bare å indikere at tabellen nå skal fungere med en slik og en indeks, så blir den sortert automatisk.

I en godt utformet database elimineres dataredundans og sannsynligheten for lagring av inkonsekvente data minimeres. Dermed har opprettelsen av databaser to hovedmål: å redusere dataredundans og øke deres pålitelighet.

Livssyklusen til ethvert programvareprodukt, inkludert et databasestyringssystem, består (stort sett) av stadiene design, implementering og drift.

Naturligvis er den viktigste faktoren i livssyklusen til en databaseapplikasjon designstadiet. Ytelsen til systemet og dets informasjonsrikdom, og dermed levetiden, avhenger av hvor nøye strukturen til databasen er gjennomtenkt og hvor tydelig forbindelsene mellom elementene er definert.

Databasekrav

Så, en godt designet database:

1. Tilfredsstiller alle brukerkrav til databaseinnhold. Før du designer en database, er det nødvendig å foreta omfattende undersøkelser av brukerkravene til databasefunksjonalitet.

2. Sikrer datakonsistens og integritet. Når du designer tabeller, må du definere deres attributter og noen regler som begrenser muligheten for at brukeren skriver inn feil verdier. For å verifisere data før de skrives direkte inn i en tabell, må databasen kalle reglene for datamodellen og dermed sikre at integriteten til informasjonen opprettholdes.

3. Gir en naturlig, lettfattelig strukturering av informasjon. Høykvalitets databasekonstruksjon lar deg gjøre spørsmål til databasen mer "transparente" og lettere å forstå; Følgelig reduseres sannsynligheten for å legge inn feil data og kvaliteten på databasevedlikeholdet forbedres.

4. Oppfyller brukernes ytelseskrav til databasen. Med store mengder informasjon, problemer med å opprettholde produktiviteten

begynner å spille en stor rolle, og "fremhever" umiddelbart alle manglene på designstadiet.

Følgende punkter representerer de grunnleggende trinnene i databasedesign:

1. Bestem informasjonsbehovet til databasen.

2. Analyser virkelige objekter som må modelleres i databasen. Fra disse objektene, danner entiteter og kjennetegn ved disse enhetene (for eksempel, for "del"-enheten, kan egenskapene være "navn", "farge", "vekt", etc.) og danne en liste over dem.

3. Match enhetene og egenskapene - tabeller og kolonner (felt) i notasjonen til DBMS du har valgt (Paradox, dBase, FoxPro, Access, Clipper, InterBase, Sybase, Informix, Oracle, etc.).

4. Definer attributtene som unikt identifiserer hvert objekt.

5. Utvikle regler som vil etablere og opprettholde dataintegritet.

6. Etablere forbindelser mellom objekter (tabeller og kolonner), normalisere tabeller.

7. Planlegg for spørsmål om datapålitelighet og, om nødvendig, opprettholdelse av informasjonshemmeligheten.


Relatert informasjon.


Relasjonsalgebra er basert på settteori og er grunnlaget for databaselogikk.
Da jeg nettopp studerte strukturen til databaser og SQL, hjalp en foreløpig kjennskap til relasjonsalgebra i stor grad at ytterligere kunnskap passet inn i hodet mitt riktig, og jeg vil prøve å få denne artikkelen til å ha en lignende effekt.

Så hvis du skal begynne å studere på dette området eller bare er interessert, klikk på katten.

Relasjonsdatabase

Først, la oss introdusere konseptet med en relasjonsdatabase der vi skal utføre alle handlinger.

En relasjonsdatabase er en samling relasjoner som inneholder all informasjon som må lagres i databasen. I denne definisjonen er vi interessert i begrepet relasjon, men foreløpig lar vi det være uten en streng definisjon.
La oss forestille oss en tabell over produkter bedre.

PRODUKTER tabell

ID NAVN SELSKAP PRIS
123 Informasjonskapsler Dark Side LLC 190
156 Te Dark Side LLC 60
235 Ananas OJSC "Frukty" 100
623 Tomater OOO "grønnsaker" 130

Tabellen består av 4 rader, en rad i tabellen er en tuppel i relasjonsteori. Et sett med ordnede tupler kalles en relasjon.
Før vi definerer et forhold, la oss introdusere et annet begrep - domene. Domener i forhold til en tabell er kolonner.

For klarhetens skyld introduserer vi nå en streng definisjon av en relasjon.

La N settene D1,D2, … gis. Dn (domener), en relasjon R over disse settene er settet med ordnede N-tupler av skjemaet , hvor d1 tilhører D1 osv. Settene D1,D2,..Dn kalles domener av relasjonen R.
Hvert element i tuppelen representerer verdien til en av attributtene som tilsvarer et av domenene.

Nøkler i forhold
I en relasjon er kravet at alle tupler må være distinkte. For å identifisere en tuppel unikt, er det en primærnøkkel. En primærnøkkel er et attributt eller sett med minimum antall attributter som unikt identifiserer en bestemt tuppel og inneholder ingen tilleggsattributter.
Implikasjonen er at alle attributtene i primærnøkkelen må være nødvendige og tilstrekkelige for å identifisere en bestemt tuppel, og å utelate noen av attributtene i nøkkelen vil gjøre den utilstrekkelig for identifikasjon.
For eksempel, i en slik tabell vil nøkkelen være en kombinasjon av attributter fra den første og andre kolonnen.

DRIVER-tabell

Det kan ses at en organisasjon kan ha flere sjåfører, og for å identifisere sjåføren unikt kreves både verdien fra kolonnen "Organisasjonsnavn" og fra kolonnen "Sjåførnavn". En slik nøkkel kalles en sammensatt nøkkel.

I en relasjonsdatabase er tabeller sammenkoblet og relatert til hverandre som hoved- og underordnede tabeller. Forbindelsen mellom hoved- og underordnede tabeller utføres gjennom primærnøkkelen til hovedtabellen og fremmednøkkelen til den underordnede tabellen.
En fremmednøkkel er et attributt eller sett med attributter som er primærnøkkelen i hovedtabellen.

Denne forberedende teorien vil være tilstrekkelig for å bli kjent med de grunnleggende operasjonene til relasjonsalgebra.

Operasjoner av relasjonsalgebra

De grunnleggende åtte operasjonene til relasjonsalgebra ble foreslått av E. Codd.
  • En forening
  • Kryss
  • Subtraksjon
  • Kartesisk produkt
  • Prøve
  • Projeksjon
  • Sammensatt
  • Inndeling
Den første halvdelen av operasjonene ligner de samme operasjonene på sett. Noen operasjoner kan uttrykkes i form av andre operasjoner. La oss se på de fleste operasjonene med eksempler.

For forståelse er det viktig å huske at resultatet av enhver algebraoperasjon på relasjoner er en annen relasjon, som deretter kan brukes i andre operasjoner.
La oss lage en annen tabell som vil være nyttig for oss i eksemplene.

SELGER tabell

ID SELGER
123 OOO "Dart"
156 OJSC "Vedro"
235 CJSC "Grønnsaksbasa"
623 JSC "Firm"

La oss bli enige om at i denne tabellen er ID en fremmednøkkel knyttet til primærnøkkelen til PRODUCTS-tabellen.

Først, la oss se på den enkleste operasjonen - navnet på forholdet. Resultatet vil være den samme relasjonen, det vil si at ved å utføre PRODUKT-operasjonen, vil vi motta en kopi av PRODUKT-relasjonen.

Projeksjon
En projeksjon er en operasjon der attributter fra en relasjon kun trekkes ut fra de spesifiserte domenene, det vil si at bare de nødvendige kolonnene velges fra tabellen, og hvis flere identiske tupler oppnås, er det bare én forekomst av en slik tuppel igjen i den resulterende relasjonen.
La oss for eksempel lage en projeksjon på PRODUCTS-tabellen ved å velge ID og PRIS fra den.

Operasjonssyntaks:
π (ID, PRIS) PRODUKTER

I prøvebetingelsen kan vi bruke et hvilket som helst boolsk uttrykk. La oss gjøre et annet valg med en pris høyere enn 90 og produkt-ID mindre enn 300:

σ(PRIS>90^ID<300) PRODUCTS

Multiplikasjon
Multiplikasjon eller kartesisk produkt er en operasjon utført på to relasjoner, som et resultat av at vi får en relasjon med alle domener fra de to innledende relasjonene. Tuplene i disse domenene vil være alle mulige kombinasjoner av tupler fra de opprinnelige relasjonene. Det blir klarere med et eksempel.

Vi får tak i det kartesiske produktet fra tabellene PRODUKTER og SELGER.
Operasjonssyntaks:

PRODUKTER × SELGERE
Du vil legge merke til at disse to tabellene har samme ID-domene. I denne situasjonen blir domener med samme navn prefiksert med navnet på det tilsvarende forholdet, som vist nedenfor.
For korthets skyld, la oss ikke multiplisere de fullstendige forholdstallene, men prøvene med betingelses-ID<235

(de samme tuplene er uthevet i farger)

PRODUKTER.ID NAVN SELSKAP PRIS SELGER-ID SELGER
123 Informasjonskapsler Dark Side LLC 190 123 OOO "Dart"
156 Te Dark Side LLC 60 156 OJSC "Vedro"
123 Informasjonskapsler Dark Side LLC 190 156 OJSC "Vedro"
156 Te Dark Side LLC 60 123 OOO "Dart"

For et eksempel på bruk av denne operasjonen, se for deg behovet for å velge selgere med priser under 90. Uten produktet ville det være nødvendig å først hente produkt-ID-er fra den første tabellen, deretter bruke disse ID-ene fra den andre tabellen for å få de nødvendige SELGER navn, og bruk av produktet vil følgende spørring være:

π (SELGER) σ (RODUCTS.ID=SELGER.ID ^ PRIS<90) PRODUCTS × SELLERS

Som et resultat av denne operasjonen får vi relasjonen:

SELGER
OJSC "Vedro"
Tilknytning og naturlig tilknytning
Sammenføyningsoperasjonen er det motsatte av projeksjonsoperasjonen og skaper en ny relasjon fra to eksisterende. En ny relasjon oppnås ved å sette sammen tuplene til den første og andre relasjonen, mens relasjoner der verdiene til de spesifiserte attributtene sammenfaller er gjenstand for sammenkobling. Spesifikt, hvis du kobler sammen PRODUKTER- og SELGER-relasjonene, er disse attributtene attributtene til ID-domenene.

For klarhetens skyld kan du også forestille deg en forbindelse som et resultat av to operasjoner. Først tas produktet av kildetabellene, og deretter fra den resulterende relasjonen gjør vi et utvalg med betingelsen om likhet av attributter fra de samme domenene. I dette tilfellet er betingelsen likheten mellom PRODUCTS.ID og SELLERS.ID.

La oss prøve å koble sammen relasjonene PRODUKTER og SELGERE og få en relasjon.

PRODUKTER.ID NAVN SELSKAP PRIS SELGER-ID SELGER
123 Informasjonskapsler Dark Side LLC 190 123 OOO "Dart"
156 Te Dark Side LLC 60 156 OJSC "Vedro"
235 Ananas OJSC "Frukty" 100 235 CJSC "Grønnsaksbasa"
623 Tomater OOO "grønnsaker" 130 623 JSC "Firm"

En naturlig sammenføyning mottar en lignende relasjon, men hvis vi har et riktig konfigurert skjema i databasen (i dette tilfellet er primærnøkkelen til PRODUCTS ID-tabellen koblet til fremmednøkkelen til SELLERS ID-tabellen), så inneholder den resulterende relasjonen bare ett ID-domene.

Operasjonssyntaks:
PRODUKTER ⋈ SELGERE;

Du får denne relasjonen:

PRODUKTER.ID NAVN SELSKAP PRIS SELGER
123 Informasjonskapsler Dark Side LLC 190 OOO "Dart"
156 Te Dark Side LLC 60 OJSC "Vedro"
235 Ananas OJSC "Frukty" 100 CJSC "Grønnsaksbasa"
623 Tomater OOO "grønnsaker" 130 JSC "Firm"
Skjæring og subtraksjon.
Resultatet av skjæringsoperasjonen vil være en relasjon bestående av tupler som er fullstendig inkludert i begge relasjonene.
Resultatet av subtraksjonen vil være en relasjon bestående av tupler som er tupler av den første relasjonen og ikke tupler av den andre relasjonen.
Disse operasjonene ligner på de samme operasjonene på sett, så jeg tror det ikke er nødvendig å beskrive dem i detalj.
Informasjonskilder
  • Grunnleggende om bruk og utforming av databaser - V. M. Ilyushechkin
  • forelesningskurs Introduksjon til databaser - Jennifer Widom, Stanford University

Jeg vil være takknemlig for begrunnede kommentarer

Kort om de viktige tingene.

Databasenormalisering

Første normalform (1NF)

  • ingen dupliserte datagrupper
  • atomiteten til dataene er garantert (alle data er autonome og uavhengige).

På toppnivå oppnås dette ved å lage en primærnøkkel, deretter flytte gjentatte grupper med data til nye tabeller, lage primærnøkler for disse tabellene, og så videre. I tillegg må du dele alle poster hvis kolonner inneholder sammensatt informasjon i separate rader for hver del av kolonnedata.

Andre normalform (2NF)

  • tabellen tilfredsstiller betingelsene til 1NF
  • hver kolonne avhenger av hele nøkkelen, ikke en del av den.

Tredje normalform (3NF)

  • tabellen tilfredsstiller betingelsene i 2NF
  • ingen kolonne avhenger av en kolonne som ikke er en del av primærnøkkelen
  • inneholder ikke avledede data

Andre normale former som ikke har mye praktisk verdi:

Boyce-Codd normal form

Alternativ 3NF. Designet for å løse en situasjon der det er mange overlappende kandidatnøkler. Det er faktisk ingen logisk begrunnelse utenfor det akademiske miljøet.

Fjerde normalform

Designet for å løse problemer med flere verdifulle avhengigheter. Slike situasjoner oppstår hvis, i en tabell redusert til 3NF, en kolonne i en sammensatt primærnøkkel avhenger av en annen primærnøkkelkolonne.

Femte normalform

Brukes når man jobber med nedbryting av relasjoner med og uten tap. Det oppstår i en situasjon hvor det er mulig å splitte ett forhold i flere forskjellige forhold, men etter det vil vi ikke lenger logisk sett kunne tilbakeføre det til sin opprinnelige form.

Sjette normalform (normalform for domenenøkkel)

Sikrer at det ikke er noen modifikasjonsavvik i databasen. Under reelle forhold er det praktisk talt uoppnåelig.

Forhold.

Jeg hørte en gang fra kvinner at menn
umiddelbart prøve å forlate rommet der
Ordet "forhold" ble hørt.<...>nøkkelen til suksess
relasjoner er alles bevissthet om sin rolle
i denne forbindelse, så vel som reglene og restriksjonene,
pålagt av dette forholdet.
(C) Robert Viera, "Profesjonell SQL Server 2000-programmering"

Typer forhold

  • En-til-en (gir mening når samsvarende data må lagres i forskjellige databaser eller når den maksimale raddatastørrelsen overskrides)
  • Null-eller en-til-en
  • En-til-mange
  • En til -null, -en eller -mange
  • Mange-til-mange (krysstabeller)

Foreninger

INDRE BLI MED

Eksklusiv deltakelse. Valgresultatet inkluderer bare de tabellpostene som har samsvar i den sammenkoblede tabellen for den gitte betingelsen.

VENSTRE|HØYRE BLI MED

Inkluderende bli med. Valgresultatet inkluderer poster fra tabellen til venstre/høyre for BLI MED hhv. I dette tilfellet vil dataene fra den manglende "sammenkoblede" posten fylles ut NULL.
FROM left_table LEFT JOIN right_table– alle poster fra den venstre tabellen er inkludert left_table
FROM left_table HØYRE JOIN right_table– alle poster fra høyre tabell right_table er inkludert

FULL MED

Inkluderende bli med. Valgresultatet inkluderer ikke bare poster som har samsvar i den andre tabellen, men også poster fra begge tabellene som det ikke ble funnet samsvar for i den andre tabellen. I dette tilfellet vil dataene fra den manglende "parede" posten fylles med NULL.

KORS BLI MED

Kryssunion (kartesisk produkt). Hver post fra en tabell matches med hver post fra en annen tabell. Antall resulterende poster er lik produktet av antall poster i begge tabellene.

Prinsipper for å arrangere flere BLI MED's

Hvis du trenger å slå sammen flere bord, må du huske to prinsipper:

  1. Alle fagforeningene til venstre BLI MED behandles som en enkelt tabell for å inkludere eller ekskludere fra en spørring.
  2. Alle fagforeninger er til HØYRE BLI MED OGSÅ behandlet som en enkelt tabell for å inkludere eller ekskludere fra en spørring.

En konsekvens av disse prinsippene er følgende anbefaling for dannelse av komplekse assosiasjoner:

  • Der det er mulig bør du bruke INNER JOIN.
  • Dersom det er behov for å bruke YTRE JOINs, bør de plasseres sist, og INNER JOINs bør plasseres i begynnelsen av sammenføyningen.

P.S. Alt det ovennevnte er generelle "postulater" av teorien om relasjonsdatabaser, ikke knyttet til funksjonene til visse DBMS-er.

En datamodell er et sett med datastrukturer og operasjoner for deres behandling. Ved å bruke en datamodell kan du visuelt representere strukturen til objekter og relasjonene som er etablert mellom dem. Datamodellterminologi er preget av begrepene «dataelement» og «bindende regler». Et dataelement beskriver ethvert sett med data, og tilknytningsregler definerer algoritmer for sammenkobling av dataelementer. Til dags dato er det utviklet mange ulike datamodeller, men i praksis brukes tre hovedmodeller. Det finnes hierarkiske, nettverks- og relasjonsdatamodeller. Følgelig snakker de om hierarkiske, nettverks- og relasjonelle DBMS-er.

O Hierarkisk datamodell. Hierarkisk organisert data er svært vanlig i hverdagen. For eksempel er strukturen til en høyere utdanningsinstitusjon en hierarkisk struktur på flere nivåer. En hierarkisk (tre) database består av et ordnet sett med elementer. I denne modellen gir startelementer opphav til andre elementer, og disse elementene gir opphav til ytterligere elementer. Hvert underordnede element har bare ett overordnet element.

Organisasjonsstrukturer, materiallister, innholdsfortegnelser i bøker, prosjektplaner og mange andre sett med data kan presenteres i hierarkisk form. Integriteten til koblinger mellom forfedre og etterkommere opprettholdes automatisk. Grunnregel: intet barn kan eksistere uten sin forelder.

Den største ulempen med denne modellen er behovet for å bruke hierarkiet som var grunnlaget for databasen under utformingen. Behovet for konstant omorganisering av data (og ofte umuligheten av denne omorganiseringen) førte til opprettelsen av en mer generell modell - en nettverksmodell.

O Nettverksdatamodell. Nettverkstilnærmingen til dataorganisering er en utvidelse av den hierarkiske tilnærmingen. Denne modellen skiller seg fra den hierarkiske ved at hvert generert element kan ha mer enn ett genererende element. ■

Fordi en nettverksdatabase direkte kan representere alle slags relasjoner som er iboende i dataene til den tilsvarende organisasjonen, kan disse dataene navigeres, utforskes og spørres på forskjellige måter, det vil si at nettverksmodellen ikke er bundet av bare ett hierarki. Men for å sende en forespørsel til en nettverksdatabase, er det nødvendig å gå dypt inn i strukturen (ha skjemaet til denne databasen for hånden) og utvikle en mekanisme for å navigere i databasen, noe som er en betydelig ulempe med denne databasemodellen .

O Relasjonsdatamodell. Den grunnleggende ideen med en relasjonsdatamodell er å representere ethvert sett med data som en todimensjonal tabell. I sin enkleste form beskriver en relasjonsmodell en enkelt todimensjonal tabell, men som oftest beskriver modellen strukturen og sammenhengene mellom flere forskjellige tabeller.

Relasjonsdatamodell

Så formålet med informasjonssystemet er å behandle data Om gjenstander virkelige verden, tatt i betraktning forbindelser mellom objekter. I databaseteori kalles data ofte attributter, og gjenstander - enheter. Objekt, attributt og sammenheng er grunnleggende begreper i I.S.

En gjenstand(eller essens) er noe som eksisterer og skilles ut, det vil si at et objekt kan kalles det "noe" som det er et navn for og en måte å skille ett lignende objekt fra et annet. For eksempel er hver skole et objekt. Objekter er også en person, en klasse på skolen, en bedrift, en legering, en kjemisk forbindelse osv. Objekter kan ikke bare være materielle objekter, men også mer abstrakte begreper som gjenspeiler den virkelige verden. For eksempel arrangementer, regioner, kunstverk; bøker (ikke som trykte produkter, men som verk), teaterforestillinger, filmer; juridiske normer, filosofiske teorier mv.

Egenskap(eller gitt)- dette er en viss indikator som karakteriserer et bestemt objekt og tar en viss numerisk, tekst eller annen verdi for en bestemt forekomst av objektet. Informasjonssystemet opererer med sett med objekter designet i forhold til et gitt fagområde, ved hjelp av spesifikke attributtverdier(data) av visse objekter. La oss for eksempel ta klasser på en skole som et sett med objekter. Antall elever i en klasse er et datum som får en numerisk verdi (en klasse har 28, en annen har 32). Klassenavnet er et gitt navn som tar en tekstverdi (en har 10A, en annen har 9B osv.).

Utviklingen av relasjonsdatabaser begynte på slutten av 60-tallet, da de første verkene dukket opp som diskuterte; muligheten for å bruke kjente og naturlige måter å presentere data på – de såkalte tabelldatalogiske modellene – ved utforming av databaser.

Grunnleggeren av teorien om relasjonsdatabaser anses å være en IBM-ansatt, Dr. E. Codd, som publiserte en artikkel 6. juni 1970 En relasjonsmodell av data for store delte databanker(Relasjonsdatamodell for store kollektive databanker). Denne artikkelen var den første som brukte begrepet "relasjonsdatamodell." Teorien om relasjonsdatabaser, utviklet på 70-tallet i USA av Dr. E. Codd, har et kraftig matematisk grunnlag som beskriver reglene for effektiv organisering av data. Det teoretiske rammeverket utviklet av E. Codd ble grunnlaget for utviklingen av teorien om databasedesign.

E. Codd, som er matematiker av utdannelse, foreslo å bruke settteoriens apparat (union, skjæringspunkt, forskjell, kartesisk produkt) for databehandling. Han beviste at ethvert sett med data kan representeres i form av todimensjonale tabeller av en spesiell type, kjent i matematikk som "relasjoner".

Relasjonell En database anses å være en der alle data presenteres for brukeren i form av rektangulære tabeller med dataverdier, og alle operasjoner på databasen er redusert til manipulasjoner med tabellene.

Bordet består av kolonner (felt) Og linjer (poster); har et navn som er unikt i databasen. Bord reflekterer Objekttype virkelige verden (enhet), og hver av henne streng er et spesifikt objekt. Hver tabellkolonne er en samling av verdier for et spesifikt attributt til et objekt. Verdiene velges fra settet med alle mulige verdier for et objektattributt, som kalles domene.

I sin mest generelle form er et domene definert ved å spesifisere en basedatatype som elementene i domenet tilhører, og et vilkårlig boolsk uttrykk brukt på dataelementene. Hvis du evaluerer en boolsk tilstand på et dataelement og resultatet er sant, tilhører det elementet domenet. I det enkleste tilfellet er et domene definert som et gyldig potensielt sett med verdier av samme type. For eksempel utgjør innsamlingen av fødselsdatoene til alle ansatte «fødselsdatodomenet», og navnene på alle ansatte utgjør «ansattnavnsdomenet». Fødselsdatodomenet må ha en datatype på tidspunktet, og domenet for ansattnavnet må ha en karakterdatatype.

Hvis to verdier kommer fra samme domene, kan det gjøres en sammenligning mellom de to verdiene. For eksempel, hvis to verdier er hentet fra domenet til fødselsdatoer, kan du sammenligne dem og finne ut hvilken ansatt som er eldre. Hvis verdiene er hentet fra forskjellige domener, er sammenligningen deres ikke tillatt, siden det etter all sannsynlighet ikke gir mening. For eksempel vil det ikke komme noe sikkert ut av å sammenligne en ansatts navn og fødselsdato.

Hver kolonne (felt) har et navn, som vanligvis skrives øverst i tabellen. Når du designer tabeller innenfor et spesifikt DBMS, er det mulig å velge for hvert felt sitt type, det vil si å definere et sett med regler for visningen, samt å bestemme operasjonene som kan utføres på dataene som er lagret i dette feltet. Sett med typer kan variere mellom ulike DBMS-er.

Feltnavnet må være unikt i tabellen, men ulike tabeller kan ha felt med samme navn. Enhver tabell må ha minst ett felt; Feltene er plassert i tabellen i samsvar med rekkefølgen navnene deres dukket opp i da den ble opprettet. I motsetning til felt har ikke strenger navn; rekkefølgen deres i tabellen er ikke definert, og antallet er logisk ubegrenset.

Siden radene i tabellen ikke er sortert, er det umulig å velge en rad etter posisjon - det er ingen "første", "andre" eller "siste" blant dem. Enhver tabell har en eller flere kolonner, verdiene som identifiserer hver av radene. En slik kolonne (eller kombinasjon av kolonner) kalles primærnøkkel. Et kunstig felt introduseres ofte til tallposter i en tabell. Et slikt felt kan for eksempel være dets ordinære felt, som kan sikre unikheten til hver post i tabellen. Nøkkelen må ha følgende egenskaper.

Unikhet. Til enhver tid har ingen to forskjellige relasjonstupler samme verdi for kombinasjonen av attributter som er inkludert i nøkkelen. Det vil si at det ikke kan være to rader i tabellen som har samme identifikasjonsnummer eller passnummer.

Minimalisme. Ingen av attributtene som er inkludert i nøkkelen kan ekskluderes fra nøkkelen uten å krenke unikhet. Det betyr at du ikke skal opprette en nøkkel som inneholder både passnummer og identifikasjonsnummer. Det er nok å bruke noen av disse attributtene for å identifisere en tuppel unikt. Du bør heller ikke inkludere et ikke-unikt attributt i nøkkelen, det vil si at det er forbudt å bruke en kombinasjon av et identifikasjonsnummer og en ansatts navn som nøkkel. Ved å ekskludere den ansattes navn fra nøkkelen, kan hver rad fortsatt identifiseres unikt.

Hver relasjon har minst én mulig nøkkel, siden totaliteten av alle dens attributter tilfredsstiller betingelsen om unikhet - dette følger av selve definisjonen av relasjonen.

En av de mulige nøklene er tilfeldig valgt i som primærnøkkel. De resterende mulige nøklene, hvis noen, tas som alternative nøkler. Hvis du for eksempel velger et identifikasjonsnummer som primærnøkkel, vil passnummeret være den alternative nøkkelen.

Relasjonen mellom tabeller er det viktigste elementet i relasjonsdatamodellen. Det støttes fremmednøkler.

Når en relasjonsdatabasemodell skal beskrives, brukes ofte ulike termer for samme konsept, avhengig av beskrivelsesnivået (teori eller praksis) og systemet (Access, SQL Server, dBase). I tabellen 2.3 gir et sammendrag av begrepene som brukes.

Tabell 2.3. Databaseterminologi

Databaseteori____________ Relasjonsdatabaser_________ SQL Server __________

Relasjonstabell Tabell

Tuple Record Row

Attributtfelt_______________Kolonne

Relasjonelle databaser

Relasjonsdatabase er et sett med relasjoner som inneholder all informasjon som må lagres i databasen. Det vil si at databasen representerer et sett med tabeller som er nødvendig for å lagre alle dataene. Tabellene i en relasjonsdatabase er logisk relatert til hverandre Kravene til utforming av en relasjonsdatabase generelt kan reduseres til flere regler.

О Hver tabell har et unikt navn i databasen og består av rader av samme type.

O Hver tabell består av et fast antall kolonner og verdier. Mer enn én verdi kan ikke lagres i én enkelt radkolonne. Hvis det for eksempel er en tabell med informasjon om forfatter, utgivelsesdato, opplag osv., kan ikke kolonnen med forfatterens navn lagre mer enn ett etternavn. Hvis boken er skrevet av to eller flere forfattere, må du bruke tilleggstabeller.

O Ikke på noe tidspunkt vil det være to rader i tabellen som dupliserer hverandre. Rader må avvike i minst én verdi for å kunne identifisere en hvilken som helst rad i tabellen unikt.

О Hver kolonne er tildelt et unikt navn i tabellen; en spesifikk datatype er satt for det slik at homogene verdier plasseres i denne kolonnen (datoer, etternavn, telefonnumre, pengebeløp, etc.).

O Det fullstendige informasjonsinnholdet i en database er representert som eksplisitte verdier av selve dataene, og dette er den eneste representasjonsmetoden. For eksempel er relasjoner mellom tabeller basert på dataene som er lagret i de tilsvarende kolonnene, og ikke på grunnlag av noen pekere som kunstig definerer relasjoner.

О Når du behandler data, har du fritt tilgang til hvilken som helst rad eller kolonne i tabellen. Verdiene som er lagret i tabellen pålegger ingen begrensninger på rekkefølgen dataene blir aksessert i. Beskrivelse av kolonnene,