WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   DB Design: Frage (http://www.wcm.at/forum/showthread.php?t=170287)

Juro 20.07.2005 20:41

DB Design: Frage
 
HI,
Ich designe gerade eine kleine Datenbank und komme einfach nicht weiter bei einem Problem.

Abzubilden ist folgende Struktur:

Tabelle 1
player mit folgenden Feldern:
play_id
play_name
play_cname

Tabelle 2
team mit folgenden Feldern:
team_id
team_player1
team_player2

Die Felder team_player1 und team_player2 sind foreign keys, d.h. zwei verschiedene (!) play_ids. Zum designen verwende ich den DBDesigner, nur leider macht der nicht das was ich will. Die Datenbankstruktur habe ich beigefügt.

Leider erstellt der DBDesigner nur einen foreign key, aber ich brauche ja zwei und zwar für jeden Spieler einen.

Irgendwelche Ideen?

lg
juro

hewlett 21.07.2005 10:17

und wo ist da dann das problem?

ich würds sowieso anders machen:

Eine dritte Tabelle (TeamPlayer oder so) in der die play_id und team_id gespeichert ist, und im der team table team_player1 und team_player2 rausnehmen, so kannst du dann beliebig viele Spieler einem Team zuordnen.

Code:

[player]
play_id | name | cname
1          x      y
2          c      d
3          d      e
4          r      j
5          s      a

[team]
team_id | name
1        abc
2        efg
3        hij

[teamplayer]
id | team_id_fk | play_id_fk
1        1            1
2        1            2
3        1            3
4        1            5
5        2            4

So würd ichs machen!

Juro 21.07.2005 14:05

Danke für Deinen Vorschlag, es ist aber nicht Sinn und Zweck. Es darf nur zwei Spieler pro Mannschaft geben.

Das große Problem ist, daß die sql CREATE-scripts so ausschauen:

CREATE TABLE player (
player_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
player_name TEXT NULL,
PRIMARY KEY(player_id)
);

CREATE TABLE team (
team_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
player_id INTEGER UNSIGNED NOT NULL,
PRIMARY KEY(team_id, player_id),
INDEX team_FKIndex1(player_id),
INDEX team_FKIndex2(player_id)
);

und da fehlt offensichtlich die 2. player_id in der team Tabelle.

T.dot 21.07.2005 14:46

Alles nur soweit ich weiß:

Du kannst rein SQL technisch keine Verknüpfung von einer Tabelle zu zwei verschienden Zeilen der gleichen Tabelle mache, das funktioniert rein logisch nicht.

Du bräuchtest hier theoretisch eine "virtuelle Tabelle", die eigentlich eine Kopie der Player Tabelle ist - dann könntest du schön einfach deine Beziehungen ziehen. Ist nur nicht ganz sinnvoll.

Wenn du nun keine Zwischentabelle haben willst (die ich verwenden würd, auch wenn ein Team nur zwei Spieler hat), so musst du wohl auf eine der beiden Relationen zwischen Team und Spieler verzichten.

Zusätzlich wird es noch auf den SQL-Dialekt ankommen ob das irgendwie anders realisierbar wäre.

Alles nur meine Erfahrungen, kann sein, dass das in anderen SQL-Dialekten auch funktioniert - aber anscheinend mag dein DB-Desinger das ganze genau so wenig wie ich.

mfg Thomas

snowman 21.07.2005 19:23

Kann ein Spieler Mitglied in mehreren Teams sein? Wenn nicht, ist es ein klassisches 1:n Entitiy-Modell. (eigentlich ja nur 1:2)

player tabelle wie gehabt.

tabelle team:
team_id
player1
player2


player1 und player2 sind die play_id von der player-Tabelle.
Oder verstehe ich irgendetwas nicht?

gruss,
snowman

T.dot 21.07.2005 21:35

Sein Problem ist wohl, dass sein Programm zur Datenbankmodelierung dies nicht darstellen/erstellen kann.

hewlett 22.07.2005 12:31

Zitat:

Original geschrieben von T.dot
Sein Problem ist wohl, dass sein Programm zur Datenbankmodelierung dies nicht darstellen/erstellen kann.
Ich frag mich ja überhaupt warum ich für so ein triviales Problem überhaupt ein Programm zur Datenmodellierung brauche?

Juro 22.07.2005 20:54

Zitat:

Original geschrieben von hewlett
Ich frag mich ja überhaupt warum ich für so ein triviales Problem überhaupt ein Programm zur Datenmodellierung brauche?
Gar nicht, ist das Problem aber nur ein teilproblem, weil die Aufgabenstellung an der Datenbank komplexer ist, ist es immer besser von vornhinein ordentlich zu planen und dazu auch Tools einzusetzen. Gerade dbDesigner ist hier interessant, da es reverse engineering beherrscht und man mögliche Änderungen im ERD durchaus auch automatisch in der DB vornehmen lassen kann.

So ist die Dokumentation des Datenbankmodells um einiges einfacher und das Einarbeiten von Fremdresourcen gestaltet sich um einiges effizienter.


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag