FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Praktische Informatik (HS)

DIS: Relationsalgebra 1:10 Beziehung ?

DIS: Relationsalgebra 1:10 Beziehung ? 2007-09-28 15:00
Farcon
Ich pauke gerade das Relationale Modell und bin da auf eine Klausuraufgabe aus einem anderen Fach gestoßen. Geht um einen Buchhandel, und jedes Buch hat neben der ISBN bis zu 10 Schlagworte. Eigentlich ja eine klassische n:m Beziehung:

Buch(ISBN)
Schlagwort(Wort)
gehoertZu(ISBN,Wort)

Aber da kann man nicht begrenzen, dass das Buch nur 10 und nicht mehr Schlagwörter haben soll. Gibt es da einen Trick ?

RE: DIS: Relationsalgebra 1:10 Beziehung ? 2007-09-29 15:22
Anonymer User
Hi Farcon,

ich weiss nicht ob ich die frage richtig verstanden habe, aber mir würde folgender Trick einfallen um eine reduktion auf 10 schlagworte zu gewährleisten:

tabellen:
Buch(ISBN,Author…) (primary key ISBN)

Schlagwortindex(indexNummer) (primary key indexNummer)

Schlagwort(ISBN, indexNummer, wort) (primary key (ISBN, indexNummer),
foreign key ISBN von Buch, foreign key indexNummer von Schlagwortindex)

Wenn du nun in die Tabelle Schlagwortindex 10 einträge a 1,…10 setzt und sicherstellst, dass weder insert noch delete oder update rechte auf dieser tabelle vergeben werden, dann würden maximal 10 indexeinträge pro buch möglich sein.

Ein besserer Trick fällt mir grad nicht ein.

beste grüße,

Bigbfd

RE: DIS: Relationsalgebra 1:10 Beziehung ? 2007-09-30 14:15
Farcon
Danke für deinen Vorschlag.

RE: DIS: Relationsalgebra 1:10 Beziehung ? 2007-10-05 11:15
NaZo
Könnte man nicht auch einen Constraint mit der count()-Funktion basteln?

Bei einer übersichtlichen Zahl wie 10, könnte man aber natürlich auch einfach entsprechend viele Stichwort-Spalten anlegen.

RE: DIS: Relationsalgebra 1:10 Beziehung ? 2007-10-06 16:15
Anonymer User
Group functions sind in check anweisungen nicht erlaubt, soweit ich weiss. Das hat glaube ich performanz hintergründe. Bei 10 Einträgen ist das ja noch ok, aber ein Beispiel:

Wenn ein constraint in einer tabelle vorhanden ist, der angibt, dass die summe aller einträge (sum als group function) nie grüßer sein darf als ein bestimmter betrag ist das bei sich oft verändernden tabellen mit vielen einträgen (1000+) schweißtreibend.

Aber ja, man kann sicherlich 10 schlagwort columns in der tabelle anlegen; was den negativen nebeneffekt hat, dass eine erweiterung der buch schlagwort-einträge eine strukturelle veränderung nach sich zöge, was dringend vermieden werden sollte.

greetings,

bigbfd

RE: DIS: Relationsalgebra 1:10 Beziehung ? 2007-10-06 17:50
NaZo
Ich hatte an sowas gedacht:

buch (isbn, author…) (primary key ISBN)
schlagworte (isbn, wort) (primary key ISBN, foreign key ISBN von Buch)

CREATE ASSERTION max_schlagworte
CHECK NOT EXISTS
( SELECT isbn FROM schlagworte
GROUP BY isbn
HAVING COUNT(wort) > 10 );

Das ist durchaus möglich, glaube ich. Wie performant das allerdings ist, weiß ich nicht. Kommt sicherlich darauf an, wie gut ein DBS so eine ständig auftretende Überprüfung optimiert.

Viele Grüße nach Schweden… [28]

RE: DIS: Relationsalgebra 1:10 Beziehung ? 2007-10-27 15:46
Anonymer User
Ein Trigger auf ein "before insert" wäre auch möglich, dann könnnte man vor dem insert prüfen ob > 10 und den letzten Eintrag löschen