![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: SQLite3Connection
DB-Modell für eine Software
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich möchte eine DB-Modell für eine Tagungssoftware erstellen, aber irgendwie habe ich keine Idee wie es weiter gehen soll. Die Anwendung soll Personen beinhalten und Tagungen bzw. Seminare die sie besuchen will. Folgendes habe ich schon gemacht, siehe Anhang... Nun weiß ich nicht wo ich die Infos packen soll, ob eine Person zur einer Tagung eingeladen wurde, und ob sie diese Einladung angenommen oder abgelehnt hat. Danke für eure Hilfe. |
AW: DB-Modell für eine Software
Die nächste Frage wäre doch die nach der Kardinalität zwischen "Person" und "Tagung", oder?
Verhält sich Person:Tagung wie 1:1, 1:n, m:n oder n:1? Soll heißen: Kann eine Person nur auf eine Tagung oder auf mehrere? Kann eine Tagung von mehreren Personen besucht werden? Kann eine Tagung auch existieren, ohne dass Personen sie besuchen? So als absoluter Datenbank-Depp |
AW: DB-Modell für eine Software
Zitat:
|
AW: DB-Modell für eine Software
Und bei einer Tagung sind normalerweise mehrere Personen anwesend.
|
AW: DB-Modell für eine Software
Zitat:
|
AW: DB-Modell für eine Software
Ist eine n:m Beziehung. Implementiert über eine Zuordungstabelle.
|
AW: DB-Modell für eine Software
Zitat:
Eine weitere VT könnte abbilden, wer auf den Tagungen auch wirklich anwesend war. Noch Fragen? Oh, sehe gerade: Was mkinzler mit Zuordnungstabelle meint, heißt bei mir Verknüpfungstabelle. Ist aber dieselbe Idee. |
AW: DB-Modell für eine Software
Liste der Anhänge anzeigen (Anzahl: 1)
Ok... etwa so, siehe Screenshot.
|
AW: DB-Modell für eine Software
Etwas Kritik am Rande: Wirst du (oder jemand anderes) in zwei Wochen noch wissen was ein "tbl_vt" ist?
|
AW: DB-Modell für eine Software
Nein von der Zwischentabelle zu den beiden Tabellen zwischen denen die n:m Beziehung besteht
A n: m B -> A n : 1 Zw 1 : m B Im ER-Modell kannst Du auf die Zuordnungstabelle aber auch verzichten |
AW: DB-Modell für eine Software
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: DB-Modell für eine Software
Zitat:
|
AW: DB-Modell für eine Software
Grundsätzlch ja, aber wozu benötigst du id_vtPerson und id_vtTagung?
|
AW: DB-Modell für eine Software
Zitat:
Oder meinst Du die FK in der Tabelle tbl_vt? |
AW: DB-Modell für eine Software
Imo sind die Felder in der Verknüpfungstablle doppelt vorhanden.
|
AW: DB-Modell für eine Software
Zitat:
|
AW: DB-Modell für eine Software
Ja, durch die Fremdschlüssel (fk_person_id, fk_tagungs_id)
|
AW: DB-Modell für eine Software
Zitat:
|
AW: DB-Modell für eine Software
Er hat die Fremdschlüssel gemeint.
Ein paar Fragen zu der Notation Deines ER-Diagramms: Sind die FK_... Felder oder nur die constraints? Im 2. Fall wären id i_... dann notwendig, dann würden diese aber bei Anrede fehlen. |
AW: DB-Modell für eine Software
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Das sind Felder, Constraints kenne ich nicht, zumindest nicht bewusst. |
AW: DB-Modell für eine Software
Ein Constraint definiert eine logische Regel, die hier in Deinem Fall die Fremdschlüsselbeziehung definiert (foreign key constraint)
Physikalisch reichen auch Deine "Felder", sie ermöglichen technisch die Verknüpfung, aber keine Prüfung durch den Server. |
AW: DB-Modell für eine Software
Zitat:
|
AW: DB-Modell für eine Software
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
|
AW: DB-Modell für eine Software
Zitat:
|
AW: DB-Modell für eine Software
Zitat:
Also wenn Du einen Foreign Key Constraint definierst, prüft der Server die Eingabewerte und erzeugt einen Fehler, wenn Werte eingetragen werden, die die Regel verletzen. Das ist das Wesen (ein Teil)von relationalen Datenbanken. Der Server garantiert die Einhaltung bestimmter Regeln. Deshalb kann man am Ende auf solchen Teilen eine Kontoverwaltung oder so machen und nachts trotzdem ruhig schlafen. |
AW: DB-Modell für eine Software
Zitat:
|
AW: DB-Modell für eine Software
Zitat:
|
AW: DB-Modell für eine Software
Auf dieses Feld kannst Du eigentlich auch verzichten und die beiden anderen Felder als zusammengesetzten Primärschlüssel definieren, dann kann sich niemand mehrmals für sie selbe Veranstaltung anmelden.
|
AW: DB-Modell für eine Software
Zitat:
|
AW: DB-Modell für eine Software
SQL-Code:
CREATE TABLE TagungsTeilnehmer(
Person Integer, Tagung Integer, PRIMARY KEY( Person, Tagung), FOREIGN KEY( Person) REFERENCES Person ( id_person), FOREIGN KEY( Tagung) REFERENCES Tagung (id_tagung)); |
AW: DB-Modell für eine Software
Zitat:
Ach, ich sehe eben, mkinzler hat das bereits als SQL hingeschrieben, so geht's natürlich auch. :thumb: |
AW: DB-Modell für eine Software
Da es keine Tabelle 'Teilnehmer' gibt, tendiere ich bei existierender Tabelle 'Personen' zur Nomenklatur 'TagungsPersonen' bzw. in diesem Fall eher zur Umbenennung der Tabelle 'Personen' in 'Teilnehmer'.
Es erhöht imho die Übersichtlichkeit, wenn keine neuen Bezeichner eingeführt werden. Die Regel wird genau dann gebrochen, wenn die entstehenden Bezeichnungen allzu albern werden. Dann gilt: Hauptsache, man versteht es. |
AW: DB-Modell für eine Software
Zitat:
Delphi-Quellcode:
Wenn aber der PK aus zwei Integer besteht? :gruebel:
x := 7;
SELECT ... FROM ... WHERE id=x; |
AW: DB-Modell für eine Software
Es sind ja auch 2 Felder
SQL-Code:
select ... from ... where person = 7 and tagung = 8;
|
AW: DB-Modell für eine Software
Das wird man aber selten brauchen. Man will eher wissen, wer alles auf einer Tagung war ('select personID from TagungsTeilnehmer where TagungsID=123') oder welche Tagungen eine Person besucht hat. Die Abfrage mit PersonID und TagungsID ist eher ein 'Hat diese Person die Tagung besucht?'
Du kannst in einer WHERE-Klausel unterbringen, was Du willst:
Code:
Zeigt die Tabelle nur nach dem 12.1.2015 an
select * from MeineTabelle WHERE CURRENT_DATE()> '12.01.2015'
und
Code:
zeigt nur die Überschriften.
select * from MeineTabelle WHERE 1=0
|
AW: DB-Modell für eine Software
Zitat:
|
AW: DB-Modell für eine Software
Zitat:
|
AW: DB-Modell für eine Software
In einer Relation? Kann man machen. Geht aber sehr schnell in Richtung => Verletzung 3NF.
|
AW: DB-Modell für eine Software
Warum nicht?
SQL-Code:
CREATE TABLE TagungsTeilnehmer(
Person Integer, Tagung Integer, BuchungsDatum DATE, bezahlt Integer, teilnehmerNr Integer, teilgenommen Integer, ... PRIMARY KEY( Person, Tagung), FOREIGN KEY( Person) REFERENCES Person ( id_person), FOREIGN KEY( Tagung) REFERENCES Tagung (id_tagung)); |
AW: DB-Modell für eine Software
Kann man zusammenfassen, sollte man aber nicht (wegen der Flexibilität). Ich persönlich würde es nicht machen, da die 3NF verletzt ist. Eine Person nimmt an einer Tagung teil, die sie zuvor gebucht hat (3 Tabellen: Personen, Buchungen, Tagungen und entsprechende Relationen).
Ich kann so einer Person ermöglichen an einer Tagung teilzunehmen, ohne das sie gebucht hat. Das soll es geben. Bei deinem Ansatz müsste dann z.B. 'Buchungsdatum = NULL' sein und für die anderen Flags müsste man auch tristate logic einführen => Anti-Pattern. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz