64247
Goto Top

Datenbankaufbau, wie mach ichs am besten

Hallo,

ich schreibe zur Zeit ein kleines Programm mit welchem ich den Bestand meiner ganzen Elektronischen Bauteile verwalten kann. Es ist mir dank einer relativ großen Menge an (verschiedener) Bauteile schon oft passiert, dass ich einfach mal ein Bauteil übersehen hatte und es so nicht bestellt oder doppelt und dreifach rumliegen hatte bzw. einfach nicht mehr wusste, welches Teil für welches Projekt eingeplant war und so blöder Verwechslungen vorkamen... Daher wird auch ein Menüpunkt eingebaut, in welchem man dann seine Projekte verwalten kann. Hier sollen dann auch die benötigten Teile für jeden Projekt aufgeführt werden.

Das ganze soll PHP basiert sein und eben im Browser laufen, somit ist es einerseits auf allen Betriebssystemen lauffähig anderseits könnte man es so auch Online irgendwo ablegen. Aber jetzt zu meinem Hauptproblem, wie viele Tabellen für welche Werte brauch ich:

Auf jeden Fall habe ich eine Tabelle "artikel" angedacht, in der alle Artikelnummern, kurze Artikelbeschreibung und der vorhandener Bestand aufgelistet werden. Soweit sogut...

Aber wie kann ich das mit der Projektübersicht realisieren? Das einfachste wäre ich könnte das mit in der artikel Tabelle in ein zusätzliches Feld reinmachen, was aber wohl nicht gehen wir, da ein Teil auch in mehreren Projekten verwendet wird. Somit müsste ich mir erst mal überlegen wie ich die in das eine Feld reibekomme und auch wieder auslesen kann.

Die andere Möglichkeit, die mir eher zugesagt hat, wäre für jedes Projekt eine neue Tabelle zu machen in der dann wieder die Artikelnummer und die benötigte Menge enthalten ist. Den Rest könnte man dann ja aus der Verknüpfung der beiden Tabellen erzeugen.

Oder welche Ideen hättet ihr noch wie man das ganze aufbauen könnte?

Content-Key: 95176

Url: https://administrator.de/contentid/95176

Printed on: April 24, 2024 at 22:04 o'clock

Member: Alforno
Alforno Aug 23, 2008 at 17:52:56 (UTC)
Goto Top
Hallo foobar2000,

ich denke ich würde es so angehen:

In der Tabelle Projekte wird für jedes Projekt ein Datensatz angelegt. In der Tabelle Proj_Pos werden die einzelnen Artikel eines Projektes eingetragen, natürlich als Verweis auf die Tabelle Artikel.
Die Tabelle Proj_Pos wird über das Feld Projekt_nr mit der Tabelle Projekte verbunden.
Ich denke dies gibt dir mehr Flexibilität, falls du Erweiterungen planst.
Es wird dann eben nicht mehr für jedes Projekt eine eigene Tabelle erstellt.

In der Tabelle Proj_Pos könntest du noch andere Parameter einfließen lassen, die dann von den anderen Tabellen unabhängig sind. Felder wie Rabatte, Garantie usw.

Hoffe das hilft.

mfg
Alforno
Member: filippg
filippg Aug 23, 2008 at 18:04:37 (UTC)
Goto Top
Hallo,

dein "Problem" ist ein sehr übliches und wird in jedem Grundlagen-Artikel/Kurs/Buch zu SQL durchdiskutiert. Da heißen nur die Projekte nicht "Projekte" sondern "Bestellungen" - ansonsten ist es genau das gleiche. Es gibt Artikel, die haben einen Bestand, es gibt Bestellungen (Projekte), die setzen sich aus mehreren Artikeln zusammen.
Die Lösung hat Aforno ja schon beschrieben. So ist das von der DB-Modellierung her auch sauber. Schonmal was von Normalformen gehört? Wenn nein: Schaue dir http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/index.htm an (und wenn ja: schau's dir trotzdem an), da hat man nach 20 Minuten eine sehr konkrete Ahnung von Datenbanken bzw. Relationenalgebra (und ausgerechnet da kommt das Beispiel mit den Bestellungen nicht vor).

Gruß

Filipp
Mitglied: 64247
64247 Aug 28, 2008 at 10:10:23 (UTC)
Goto Top
Ok, nach etwas überlegen denke ich, dass die folgende Version das sinnvollste ist:

Tabelle Artikel mit Artikelnummer (Primärschlüssel, da die Artikelnummer einmalig ist), Beschreibung und Bestand. Hier sind alle Artikel drin

Tabelle Projekte mit Projektnummer (Primärchlüssel), Beschreibung, Aufwand und Erledigt-Flag. Hier sind alle Projekte drin (Projektübersicht)

für jedes Projekt eine eigene (Zwischen)Tabelle, in der dann einmal die Projektnummer der Tabelle Projekte und alle benötigten Artikel verknüpft sind. Zusätzlich eine Spalte mit der Anzahl der für dieses Projekt benötigten Bauteile.

Nur ist meine Schulzeit in der wir so was gemacht haben schon etwas zurück und google wollte mir einfach nicht sagen, wie ich eine Zwischentabelle anlegen kann.

Wer ne Idee wie das ging? Oder geht das insgesammt nicht, wie ich mir das vorstelle?
Member: Alforno
Alforno Aug 28, 2008 at 10:28:50 (UTC)
Goto Top
Hallo foobar2000,

mir ist nicht klar, was eine Zwischentabelle sein soll.

Wie gesagt ich würde nicht für jedes Projekt eine eigene Tabelle erstellen, das wird auf Dauer undurchsichtigt und bei Programmerweiterungen ist der Aufwand größer.

Was hält dich denn davon ab, es so zu lösen, wie filippg und ich es Dir vorgeschlagen haben?

Ich selber kann kein PHP, denke aber das dein Szenario in jedem halbwegs brauchbaren Tutorial beschrieben ist. Schonmal im Netz nach einem passenden Tutorial gesucht?

mfg
Alforno
Mitglied: 64247
64247 Aug 28, 2008 at 13:49:49 (UTC)
Goto Top
Ich weiß ja noch nicht mal wie ich es so hinbekomme wie ich will. Wenn ich das so aufbaue wie filippg vorgeschlagen habe, dann hab ich eine Tabelle Artikel (da sind alle Artikel drin) und eine Bestellungen (Projekte). Aber wie kann ich dann konkret 20 Artikel mit einem Projekt verknüpfen? Ich kann ja nicht in der Tabelle Bestellungen (Projekt) tausend Reihen machen wobei jede für einen Artikel steht. Und alle benötigten Artikel hintereinander als einen Wert schreiben fällt auch flach, da ich das ja wieder trennen müsste...

Wenn ich das richtig verstanden habe brauch ich 3 Tabellen: Artikel, Projekte und ArtikelFuerProjekte (Zwischentabelle). Die Tabellen sollen dann das enthalten, wobei es von der dritten für jedes Projekt eine eigene Tabelle geben müsste.

http://pic.leech.it/images/3c42bild3.png
http://pic.leech.it/images/4962dbild2.png
http://pic.leech.it/images/a3204dbild1.png

Anders fällt mir jetz einfach keine anderen Möglichkeit mehr ein, bin eh schon total verwirrt...
Member: Alforno
Alforno Aug 28, 2008 at 14:04:29 (UTC)
Goto Top
Aber wie kann ich dann konkret 20 Artikel mit
einem Projekt verknüpfen? Ich kann ja nicht in der Tabelle
Bestellungen (Projekt) tausend Reihen machen wobei jede für einen
Artikel steht.

Was spricht dagegen?

Zweite Frage: Was verstehst du unter Reihen?
Meinst du damit Zeilen? Also Datensätze?

In deiner "Zwischentabelle" gibt es dann für ein Projekt mehrere Datensätze, für jeden Artikel, der dem Projekt zugeordnet ist, Einen.

Wenn du 5 Projekte hast und in jedem Projekt sind 10 Artikel eingetragen, dann ergibt das 50 Einträge in deiner "Zwischentabelle".

mfg
Alforno
Member: filippg
filippg Aug 28, 2008 at 17:21:19 (UTC)
Goto Top
Hallo foobar,

du brauchst genau drei Tabellen, unabhängig davon, wie viele Projekte du hast.
1. Die von dir beschriebene "Artikel"-Tabelle (Artikel_ID [Prim], Beschreibung, Vorratsmenge, ...)
2. Die von dir beschriebene "Projekte"-Tabelle (Projekt_ID [Prim], Beschreibung, Dauer...)
3. Artikel-Projekt-Relationship-Tabelle.
Diese besitzt 3 Spalten: Projekt_ID, Artikel_ID, Menge. Dabei bilden Projekt_ID und Artikel_ID zusammen den Primärschlüssel.

Gruß

Filipp
Mitglied: 64247
64247 Aug 29, 2008 at 08:14:13 (UTC)
Goto Top
Ja, aber wie setzt ich das als SQL Befehl um? Also muss ich dann für jedes Projekt eine solche Relationship-Tabelle (Zwischentabelle) erstellen? Quasi so, nur dass ich den Projektnamen noch anpassen muss (statt Projekt1 z.B. die Projekt_ID der Tabelle Projekte)

CREATE TABLE Projekt1 {
Projekt_ID int NOT NULL, Artikel_ID NOT NULL, PRIMARY KEY (Projekt_ID,Artikel_ID)
}

EDIT: Ich stand mal wie immer auf der Leitung! Natürlich brauch ich nicht für jedes Projekt eine eigenen Tabelle, da das alles in dieser Zwischentabelle reinkommt! Danke für die Gedult!