Realisierung einer DB in Combi mit Java

Javandroid

Mitglied
Hallo zusammen,

das mit den Datenbanke ist doch nicht so einfach wie so manch einer denkt :).

Ich bitte euch um Rat, bin neu auf diesem Gebiet.

Mein Vorhaben:

Ich möchte mit Java ein Programm schreiben aus dem Ich - zu jedem Kunde- folgende Daten bzw. 3 MySQL DB's erhalten werde:

DATABASE Customers: (soll letztlich alle Kunden beinhalten)

MySQL DB 1:
LoginTable:
ID, LoginName, Passwort (Für den Login)
.....

MySQL DB 2:
KundeTable:
ID, KundenNummer, AnmeldeDatum, Anschrift
.....
MySQL DB 3:
WarenkorbTable:
ID, Produkt 1, Produkt 2
.....

Ein Kunde und nur der Kunde kann die Daten editieren, 2 weitere Personen können die Daten einsehen, jedoch nur lesend.

Meine Fragen:

Ist so etwas möglich und ein guter Weg die DB's in eine "globale" DB zuschreiben?

Muss jeder Kunde in allen drei DB's die gleiche ID bekommen, damit Ich mir später alle Infos zum jeweiligen Kunden zusammen fügen kann?

Wie kann man es realisieren, dass bei Änderung einer Eingabe bspw. der Anschrift alle Auslesenden über die Änderung informiert werden. Wie wird so etwas angetriggert, setzt man ein Flag?

Wie kann Ich in einer Datenbank oder in einem Java-Code festlegen wer die Daten von welchem Kunden auslesen darf (es sind ja alle Kunden in einer DB)?

Ich hoffe man kann meine Fragen verstehen und hoffe jemand kann mir helfen bzw. Tipps zum Vorgehen geben.

Vielen Dank vorab.
 

turtle

Top Contributor
Ist so etwas möglich und ein guter Weg die DB's in eine "globale" DB zuschreiben?
Grundsätzlich verstehe ich nicht, warum du drei Datenbanken benötigst?
Was du beschreibst kann in EINER Datenbank abgebildet werden, in der sich mindestens die drei Tabellen LoginTable, KundeTable und WarenkorbTable befinden. Also besteht eine Datenbank-Instanz aus beliebig vielen Tabellen. Jede Tabelle hat ihre eigene Struktur und legt fest welche Art von Daten in ihr gespeichert werden können.

Muss jeder Kunde in allen drei DB's die gleiche ID bekommen, damit Ich mir später alle Infos zum jeweiligen Kunden zusammen fügen kann?
Da du "nur" eine DB hast, stellt sich diese Frage nicht.

Wie kann man es realisieren, dass bei Änderung einer Eingabe bspw. der Anschrift alle Auslesenden über die Änderung informiert werden. Wie wird so etwas angetriggert, setzt man ein Flag?
Häufig wird eine DB in einer sogenannten Client/Server-Umgebung eingesetzt. Der Server-Teil enthält dabei die "Business"-Logik, verbindet sich mit der DB und pflegt/manipuliert die Daten in der DB. Der Client-Teil repräsentiert die View auf die Daten. Hier werden Aktionen angestoßen (beispielsweise neuer Kunde anlegen), die dann in der Business-Logik ausgeführt und in die DB geschrieben werden. Somit macht es Sinn, Änderungen in der DB vom Client abfragen zu lassen, statt die DB alle anderen Teile (Server und Clients) zu informieren.

Wie kann Ich in einer Datenbank oder in einem Java-Code festlegen wer die Daten von welchem Kunden auslesen darf (es sind ja alle Kunden in einer DB)?
Dies ist Aufgabe der DB. Mit der hier geschilderten Client/Server-Architektur nennt man die Datenschicht normalerweise das Backend. Und hier kann sehr feingranular festgelegt werden, wer, was in der DB machen darf. Das SQl-Kommando, mit dies möglich ist, heisst GRANT und hier findest du mehr Infos dazu.
 

Javandroid

Mitglied
Grundsätzlich verstehe ich nicht, warum du drei Datenbanken benötigst?
Was du beschreibst kann in EINER Datenbank abgebildet werden, in der sich mindestens die drei Tabellen LoginTable, KundeTable und WarenkorbTable befinden. Also besteht eine Datenbank-Instanz aus beliebig vielen Tabellen. Jede Tabelle hat ihre eigene Struktur und legt fest welche Art von Daten in ihr gespeichert werden können.


Da du "nur" eine DB hast, stellt sich diese Frage nicht.

Vielen Dank für die Antwort. Obenstehend wollte Ich durch "...." andeuten, dass dort die Daten von anderen Kunden eingefügt werden. Meine Idee ist also eine "globale" DataBase mit drei weiteren DB's in der die Daten zu jedem Kunden gespeichtert werden.



Wie kann man es realisieren, dass bei Änderung einer Eingabe bspw. der Anschrift alle Auslesenden über die Änderung informiert werden. Wie wird so etwas angetriggert, setzt man ein Flag?


Häufig wird eine DB in einer sogenannten Client/Server-Umgebung eingesetzt. Der Server-Teil enthält dabei die "Business"-Logik, verbindet sich mit der DB und pflegt/manipuliert die Daten in der DB. Der Client-Teil repräsentiert die View auf die Daten. Hier werden Aktionen angestoßen (beispielsweise neuer Kunde anlegen), die dann in der Business-Logik ausgeführt und in die DB geschrieben werden. Somit macht es Sinn, Änderungen in der DB vom Client abfragen zu lassen, statt die DB alle anderen Teile (Server und Clients) zu informieren.

Server ist also der Kunde? Dieser lädt die Eingaben in die DB und die Clients fragen diese Daten ab, ist das so richtig?
Der Client bekommt Änderungen also nur durch zyklische Abfrage mit? Kann man eine Änderung nicht direkt weiterleiten?

Wie kann Ich in einer Datenbank oder in einem Java-Code festlegen wer die Daten von welchem Kunden auslesen darf (es sind ja alle Kunden in einer DB)?


Dies ist Aufgabe der DB. Mit der hier geschilderten Client/Server-Architektur nennt man die Datenschicht normalerweise das Backend. Und hier kann sehr feingranular festgelegt werden, wer, was in der DB machen darf. Das SQl-Kommando, mit dies möglich ist, heisst GRANT und hier findest du mehr Infos dazu.

Kann Ich diese Einstellungen zur Laufzeit einstellen oder muss Ich dies zwingend vorab?

Vielen Dank für Ihre Hilfe
 

turtle

Top Contributor
Ja, aber du KANNST ja eine Tabelle für jeden Kunden machen, wenn dir danach ist.

Der Server hat nichts bzw. wenig mit der Datenbank zu tun.

Wie ich sagte, ist hier die Business-Logik gemeint. Nehmen wir an Kunde X möchte einen neuen Eintrag in die Warenkorbtabelle machen. Also schickt er die notwendigen Daten Produkt 1,Preis, Anzahl,... von seinem Client-Arbeitsplatz zum Server, ruft dort die Funktion insertNewWarenkorb(..) auf und diese Business-Funktion fügt den Eintrag in die DB ein. Wenn alles klappte, bekommt der Client zurück das der neue Warenkorb angelegt wurde. Vielleicht gibt er auch eine Liste aller bekannten Warenkörbe dieses Kunden aus.

Das ein Client automatisch informiert wird, wenn sich die DB geändert hat, ist sehr DB-spezifisch und könnte, je nach DB, durch Trigger gelöst werden. Das führt aber zu weiteren Problemen, da ja nicht gewährleistet ist, das ein Client zu jedem Zeitpunkt eine Änderung der DB "verkraften" kann. Nehmen wir als Beispiel das ein Client gerade dabei ist, die Daten für Warenkorb anzupassen, während ein anderer Client gerade genau diesen Warenkorb löscht.

Das GRANTEN/REVOKEN von Rechten KANN man auch dynamisch, also zur Laufzeit machen. Häufiger ist dies aber recht aufwändig und man macht dieses oft noch nicht einmal mit Java-Mitteln, sondern verwendet Tools der Datenbank um solche Administrations-Sachen zu pflegen.
 

Javandroid

Mitglied
Du meinst also eine DB welche alle drei Tabellen inkludiert für jeden Kunden?

In Business-Logik werde Ich mich einlesen. Gibt es hierzu gute Tutorials für Beginner?

Würde dies dann auch später evtl gerne in einer App umsetzen in der Ich dann aus dem Büro via App Informationen (die oben genannten) an einen Mitarbeiter im Lager senden kann.

Würde dann die Daten in eine Oberfläche der App eintragen -> in die DB laden, und der Mitarbeiter im Lager kann diese dann "auf der anderen Seite" der App automatisch auslesen bzw. wird automatisch und immer unmittelbar angezeigt. Wobei auch hier dann die Frage bleibt wie die sofortige Übermittlung/Anzeige ins Lager realisiert werden kann.
 

ChristianK

Aktives Mitglied
Du meinst also eine DB welche alle drei Tabellen inkludiert für jeden Kunden?

In Business-Logik werde Ich mich einlesen. Gibt es hierzu gute Tutorials für Beginner?

Würde dies dann auch später evtl gerne in einer App umsetzen in der Ich dann aus dem Büro via App Informationen (die oben genannten) an einen Mitarbeiter im Lager senden kann.

Würde dann die Daten in eine Oberfläche der App eintragen -> in die DB laden, und der Mitarbeiter im Lager kann diese dann "auf der anderen Seite" der App automatisch auslesen bzw. wird automatisch und immer unmittelbar angezeigt. Wobei auch hier dann die Frage bleibt wie die sofortige Übermittlung/Anzeige ins Lager realisiert werden kann.

Ja, eine Datenbank für deine Applikation, die drei Tabellen hat. Alles andere ist sinnlos.

Wenn du etwas zu diesem Bereich erfahren möchtest, ist 3-Tier-Architektur ein guter Ausgangspunkt. Da beginnt das Ganze. Allgemein ist BI jedoch ein Konzeptwort, das keine "konkreten Codebeispiele" oder so bereithält. Es geht hier nur um die Teile, die eben Geschäftslogik verrichten und nichts mit Datenspeicherung oder Darstellung zu tun haben.

Eine automatische Aktualisierung kannst du auf verschiedene Wege erreichen.
- auslesen im Intervall
- Information über einen Socket, UDP-Packet an Lager ("Hey, aktualisier dich...")
- RMI, falls es umfangreicher werden soll
- ...
Das hängt auch von deiner Netzwerktopologie ab.
 
Zuletzt bearbeitet:

Javandroid

Mitglied
Das heißt also, dass Ich mittels dieser 3-Tier-Architektur in eine UI (bspw. via App) die Daten eingeben kann, diese werden dann "in die Hände" der Business-Logik übergeben.
Die Business-Logik organisiert hierbei wo die Daten landen und wer, auf welche Datenbereiche in der Datenbank zugreifen darf?
Auch wenn in bei 3-Tier-Architektur die Teilaufgaben "Presentation der Daten", "Business-Logik" und "Datenhaltung/Datenspeicherung" getrennt betrachtet werden, werden all diese Aufgaben über bspw. Java implementiert. Die Speicherung der Daten in die DB wird natürlich noch mit Hilfe von PHP und SQL realisiert. Ist das so richtig?

Die Daten sollen über UI des Kunden editierbar sein, aber nur dort. der oder die Anderen sollen es nur lesen können.
Ist das hierfür die beste Lösung?
 
Zuletzt bearbeitet:

ChristianK

Aktives Mitglied
Ja, du hast das schon sehr gut verstanden. Idealerweise erstellst du einen zentralen Server, der die Business Logik beinhaltet (mittels RMI ist das ziemlich einfach). Dieser Server ist der einzige, der Zugriff auf die Datenbank hat (die nicht auf dem gleichen Gerät sein muss).

Dann hast du ein Front-End, dass am Schluss nur Informationen sammelt, an den BI-Server sendet oder Informationen vom BI-Server abfragt und geeignet darstellt. Deine gewünschte Authentifizierung kannst du auch mittels eines Logins gewährleisten.

Damit hast du schon eine sehr flexible und erweiterbare Struktur.
 

Javandroid

Mitglied
Ok, super, werde mir auch RMI mal anschauen.
Ist dieser Ansatz später dann auch "einfach" erweiterbar, so dass Ich nach einer Authentifizierung via Login eine Gruppe mit weiteren Usern meiner Application erstellen kann und diese dann eine Gruppe bilden.
In der Gruppe kann man dann für die bevorstehenden Spielergebnisse seinen eigenen Ergebnisstipp eingeben, welche auch bei allen anderen Gruppenteilnehmern angezeigt wird. Somit kann jeder User dann die Spielergebnistipps aller Gruppenuser einsehen. Wie könnte eine solche Gruppierung angegangen werden?

Wird der Server nur in php programmiert?
 
Zuletzt bearbeitet:

Javandroid

Mitglied
Stimmt,hierbei geht es auch um eine andere Sache, habe mich im Tab geirrt. Aber die gleiche Frage stellt sich mit für die Lager-App.

Ist dieser Ansatz später dann auch "einfach" erweiterbar, so dass Ich nach einer Authentifizierung via Login eine Gruppe mit weiteren Usern meiner Application erstellen kann und diese dann eine Gruppe bilden.
Wie könnte eine solche Gruppierung von Seiten der Datenbank angegangen werden?

Wird der Server nur in php programmiert?
 

ChristianK

Aktives Mitglied
Insofern du RMI verwendest bist du fixiert auf Java. Falls du auch PHP möchtest, empfehle ich eine REST-API, das wird in Java jedoch etwas komplizierter.

Insofern du Rechte umsetzen möchtest empfehle ich beispielsweise eine ACL. Dazu findet man sehr viele Tutoriale bei Google & co.

Und ja, insofern du das richtig unsetzt, ist das ziemlich einfach zum Umsetzen.
 
Zuletzt bearbeitet:

Javandroid

Mitglied
Werde mich mal mit ACL auseinandersetzten und Tutorials durcharbeiten.
Ist eine Gruppierung mehrerer User mit ACL möglich?
Wird ACL via Java implementiert?
viele Dank für den Support.
 

ChristianK

Aktives Mitglied
Ja, du kannst mittels ACL Gruppen erstellen.

ACL ist ein Konzept, wie du das implementierst (oder ob du ein bestehendes Framework nimmst) bleibt alleine dir überlassen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Warenkorb - Realisierung in DB Datenbankprogrammierung 15
B Wie kann ich eine Jtable mit Inhalt einer SQL Abfrage füllen Datenbankprogrammierung 14
D Zweckmäßigkeit einer Schlüsseltabelle Datenbankprogrammierung 4
TH260199 Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung. Datenbankprogrammierung 7
S Variable in main soll mit der generierten Zahl aus einer Methode ausgefüllt werden Datenbankprogrammierung 3
N Oracle SQL - Nächst kleineren Namen2 zu einem Namen aus einer Tabelle Datenbankprogrammierung 3
T Datenbank auf einer Webseite aus einer Exceltabelle erstellen Datenbankprogrammierung 5
D JPA gleiche methode funktioniert an einer Stelle, an der anderen nicht Datenbankprogrammierung 3
nonickatall MySQL Auf neue Datensätze in einer Datenbank reagieren Datenbankprogrammierung 5
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
P Verbindung zu einer Access Datenbank per Eclipse oder Intellij Datenbankprogrammierung 0
pkm Frage zu Encodingproblem bei einer Datenbankanbindung Datenbankprogrammierung 1
B Frage bei einer SQL Query Datenbankprogrammierung 3
F Mapping einer SQL Abfrage in eine Klasse Datenbankprogrammierung 4
J In einer bestimmten Spalte suchen mit Suchfeld (MS SQL) Datenbankprogrammierung 7
S Verbindung von einer Excel Datei zu Java Datenbankprogrammierung 2
J Sql Anfrage nach einer Zeile beenden Datenbankprogrammierung 6
J Welche Kriterien haben Einfluss auf die Geschwindigkeit einer Datenbank ? Datenbankprogrammierung 4
S Anmelden an einer msql datennbank Datenbankprogrammierung 1
F Auslesen einer .dbf-Datei, Zuordnung Index Datenbankprogrammierung 0
ralfb1105 Oracle Zwei ojdbc Driver in einer Applikation? Datenbankprogrammierung 13
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
Dimax MySQL 10 höchsten Werte aus einer Tabelle ermitteln Datenbankprogrammierung 30
L Speicherverbrauch Java Anwendung mit einer Datenbankanbindung Datenbankprogrammierung 19
temi Wie kann ich "Class" in einer DB speichern? Datenbankprogrammierung 2
F UPDATE - Befehl nur in einer Zeile Datenbankprogrammierung 11
I Oracle Wie ermitteln, welche Benutzer-(!)Tabellen in einer DB sind? Datenbankprogrammierung 1
DaCrazyJavaExpert Derby/JavaDB Wert einer Variable in der Datenbank direkt auf 1 setzten. Datenbankprogrammierung 71
D MySQL Suche nach Max Value in einer Tabelle Datenbankprogrammierung 7
W Daten aus einer Datei von einem VServer auslesen Datenbankprogrammierung 1
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
F Java Objekte in einer Datenbank speichern Datenbankprogrammierung 4
MrSnake Hilfe bei erstellen einer DB Datenbankprogrammierung 12
M Wie übergebe ich Datenbankobjekte aus einer sql-Datenbank einer Java Klasse bzw. Instanz Datenbankprogrammierung 7
Z Finde den Fehler: Daten aus einer Access-Datenbank lesen Datenbankprogrammierung 12
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
E Wie kann man mit einer ID-Spalte über eine Parameterübergabe auf eine Seite verweisen? Datenbankprogrammierung 17
E Warum funktioniert das Erzeugen einer View nicht? Datenbankprogrammierung 1
E Kann man in einer if-Bedingung auch SELECT-Statements überprüfen? Datenbankprogrammierung 23
E Was sind die Vorteile von DB2 im Gegensatz zu einer Oracle-Datenbank? Datenbankprogrammierung 5
E Wie geschieht der konzeptueller Entwurf einer Datenbank Datenbankprogrammierung 1
I SQLite Objekt speichern einer Serialisierter Klasse Datenbankprogrammierung 1
D HSQLDB INSERT INTO in einer For Schleife mit selber ID, machbar? Alternative? Datenbankprogrammierung 7
I Inhalt einer hsqldb anzeigen Datenbankprogrammierung 1
Androbin [Serializing] Mehrere Objekte in einer einzigen Datei speichern Datenbankprogrammierung 1
S Auswahl einer Datenbank Datenbankprogrammierung 0
M Derby/JavaDB Speicherplatz einer Zeile bestimmen Datenbankprogrammierung 0
P JPA in einer größeren Java SE Anwendung Datenbankprogrammierung 0
R MySQL Blob aus DB auslesen und einer Tabelle ausgeben Datenbankprogrammierung 7
C H2 Syntax fehler beim erstellen einer Tabelle Datenbankprogrammierung 4
L MySQL Uhrzeit-Format innerhalb einer Tabelle Datenbankprogrammierung 8
2 MySQL Daten aus einer Array auslesen und MySQL Statment erstellen. Datenbankprogrammierung 5
S Derby/JavaDB Probleme beim anlegen einer embedded DB Datenbankprogrammierung 13
E Daten einer SQL-Datenbank aus Combobox in labels schreiben Datenbankprogrammierung 6
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
L Datenbankabfrage mit einer Range Datenbankprogrammierung 3
S Anbindung einer Datenbank an Java Datenbankprogrammierung 7
H ResultSet is closed tritt bei JSF aber nicht bei einer Java-Applikation auf Datenbankprogrammierung 10
eskimo328 Datenbankverbindung ohne Passwort im Quelltext bei einer offline Anwendung Datenbankprogrammierung 14
C unverständliches DB Problem (Es ist kein temporärer Systemtabellenbereich mit einer ausreichenden..) Datenbankprogrammierung 5
A Oracle Update Befehl in Datenbank anhand einer Schleife Datenbankprogrammierung 8
Kenan89 Oracle Daten einer Tabelle in Array speichern Oracle Datenbankprogrammierung 10
S 2 Tabellen zu einer zusammenführen, INSERT INTO Fehler Datenbankprogrammierung 5
D Sperrverfahren in einer Datenbank Datenbankprogrammierung 6
B Feld in einer @Entity als Text speichern Datenbankprogrammierung 5
G Oracle Hibernate M:N-Beziehung mit nur einer vorhandenen Tabelle Datenbankprogrammierung 5
M MySQL Auto-Increment einer custom formatted id? Datenbankprogrammierung 2
F Oracle ResultSet zu einer HashMap<Integer, String[]> Datenbankprogrammierung 6
M DB: Mehrere Zeilen in einer Zeile zusammenführen Datenbankprogrammierung 10
D Probleme bei der Erzeugung einer Tabelle Datenbankprogrammierung 15
D Frage zu potenziellen Leerzeichen in einer Datenbank Datenbankprogrammierung 5
H datantyp einer variable ermittel mit sql Datenbankprogrammierung 3
I Zugriff auf Datenbank nach Erstellen einer Executable Jar Datei verweigert Datenbankprogrammierung 10
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
S Wie überprüfe ich ob die Instanz einer Connection gerade werwendet wird? Datenbankprogrammierung 4
M Ausgabe der Rows mit höchstem Wert X einer Gruppe y,z ? Datenbankprogrammierung 2
L Derby/JavaDB Fehler beim Erstellen einer Tabelle Datenbankprogrammierung 2
turmaline [Hibernate] @OneToOne: Löschen einer referenzierten Instanz Datenbankprogrammierung 2
S ResultSet einer Datenbankabfrage - Nullpointer Exception Datenbankprogrammierung 13
B Aktuellen Stand der Datensätze einer Datenbank anzeigen Datenbankprogrammierung 9
B Die Anzahl der Datensaetze einer Datenbank anzeigen Datenbankprogrammierung 2
T Ablage von Benutzereinstellungen in einer DB Datenbankprogrammierung 7
T Inhalt einer Datenbanktabelle autom. in XML ausgeben Datenbankprogrammierung 7
M Oracle Probleme mit dem anbinden einer Oracle 10g Datenbank Datenbankprogrammierung 27
B MySQL Row und ColumnIndex aus einer JTable (mysqlDb) selectieren Datenbankprogrammierung 18
C Hibernate Liste mit allen Objekten einer Entity Datenbankprogrammierung 17
M Sinnvoller Entwurf einer Java DB-Anwendung Datenbankprogrammierung 2
E MySQL Befüllen einer MySQL DB mit großen Daten Datenbankprogrammierung 6
Airwolf89 Spaltennamen einer Tabelle zurückgeben lassen Datenbankprogrammierung 9
1 Aufruf einer View über Java Gui Datenbankprogrammierung 5
J Mit einer Abfrage Worte suchen die in Zwei Tabellen enthalten sind Datenbankprogrammierung 5
M FindBugs und PreparedStatement aus einer Datei lesen Datenbankprogrammierung 11
M Bitte um Hilfe bei Wahl einer Datenbank Datenbankprogrammierung 3
J zufällige Auswahl aus einer Tabelle Datenbankprogrammierung 4
F Problem mit einer Sql Index Datenbankprogrammierung 2
Joy jdbcodbc brücke - einbinden einer Datenbank in Java Datenbankprogrammierung 4
S Daten einer Tabelle vergleichen und ggs neuen Wert einfügen Datenbankprogrammierung 8
T Spalten einer SQL-Anfrage vorhersagen Datenbankprogrammierung 6
X Daten einer DatenbankTabelle in JTable darstellen Datenbankprogrammierung 13
A Datenbankverbindung mit einer Datenbank auf einem Webspace Datenbankprogrammierung 10

Ähnliche Java Themen

Neue Themen


Oben