SQL: eine SessionID für eine aktive Verbidnung

All93rounder

Benutzer
Beiträge
6
Moin Moin,

ich stehe wohl gerade etwas neben mir und finde keine zufriedenstellende Lösung bzw. erhoffe mir nun ihr könnt mir weiter helfen.
Problemstellung:
Ich möchte eine Datenbank aufbauen in der ich eine überwachung meies Rechners ermöglich, also Prozessorauslastunf, Memorybelegung, aktive Prozesse... Das Datenbankschema dazu habe ich bereits, siehe unten. Nun möchte ich natürlich, dass mein PowerShellskript die Werte überträgt...
  • Zuerst dochte ich an alle Werte werden aufeinmal übertragen, dann funkt jedoch nicht. Da ich nicht wüsste wie ich SQL so flexible gestallte, dass es bei einer übermittlung alle Werte annimmt wie z.B. einmal 2 Core daten, dann 8-Core daten oder 4-Core daten usw...
  • Nun habe ich das Datenbankschema angepasst und übermittel nur einzelne Datensätze also für einen 2core system zwei übermittlungen und für ein 8core system halt 8übermittlungen usw... (nur bezogen nun auf Prozessorleistung pro Memoryriegel/Prozesse kommen weitere übermittlungen hinzu)
    • Nun habe ich das Problem dass ich für jede neue Übermittlung eine neue TransID generiere... Das ist nur nicht sinn der Sache, da ich unter einer ID alle dazugehörigen Daten finden möchte.
    • Lösungsweg, ich starte eine Transaction und lasse mir eine TransID zuweien und nutze diese weiterhin...
Meine Frage ist nun geht das nicht aus einfacher? Irgendwie kommt es mir vor, alsob ich um sieben Ecken denke!
Gruß Chris
P.S. Gibt es hier keine Spoiler???

img2015022211ugib6oy3r1.jpg

drop database if exists abc;
create database abc;
use abc;
-- ######################################## --

create table UserList(
userID int primary key auto_increment,
userName varchar(50) unique
);
-- ######################################## --

create table Summary_Performance(
TransID int primary key auto_increment,
UserID int,
TransTime timestamp,
foreign key (UserID) references UserList(userID)
on update cascade
);
delimiter $$
create trigger iSummary_Performance
before update
on Summary_Performance
for each row
begin
DECLARE identUserName varchar(50) default '';

delete from TransactionList
Where TransTime in (
select max(TransTime)
From TransactionList)
and 4 >= (
select count(*)
From TransactionList);

set identUserName = ('abc'); -- SELECT CURRENT_USER()
if identUserName not in (select userID From UserList Where userName = identUserName) then
insert into userList(userName) values (identUserName);
end if;
set new.UserID = (select userID From UserList Where userID = identUserName);

end $$
delimiter ;
-- ######################################## --

create table Typ(
TypNr tinyint primary key auto_increment,
TypName varchar(50)
);

insert into Typ values (0,'Prozessor');
insert into Typ values (2,'Memory');
insert into Typ values (3,'Programme');
-- ######################################## --

create table Performance(
TransID int,
TypNr tinyint not null,
Position int not null,
Auslastung decimal(4,1) not null,
foreign key (TransID) references Summary_Performance(TransID)
on update cascade,
foreign key (TypNr) references Typ(TypNr)
on update cascade
);
delimiter $$
create trigger iiiiiiiiTransactionList
before update
on Performance
for each row
begin
delete from TransactionList
Where TransTime in (
select max(TransTime)
From TransactionList);
end $$
delimiter ;
-- ######################################## --



-- ######################################## --
-- ######################################## --

create view vIn_Performance
as
select TransID, TypNr, Position, Auslastung
From Performance;


create view vOut_Performance
as
select TransID
From Summary_Performance;


-- ######################################## --

drop user OpPerformance; -- xxx
create user OpPerformance identified by 'abc';
grant select, insert on vOut_Performance to OpPerformance;
grant select, insert on vIn_Performance to OpPerformance;
 
Werbung:
Zuerst dochte ich an alle Werte werden aufeinmal übertragen, dann funkt jedoch nicht. Da ich nicht wüsste wie ich SQL so flexible gestallte, dass es bei einer übermittlung alle Werte annimmt wie z.B. einmal 2 Core daten, dann 8-Core daten oder 4-Core daten usw...

Anstatt die Frage in zig Foren zu stellen wäre es vielleicht zielführender, sie besser zu formulieren.
 
Danke für den Hinweis, jedoch habe ich den gleichen Post in einem anderen Forum eingestellt, da ich dort wesendlich häufiger die Tutoriells nutze. Dort habe ich eben erst das Forum entdeckt und hatte hier bereits das Thema erstellt...
 
Zuletzt bearbeitet:
Meine Frage ist nun geht das nicht aus einfacher? Irgendwie kommt es mir vor, alsob ich um sieben Ecken denke!

Wozu dienen die Trigger?

Via writeable Common Table Expressions kann man in einem Atemzug Dinge in unterschiedlichen Tabellen eintragen. Also in einem SQL. Ohne zwischendurch sich ein Autoincrement-Wert holen zu müssen etc. Allerdings kann MySQL das nicht.
 
Werbung:
Zurück
Oben