Top-Themen

Aktuelle Themen (A bis Z)

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 Hilfe bei Datebankdesign

Mitglied: TheUntouchable

TheUntouchable (Level 1) - Jetzt verbinden

11.07.2014, aktualisiert 16.07.2014, 957 Aufrufe, 9 Kommentare

Hallo Leute,

da ich im Moment eine kleine Denkblockade habe, wende ich mich an euch

Ich möchte eine kleine Benutzerverwaltung für eine PHP Seite erstellen. Hierbei soll dann auch aufgezeichnet werden, wer wann wie was wo weshalb warum macht ;)

Dabei geht es um folgende Tabellen:

01.
create table gruppen ( 
02.
	GNr		int unsigned auto_increment not null primary key, 
03.
	GName		varchar(20) 
04.
);
01.
create table benutzer ( 
02.
	BNr		int unsigned auto_increment not null primary key, 
03.
	BName		varchar(20) not null, 
04.
	Passwort	varchar(256) not null, 
05.
	Gruppe		int unsigned not null, 
06.
 
07.
	foreign key (Gruppe) 
08.
	references gruppen(GNr) 
09.
);
01.
create table überwachung( 
02.
	UNr		int unsigned auto_increment not null primary key, 
03.
	LetzerLogin	datetime, 
04.
	LetzteAktio	datetime, 
05.
	Erstellt	datetime not null, 
06.
	ErstelltVon int unsigned not null, 
07.
	Geändert	datetime, 
08.
	GeändertVon	int unsigned, 
09.
	 
10.
	foreign key (ErstelltVon) 
11.
	references benutzer (BNr), 
12.
 
13.
	foreign key (GeändertVon) 
14.
	references benutzer (BNr) 
15.
);
Ich möchte, das unter GeändertVon und ErstelltVon jeweils der User steht (also die BNr), der den anderen User erstellt oder bearbeitet hat. Aber ich hab gerade keinen Plan wie ich das hinbekomme.. Ich habs gefühl ich bräuchte noch eine Tabelle zwischen benutzer und überwachung..

Kann mir da wer unter die Arme greifen?

Danke
Mitglied: SlainteMhath
11.07.2014 um 11:54 Uhr
Moin,

GeändertVon braucht noch ein "not null" sonst klappt das mit dem ForeignKey nicht.

Grundsätzlich würde ich das anders ausfbauen.
eher so
01.
... 
02.
UNr		int unsigned auto_increment not null primary key,  
03.
Zeitstempel  datetime, 
04.
Aktion  varchar(512), 
05.
DurchgefuehrtVon  int unsinged not null, 
06.
DurchgefuehrtAn    int unsinged not null, 
07.
 
08.
foreign key (DurchgefuehrtVon) references benutzer (BNr), 
09.
foreign key (DurchgefuehrtAn) references benutzer (BNr)
lg,
Slainte
Bitte warten ..
Mitglied: TheUntouchable
11.07.2014, aktualisiert um 12:08 Uhr
Hi Slainte und danke für deine Antwort!

Ich glaube das "not null" hab ich vorhin schon weggemacht, ich kanns jedenfalls nicht mehr finden

Bezüglich deines Vorschlags: Ansich nicht schlecht, aber ich möchte später in einer Liste alle Benutzer auflisten lassen, mit den Feldern die oben angegeben sind Die UNr sollte eigentlich dann die Nummer des jeweiligen Benutzers sein, aber wie ich die mit der BNr verknüpfe ist im Moment mein Problem.. Direkt als foreign key oder eine Tabelle dazwischen?

Die Tabelle, die ich ausgeben will, soll so aussehen:

BNr, Bname, Gruppe, LetzterLogin, LetzteAktion, Erstellt, ErstelltVon (BNr->BName), Geändert, GeändertVon (BNr->BName)
Bitte warten ..
Mitglied: Biber
11.07.2014, aktualisiert um 16:31 Uhr
Moin SlaintheMath,


Zitat von SlainteMhath:

GeändertVon braucht noch ein "not null" sonst klappt das mit dem ForeignKey nicht.

Das ist so nicht ganz richtig.
Das Feld GeändertVon kann durchaus NULLABLE sein - und der Inhalt darf dann auch bei gesetztem FK-Constraint entweder NULL oder ben ein gültiger Wert aus der referenzierten Parent-Tabelle sein.

Die Constraint sollte dann auch "ON DELETE SET NULL" beinhalten, d.h. wenn der "GeändertVon"-User 4711 aus der Parent-Tabelle gelöscht wird, dann soll in der Child-Tabelle überall der "GeändertVon"-User 4711 auf NULL geändert werden.
Dazu muss aber das Feld NULLABLE sein.

Grüße
Biber
Bitte warten ..
Mitglied: SlainteMhath
11.07.2014 um 12:32 Uhr
@Biber
Ja du hast natürlich Recht. Ich arbeite bei FK's aber sehr ungern mit CASCADE/ON DELETE SET NULL. Lieber lass ich das DBS einen Fehler schmeissen als das es mir mit der NULL-Kettensäge durch die DB fährt

@TheUntouchable
Wenns Du's wirklich so haben willst, brauchst du keine zusätzliche Tabelle. Beachte aber den Post von Biber.
Bitte warten ..
Mitglied: Biber
11.07.2014, aktualisiert um 13:14 Uhr
Moin Slainthe,,

na ja, bei CASCADE gebe ich dir recht.
Aber bei SET NULL...
Gerade hier in diesem Fall wären die Alternativen

- (bei einem Standard ON DELETE RESTRICT) - der User 4711, der vor 2 Jahren Admin war und 50 andere "geändert" hat (z.B. Passwort-Reset) darf niemals nich gelöscht werden, auch wenn er schon seit der letzten Sonnenwendfeier in Walhalla frühstückt.
- (bei ON DELETE CASCADE) - der User 4711 wird aus o.a. Gründen gelöscht und alle 50 User, denen er beim Passwort-Reset gehölfen hat, folgen ihm in die grosse Trinkhalle.

Da wäre meine Präferenz doch ein ON DELETE SET NULL.

Grüße
Biber:
Bitte warten ..
Mitglied: TheUntouchable
15.07.2014, aktualisiert um 22:10 Uhr
Kleines/Großes Update:

Meine Tabellen sehen jetzt folgender maßen aus:

01.
create table gruppen ( 
02.
	GNr			int unsigned auto_increment not null primary key, 
03.
	GName		varchar(20) 
04.
);
01.
create table benutzer ( 
02.
	BNr			int unsigned auto_increment not null primary key, 
03.
	BName		varchar(20) not null, 
04.
	Passwort	varchar(256) not null, 
05.
	Gruppe		int unsigned, 
06.
 
07.
	foreign key (Gruppe) 
08.
	references gruppen(GNr) 
09.
);
01.
create table überwachung( 
02.
	BNr			int unsigned not null primary key, 
03.
	LetzerLogin	datetime, 
04.
	LetzteAktio	datetime, 
05.
	Erstellt	datetime not null, 
06.
	ErstelltVon int unsigned not null, 
07.
	Geändert	datetime, 
08.
	GeändertVon	int unsigned, 
09.
 
10.
	foreign key(BNr) 
11.
	references benutzer(BNr) 
12.
	ON DELETE SET NULL, 
13.
	 
14.
	foreign key (ErstelltVon) 
15.
	references benutzer (BNr) 
16.
	ON DELETE SET NULL, 
17.
 
18.
	foreign key (GeändertVon) 
19.
	references benutzer (BNr) 
20.
	ON DELETE SET NULL 
21.
);
Hier ein paar Daten, um mich dann auch am System anmelden zu können:

01.
insert into benutzer (BName, Passwort) values 
02.
('Michael','-zensiert-');
01.
insert into überwachung (BNr,Erstellt, ErstelltVon) values 
02.
('1','0000-00-00 00:00:00','1')
Mit dieser Abfrage
01.
select * from benutzer inner join überwachung using (BNr)
Bekomme ich dann folgende Ausgabe:
01.
# BNr, BName, Passwort, Gruppe, LetzerLogin, LetzteAktio, Erstellt, ErstelltVon, Geändert, GeändertVon 
02.
'1', 'Michael', '-zensiert-', NULL, NULL, NULL, '0000-00-00 00:00:00', '1', NULL, NULL
Und jetzt meine Frage, auf die ich schon die ganze Zeit hinaus will:
Wie bekomme ich es hin, das bei Erstellt Von nicht die 1 sondern der Name des Benutzers steht? :D

PS: Vielen Dank für die schon gekommen Antworten und für die noch kommenden! :D
Bitte warten ..
Mitglied: SlainteMhath
LÖSUNG 16.07.2014, aktualisiert um 11:33 Uhr
Versuchs mal so
01.
select u.*, b1.BName as ErstelltVonBenutzer, b2.BName as GeaendertVonBenutzer 
02.
from uberwachung as u 
03.
left join Benutzer as b1 on u.ErstelltVon = b1.BNr 
04.
left join Benutzer as b2 on u.GeaendertVon = b2.BNr
Bitte warten ..
Mitglied: TheUntouchable
16.07.2014 um 11:34 Uhr
Super, hat geklappt! Vielen vielen Dank Das mit den Alias für die Tabellen war mir neu
Bitte warten ..
Mitglied: TheUntouchable
16.07.2014 um 13:52 Uhr
Das ist jetzt meine endgültige Lösung, falls es jemanden interessiert ;)

01.
$anweisung =  	"select benutzer.BNr, benutzer.BName, gruppen.GName, überwachung.LetzerLogin, überwachung.LetzteAktio, überwachung.Erstellt, b1.BName as ErstelltVon, überwachung.Geändert, b2.BName as GeändertVon 
02.
						from benutzer left join überwachung using (BNr) 
03.
						left join benutzer as b1 on b1.BNr = überwachung.ErstelltVon 
04.
						left join benutzer as b2 on b2.BNr = überwachung.GeändertVon 
05.
						left join gruppen on gruppen.GNr = benutzer.Gruppe";
Bitte warten ..
Ähnliche Inhalte
Datenbanken
Hilfe bei Datenbankabfrage
gelöst Frage von e51bomagDatenbanken11 Kommentare

Hallo liebe Community, hab gerade ein Blackout bzgl. Realisierung einer Abfrage. Folgende Datenbank: noten: nid, loginname, fid, note, type ...

Vmware
Hilfe bei Betriebssysteminstallation
gelöst Frage von N4m3n7os3rVmware7 Kommentare

Hallo liebe User, ich bin neu hier und hoffe das ihr mir helfen könnt. Ich bin seit einiger Zeit ...

Batch & Shell
Hilfe bei Powershell
Frage von Bommi1961Batch & Shell4 Kommentare

Hallo zusammen! Ich such und such und bin zu blöd es zu finden Ich such nach einer löschen, wie ...

Monitoring
Hilfe bei Wireshark
gelöst Frage von GummixMonitoring17 Kommentare

Hallo, irgendwas im Netzwerk verursacht immer wieder Download und Upload traffic. Jetzt habe ich gelesen, dass man das einfach ...

Neue Wissensbeiträge
Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 10 StundenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Sicherheit

Intel gibt neue Spectre V2-Microcode-Updates frei (20.02.2018)

Information von kgborn vor 11 StundenSicherheit

Intel hat zum 20. Februar 2018 weitere Microcode-Updates für OEMs freigegeben, um Systeme mit neueren Prozessoren gegen die Spectre ...

Microsoft
ARD-Doku - Das Microsoft Dilemma
Tipp von Knorkator vor 14 StundenMicrosoft3 Kommentare

Hallo zusammen, vor einigen Tagen lief in der ARD u.a. Reportage. Das Youtube Video dazu dürfte länger verfügbar sein. ...

Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 1 TagWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

Heiß diskutierte Inhalte
Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server40 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Router & Routing
ISC DHCP 2 Subnetze
gelöst Frage von janosch12Router & Routing19 Kommentare

Hallo, ich betreibe bei mir im Netzwerk einen ISC DHCP Server auf Debian, der DHCP verwaltet aktuell ein /24 ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...