Datenbank Struktur

crashx

Erfahrenes Mitglied
Hallöe mal wieder.

Ich arbeite an einem kleinen Verwaltungssystem für unsere Garage.
Nun begebe ich mich in den bereich des Auftrag, Rechnungswesen.
Da es nun pro Rechnung/Auftrag individuel viele Datenbankeinträge geben kann, weiss ich nicht genau wie ich die Datenbank Strukturieren soll (MySQL).

Eine Tabelle existiert schon, welche so ausschaut.

id | auftrag_nr | kdn_nr | fz_nr | date | status

Da wird der neue Auftrag reingeschrieben, sprich hier wird der auftrag eindeutig einem Kunden und seinem Fahrzeug zugewiesen.

Was ist nun besser, für jeden Auftrag/Rechnung eine eigene Tabelle zu nehmen oder eine Tabelle mit sehr vielen einträgen?

zb.

id | auftrag_nr | pos1 | einheit | text | preis

es geht mir nur um die performance der Datenbank, da pro jahr ca. 400 Aufträge/Rechnung mit durschnitlich 12 Positionen entstehen werden.

Danke schon im voraus für eure Tipp's und Anregungen :)
 
Hallo....

ganz klar: eine Tabelle, in der alle Aufträge erfasst werden!
Von der Performance her brauchst du dir in deinem Fall keine Sorgen machen...


MfG Gerrit
 
normalerweise würde man hier zu mehreren tabellen greifen

erst mal könntest du deine erste tabelle um eine spalte verkleinern
bei dir ist warscheinlich die id und die auftragsnummer immer UNIQUE, somit könntest du die id wegfallen lassen und die auftragsnummer als index nehmen

deine zweite tabelle würde ich dir empfehlen die auftragsnummer als fremdschlüssel zu nehmen, dazu die einzellnen positonen zu speichern sowie die anzal

als dritte tabelle würde ich eine list der positionen machen also text und deren preis

so hast du die tabellen recht gut in Normalfor und spätere veränderungen, anpassungen oder erweiterungen einfacher zu machen

wobei natürlich die lösung mit einer tabelle auch geht und bei der geringen anzahl an aufträgen und positionen wirst du keinen leistungsunterschied feststellen.
 
Zuletzt bearbeitet:
Ich muss meinem Vorredner widersprechen:
Die Antwort lautet eine Tabelle. Wenn du's ganz schön machen willst, dann lautet die Antwort 2 Tabellen.

Ich muss meinem Vorredner rechtgeben:
Die Antwort lautet eine Tabelle, wenn du die weiteren Informationen aufteilst.

Aber das entnehme ich deinem Posting, dass du das eh schon so machst.
Auch, dass du nur Id's in der Tabelle speicherst, spricht dafür und ist absolut gut so.

Aber für jeden Auftrag eigene Tabellen anzulegen ist vollkommen überzogen.

Was du allerdings sinnvollerweise tatsächlich machen könntest, ist eine Tabelle Aufträge (so wie von dir vorgeschlagen) und eine Tabelle Auftragspositionen, die dann auf die Aufträge referenziert.
 
Ich habe meine Tabellen nun so strukturiert:

Übersichts tabelle mit Relevanten daten bzw. um die einträge aus der nächsten tabelle auszulesen:

Code:
CREATE TABLE IF NOT EXISTS `auftrag` (
  `id` int(5) NOT NULL auto_increment,
  `auftrag_nr` varchar(20) NOT NULL,
  `kdn_nr` varchar(20) NOT NULL,
  `fz_nr` varchar(20) NOT NULL,
  `date` int(100) NOT NULL,
  `status` varchar(200) NOT NULL,
  PRIMARY KEY  (`id`)
)

Diese tabelle dient zum eintragen der jeweiligen Auftrags/rechnungs Positionen.

Code:
CREATE TABLE IF NOT EXISTS `auftrag_pos` (
  `id` int(10) NOT NULL auto_increment,
  `auftrag_nr` varchar(100) NOT NULL,
  `titel` varchar(200) NOT NULL,
  `text` longtext NOT NULL,
  `einheit` varchar(5) NOT NULL,
  `a` varchar(10) NOT NULL,
  `preis` int(10) NOT NULL,
  `status` varchar(100) NOT NULL,
  PRIMARY KEY  (`id`)
)
verbesserungs und änderungsvorschläge sind willkommen.
 
Das Feld date in deiner Tabelle auftrag, wieso benutzt du hier nicht den Typ Timestamp? Du willst doch sicher das Datum und die Zeit speichern.
Ich weiß nicht welche Werte status haben kann, aber ist es vieleicht auch möglich es als Booleanfeld zu nutzen?

Die Felder kdn_nr und fz_nr sollten doch Fremdschlüssel sein oder hast du nicht in einer anderen Tabelle Details zu dem Kunden und zu dem Fahrzeug?

Die Tabelle auftrags_pos ist mir noch zu unübersichtlich. Du speicherst da also welche Positionen deine Rechnung hat. Das würde ich in mindestens 2 Tabellen aufteilen. Eine enthält die Positionen deiner Rechnung und die Anzahl der jeweiligen Position. Die andere Tabelle enthält den Titel, den Text und den Preis zu den Positionen.
 
Zuletzt bearbeitet:
Zurück