Datenbankbasierte Web-Anwendungen Datenbank Schema

Werbung
DatenbankbasierteWeb-Anwendungen
DatenbankSchemaErstellungmit
StructuredQueryLanguage(SQL)
MedieninformatikSoSe2017
RenzoKottmann
ThisworkislicensedunderaCreativeCommonsAttribution-NonCommercial
4.0InternationalLicense.
Mini-Welt
Dawirwissenwaswirwollen,könnenwirfolgendeFragenbeantworten:
WelchenAusschnittderrealenWeltbrauchenwir?
WelcheAspektemüssenwirBerücksichtigen?
EntityRelationshipModellierung(ERM)
SemantischerDatenbankentwurf
unabhängigvonkonkretenDatenbank-spezifischen
Modellen
Graphisch
Ideesimpel
LeidersehrvieleinkonsistenteVarianten
Entity(Entität)
EinEntity-Relationship-Model(ERM)gehtvonEntitäten(~=
Objekten)aus.
"EineEntitätisteineeigenständigeEinheit,dieimRahmen
desbetrachtetenModellseindeutigidentifiziertwerden
kann."
EinEntitätstypwirddurchAttributegenauerbeschrieben
undstelltsomiteineabstrakteBeschreibungoder
CharakterisierungvonEntitätenda.
Beispiel:
Lehrer=Entitätstyp
Renzo~=Entität(einspeziellerLehrender)
Attribute
EigenschaftenvonEntitätenwerdendurchAttribute
beschrieben
AttributehabeneinenNamenundeineDomaine(=
BestimmungderWertmenge).
Keys(Schlüssel)
DadieDefinitioneinerEntitätbeinhaltet,dassdiesezumindestimRahmen
einesModellseindeutigidentifiziertwerdenkann,brauchtjederEntitätstyp
eineMengevonAttributenalsSchlüssel.
DieAuswahleinesodermehererAttributealsSchlüssellegtfest,dasseskeine
zweiEntitäteneinesEntitätstypgebenkanndieidentischeAttributwerte
haben.
WichtigeEigenchaften:
Eindeutigkeit
Zuteilbarkeit
Relationship(Beziehung)
VerschiedeneEntitätenkönnenzueinanderinBeziehunggesetztwerden.
InjederBeziehunghabenEntitätengewisseRollen
BeziehungenkönnenEigenschaften(Attribute)haben
BeziehungenhabenKardinalitäten
Notationen
EsgibtverschiedeneFormenERMzunotieren(textuellund/odergraphisch):
ChenNotation
CrowFoot's
UnifiedModellingLanguage(UML)
Notation
Entity
Attribute
Beziehungen/Relationship
VonERMzurerstenImplementation
StructuredQueryLanguage(SQL)
SQListeineDatenbanksprache
1. zurDefinitionvonDatenstrukturen/Modellen
2. zumBearbeiten(Einfügen,Verändern,Löschen)
3. zumAbfragenvondaraufbasierendenDatenbeständen
4. zurRechtevergabe
SQLEigenschaften
basiertaufrelationalerAlgebra
anEnglishangelehnt
Deklarativundfunktional
FastalleDatenbankenverstehenSQL
Standardisiert
PostgreSQLhateinerderbestenUmsetzungen
SQLÜberblick
DDL=DataDefintion
Language:
DefinitiondesDatenbankschemas
DML=DataManipluation
Language:
Ändern,Einfügen,LöschenundlesenderZugriff
DRL=DataRetrievel
Language
NichtstandadisierteBezeichnungdesSELECTaus
DML
DCL=DataControl
Language:
RechteverwaltungundTransaktionskontrolle
SQLinPostgreSQL
ScheinbarvieleSQLKommandos
SehrguterÜberblickinderPostgreSQLDokumentation
DiemeistensindDDLKommandos
CREATE,DROPoderALTER
JeweilseinEintragproDatenbank-Objekt
FolgendemselbenSyntaxSchema
DatenbankAnlegen
CREATEDATABASE
Dokumentation
PraktischeAnmerkungen
psql
Kommandozeile=CommandLineInterface(CLI)
PgAdminIIIoder4
GraphischeOberfläche=GraphicalUserInterface(GUI)
DDL:CreateTable
CREATETABLEteilnehmer(
--SpaltennameDatentyp,
vornametext,
nachnametext,
matrikel_nrinteger,
emailtext,
semesterinteger
);
s.DDL-BasicsundCREATETABLE
Integritätsbedingungen
"IntegritätsbedingungenbeschreibenAnnahmen,dieüberdieDaten
getroffenwerden,beispielsweiseeinbestimmterDatentyp,ein
WertebereichodereineAbhängigkeitsbeziehungzwischenzwei
Objekten."
ZiatatWikipedia:Integritätsbedingung
Constraints
MitConstraints(deutsch„Einschränkung“)werdenindiversen
ProgrammiersprachenBedingungendefiniert,diezwingendvom
WerteinerVariablenerfülltwerdenmüssen,damitderWertins
Systemübernommenwerdenkann.InDatenbanksystemenfinden
ConstraintsregeAnwendungumdenWertebereich(Domain)von
AttributeneinzuschränkenundWerteaufderenZulässigkeitzu
überprüfen.
modifiziertvonWikipedia:Constraint
DatentypensindersteConstraints
PostgreSQLstelltviele
DatentypenzurVerfügung
AucheigeneDatentypen
könnendefiniertwerden
VerwendeDatentypenso
striktwiemöglich
CREATETABLEteilnehmer(
--SpaltennameDatentyp,
vornametext,
nachnametext,
matrikel_nrintegerPRIMARYKEY,
emailtext,
semesterinteger
);
WeitereContraintsfürDatenintegrität
PrimaryKeys
NULLorNOTNULLConstraints
DEFAULTVALUES
CHECKConstraints
UniqueConstraint
PrimaryKeys
DieEindeutigkeitjedes
Eintragswirddurchden
PRIMARYKEYAusdruck
sichergestellt
CREATETABLEteilnehmer(
--SpaltennameDatentyp,
vornametext,
nachnametext,
--SimplerPrimaryKey
matrikel_nrintegerPRIMARYKEY,
emailtext,
semesterinteger
);
NULLorNOTNULLConstraints
ImplizitistjedesAttribut
einerTabelleNULL
d.h.kannleersein
NichtbeiPRIMARYKEYS
oderSchlüsselwortNOTNULL
CREATETABLEteilnehmer(
--SpaltennameDatentyp,
vornametext,
nachnametext,
--SimplerPrimaryKey
matrikel_nrintegerPRIMARYKEY,
emailtextNOTNULL,
semesterinteger
);
DieVerwendungvon`NOTNULL`
implementierthierdieAnforderung:
"ZujedemTeilnehmermusses
eineE-mailgeben."
FürwelcheAttributeistNOTNULLnoch
sinnvoll?
DML:DatenEinfügen
INSERTINTOteilnehmer
(vorname,nachname,matrikel_nr,email,semester)
VALUES
('renzo','kottmann',007,'[email protected]',100);
s.INSERTDokumentationundKomanndoReferenz
WeitereMassnahmenzurGestaltungder
Datenintegrität
DEFAULTVALUES
CHECKConstraints
UniqueConstraint
DefaultValuesConstraint
FürjedesAttributkannman
einenStandard-Wert
festlegen
derStandwertwirddann
eingetragen,wenn
keinWertangegeben
wurde
oderexplizitaufDEFAULT
gesetztwurde
CREATETABLEteilnehmer(
--SpaltennameDatentyp,
vornametext,
nachnametext,
--SimplerPrimaryKey
matrikel_nrintegerPRIMARYKEY,
emailtextNOTNULL,
semesterintegerDEFAULT4
);
DieVerwendungvon`DEFAULT`
implementierthierdieAnforderung:
"BeijedemTeilnehmeristdasStandardSemester4."
DefaultValuesConstraint
INSERTINTOteilnehmer(vorname,nachname,matrikel_nr,email)
VALUES('renzo','kottmann',007,'[email protected]');
führtzueinemEintragmit:
vorname nachname matrikel_nr email
renzo
kottmann 7
semester
[email protected] 4
CheckConstraint
EinWertineinoder
mehrerenSpaltenmuss
einerboolschenFunktion
entsprechen
esmussTRUEergeben
CREATETABLEteilnehmer(
--SpaltennameDatentyp,
vornametextCHECK(vorname!=''),
nachnametext,
--SimplerPrimaryKey
matrikel_nrintegerPRIMARYKEY,
emailtextNOTNULLCHECK(email~'.*@.*'),
semesterintegerDEFAULT4
);
UniqueConstraint
AlleWerteeiner-oder
mehererSpalte(n)müssen
eindeutigsein
Damitwerdenweitere
Schlüsselimplementiert
CREATETABLEteilnehmer(
--SpaltennameDatentyp,
vornametextCHECK(vorname!=''),
nachnametext,
--SimplerPrimaryKey
matrikel_nrintegerPRIMARYKEY,
emailtextNOTNULLCHECK(email~'.*@.*')UNIQUE
semesterintegerDEFAULT4
);
JederTeilnehmermusseineandereE-Mailhaben.
Logischgesehen:PrimaryKeyvs.Unique
EinPRIMARYKEYistnichts
anderesalseinUNIQUENOT
NULL
D.h.eskannmehrere
Schlüsselgeben,abernur
einerwirdalsPRIMARYKEY
gewählt
CREATETABLEteilnehmer(
--SpaltennameDatentyp,
vornametextCHECK(vorname!=''),
nachnametext,
--SimplerPrimaryKey
matrikel_nrintegerPRIMARYKEY,
emailtextNOTNULLCHECK(email~'.*@.*')UNIQUE
semesterintegerDEFAULT4
);
JederTeilnehmermusseineandereE-Mailhaben.
SQLKommando:CREATEDOMAIN
DefinitionvoneigenenDatentypenbasierendof
existierenden
CREATEDOMAINperson_nameAStextCHECK(
VALUE~'^[A-Z][a-z]*'
);
CREATETABLEteilnehmer(
--SpaltennameDatentyp,
vornameperson_nameCHECK(vorname!=''),
nachnameperson_name,
--SimplerPrimaryKey
matrikel_nrintegerPRIMARYKEY,
emailtextNOTNULLCHECK(email~'.*@.*')UNIQUE,
semesterintegerDEFAULT4
);
WeiterführendeFragen:
1. WieändertsichdasERMunddieimplementierungwenn
folgendeAnfordernghinzukommt:
DieDatenbanksollfürallevergangenenundzukünftigen
Datenbankkurseinformationenspeichernkönnen
DankefürdieZusammenarbeit
Herunterladen