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