Tabellendefinition in SQL


#1

Gegeben ist folgendes:

Videokassette = {KassName, Länge}, K={{FilmName}}
Film = {{FilmName, StartPos, EndPos, KassName, Thema}, K={{FilmName}}
...

Daraus mache ich jetzt folgende Tabellendefinitionen:

create table Videokassette(
   KassName char(30),
   Länge int,
   primary key(KassName))

create table Film(
   Filmname char(30),
   StartPos int,
   EndPos int,
   KassName char(30),
   Thema char(20)
   primary key(FilmName),
   foreign key(KassName) references Videokassette(KassName))

Ist das richtig das ich bei der Filmtabelle trotzdem noch KassName als Attribut aufnehmen muss? Kommt mir irgendwie falsch vor …


#2

mit deinem Tabellenaufbau schon
wenn du für die Kassetten eine ID festlegen würdest könntest du die nehmenstatt dem Namen


#3

mmmhhhh aber was würde passieren wenn ich dann in Zeile 10 z.B. einen ganz anderen Typ dafür festlegen würde?
Ist das nicht irgendwie unsinnig das doppelt aufzuführen?


#4

naja wie gesagt du könntest in deiner Tabelle Videokassette ein neues Attribut kassnr einführen was ein int und der primary key ist. Damit dein Name eindeutig ist könntest du das über PL/SQL (wenn es deine Datenbank unterstützt) oder einen Uniqe Key machen. Die 3. Möglichkeit wäre das über das Programm was die Datenbank benutzt muss sicherstellen das der Name eindeutig ist.
Und diese Nummer gibst du dann statt dem Namen an.

Wenn du nur den Typ ändern würdest wirst du einige Probleme bekommen weil dann irgendwas komisches aus den Daten gemacht wird bzw könnte die Datenbank das als Fehler melden und dir so verbieten die Tabelle zu erstellen.


#5

Ja das mit den IDs sehe ich ja ein, aber das sieht meine Aufgabenstellung nun mal nicht vor.

Aber dann weiß ich wenigstens das es so richtig ist. Dann kann die Klausur ja kommen :wink:

Danke :smiley:


#6

Noch eine Frage …

Stellen Sie durch eine Integritätsbedingung sicher, dass das Attribut AnzahlTage nur die Werte 1 bis 180 annehmen kann.

Hab ich jetzt mal so gelöst:


create table Reservierung(
   ...
   AnzahlTage int check value between 1 and 180,
   ...)

richtig oder falsch?


#7

hmmm
also wenn man mal davon ausgeht das dieses Konstrukt da richtig ist musst du klären ob BETWEEN x AND Y heißt >=1 und <=180 oder nur >1 und <180


#8

das hab ich:

attribut between konstante1 and konstante2

Abkürzung für

attribut ≥ konstante1 and attribut ≤ konstante2

die Frage ist mehr ob das mit dem check und value so geht


#9

achso ok
also für Firebird und/oder Oracle wäre es


ALTER TABLE Reservierung ADD anzahltage_check CHECK (AnzahlTage BETWEEN 1 AND 180)

wobei ich nicht 100%ig weiß ob da das BETWEEN zulässig ist


#10

hhhmmm ich gehe erstmal davon aus das es zulässig ist … bis mir ein Korrektor das Gegenteil beweist :wink:

Danke nochmal


#11

So langsam können wir uns überlegen was alles in die Datenbank mit reinsoll:

  • Name
  • Programmiersprache
  • Betriebssystem
  • API (Doku)
  • API (Doku) Link
  • Komplette Zip
  • Eigenes Packages
  • Nur Lib
  • Suchbegriffe
  • Beschreibung (mehrsprachig)
  • HP
  • Einsteller (Person die den Link eingetragen hat)
  • Version
  • Lizenztyp
  • Lizenz
  • Lizenzlink
  • offizieller Download
  • Bewertung
  • Abhängigkeiten

Vorschläge was dazu kommen sollte bzw. alles klar was ich gemeint hab?


#12

Was heißt ‘nur Lib’?


#13

halt nur die Bibliothek
z.B. bei JDom nur die jdom.jar
nicht das drum herum (API, ZIP,…)


#14

Eagle du als Debianer solltest das doch kennen :wink: mach mal ein apt-cache show ich finde mehr Infos sollten das nicht zwingend mehr rein.

Eine ausgabe von dem oben genannten Befehl könnte z.B so aussehen:

bullzeye@bullzeye-laptop:~$ apt-cache show gaim
Package: gaim
Priority: optional
Section: net
Installed-Size: 2148
Maintainer: Robert McQueen <robot101@debian.org>
Architecture: i386
Version: 1:1.5.0+1.5.1cvs20051015-1ubuntu10
Replaces: gaim-gnome, gaim-common
Provides: gaim-gnome
Depends: gaim-data (= 1:1.5.0+1.5.1cvs20051015-1ubuntu10), libao2 (>= 0.8.6), libaspell15 (>= 0.60), libatk1.0-0 (>= 1.9.0), libaudiofile0 (>= 0.2.3-4), libc6 (>= 2.3.4-1), libcairo2 (>= 1.0.2-2), libfontconfig1 (>= 2.3.0), libgcrypt11 (>= 1.2.2), libglib2.0-0 (>= 2.10.0), libgnutls12 (>= 1.2.5), libgtk2.0-0 (>= 2.8.0), libgtkspell0 (>= 2.0.2), libice6, liblaunchpad-integration0 (>= 0.0patch26), libpango1.0-0 (>= 1.12.2), libsm6, libstartup-notification0 (>= 0.8-1), libx11-6, libxcursor1 (>> 1.1.2), libxext6, libxfixes3, libxi6, libxinerama1, libxrandr2, libxrender1, libxss1
Suggests: gnome-panel (>= 2.1) | kicker (>= 3.1) | docker, evolution-data-server (>= 1.2.0), libzephyr3, tcl8.4 (>= 8.4.5), tk8.4 (>= 8.4.5)
Conflicts: gaim-gnome, gaim-common
Filename: pool/main/g/gaim/gaim_1.5.0+1.5.1cvs20051015-1ubuntu10_i386.deb
Size: 836434
MD5sum: 460d3391fe60a66ed8aa0fee7967ca30
Description: multi-protocol instant messaging client
 Gaim is a modular Instant Messaging client capable of using AIM, ICQ,
 Yahoo!, MSN, IRC, Jabber, Napster, Zephyr, and Gadu-Gadu all at once.
 It is written using GTK+ and is licensed under the GPL.
 .
 As the name suggests, it was originally designed for using AOL's
 Instant Messenger service (you can sign up at http://www.aim.aol.com/).
 Consequently it contains many of the same features as AOL's IM client,
 as well as incorporating many new and unique features, such as the
 multiple protocol support.
 .
 Gaim used to ship a gaim-gnome package which contained an applet for
 the GNOME 1.4 panel. This has been replaced in favor of a tray
 icon plugin, contained in this version. To see it in GNOME 2, use
 the Notification Area applet (included in gnome-panel versions 2.1 and
 later), or in KDE 3.1 it should appear in the Kicker's system tray.
 Users of other window managers should investigate docker, the WM dock
 app.
Bugs: mailto:ubuntu-users@lists.ubuntu.com
Origin: Ubuntu
Task: ubuntu-desktop, edubuntu-desktop, xubuntu-desktop


#15

ähh bullz?
übersetz das mal bitte :wink: “ich finde mehr Infos sollten das nicht zwingend mehr rein.”

Außerdem hat das hier mit Befehlen nichts zu tun sondern mit den Informationen die gespeichert werden :wink:


#16

Ja siehste doch was da für Infos drin stehen :stuck_out_tongue_winking_eye: Und das war auch nicht auf einen clienten bezogen sondern das was man an Infos speichern könnte :wink:


#17

hier ist mal der neuste Datenbankentwurf


#18

So nochmal eine komplett überarbeitet Datenbank
Illu du kannst ruhig auch sagen das ist ok das ist scheiße das muss mit rein :wink:


#19

Ich brauch in der Usertabelle noch (das sind großteils freiwillige Angaben fürs Profil):
[ul]
[li]Sessionid (varchar(32), muss NULL sein können)
[/li][li]Realname
[/li][li]Birthdate (oder so)
[/li][li]icquin
[/li][li]gender
[/li][li]membersince (date)
[/li][li]lastonline (date)
[/li][/ul]

Außerdem die erwähnte Tabelle für PNs. (PNid, Userid, Fromid, Title, Text oder so ähnlich)


#20

hier mal ein auf die schnelle gebautes Modell