Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Datenbankaufbau, wie mach ichs am besten

Frage Entwicklung Datenbanken

Mitglied: 64247

64247 (Level 1)

23.08.2008, aktualisiert 29.08.2008, 5625 Aufrufe, 8 Kommentare

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?
Mitglied: Alforno
23.08.2008 um 19:52 Uhr
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.

Mit freundlichen Grüßen
Alforno
Bitte warten ..
Mitglied: filippg
23.08.2008 um 20:04 Uhr
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
Bitte warten ..
Mitglied: 64247
28.08.2008 um 12:10 Uhr
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?
Bitte warten ..
Mitglied: Alforno
28.08.2008 um 12:28 Uhr
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?

Mit freundlichen Grüßen
Alforno
Bitte warten ..
Mitglied: 64247
28.08.2008 um 15:49 Uhr
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...
Bitte warten ..
Mitglied: Alforno
28.08.2008 um 16:04 Uhr
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".

Mit freundlichen Grüßen
Alforno
Bitte warten ..
Mitglied: filippg
28.08.2008 um 19:21 Uhr
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
Bitte warten ..
Mitglied: 64247
29.08.2008 um 10:14 Uhr
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!
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Sicherheits-Tools
gelöst Gutes einfach zu bedienendes VPN gesucht - am besten kostenlos (19)

Frage von power-user zum Thema Sicherheits-Tools ...

Viren und Trojaner
Ransomware-Krypto Trojaner, welcher Virenscanner erkennt am besten ? (22)

Frage von hansdampf zum Thema Viren und Trojaner ...

Windows Server
gelöst Wie am besten SQL Server 2012 lizenzieren? - Core oder CALs? (18)

Frage von Himpke zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...