Autor Beitrag
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Fr 25.05.12 21:49 
Hallo zusammen,

ich habe mal wieder die Ehre dass ich eine Anwendung mit einem SQL-Server im Hintergrund entwickeln darf. Da ich mich immer nur sporadisch mit SQL und DB-Servern befassen kann, brauche ich mal wieder eure Hilfe.

Also, für die Anwendung benötige ich zwei Tabellen.

Eine Tabelle die Informationen zu Prüfmethoden bereitstellt, hier liegt mein Focus bei der Einheit des Ergebnisses.


Table:A
ausblenden Quelltext
1:
2:
3:
4:
5:
PNAME       UNIT        usw……
-----------------------------
Xyz          Kg
Abc          g
Nbv          ppm


Und eine Tabelle die Ergebnisse der Prüfungen hält.

Table:B
ausblenden C#-Quelltext
1:
2:
3:
4:
DATE    PNAME   VALUE    UNIT   usw……
01.12   Xyz     18       Kg
02.12   Abc     20       g
03.12   Nbv     100      ppm


So nun zur Problem/Fragestellung:

Ich möchte die Einheit nicht bei jedem Ergebniseintrag in die Tabelle B übergeben. Ich denke es sollte möglich sein, das der Server bei jedem Select auf Tabelle B, die Einheit aus der Tabelle A auslesen kann und zurückgibt oder? Ich sehe hier den Vorteil, das bei der Änderung der Einheit, die Änderung nur an einer Stelle durchgeführt werden muss und so soll das ja auch Grundsätzlich sein wenn möglich, oder?

Ich hoffe dass ich mich verständlich ausgedrückt habe und mir jemand einen Tipp geben kann wie dass zu realisieren ist. Das sollte doch mittels Relation gehen, oder? Meine Versuche haben bisher jedoch zu keinem Erfolg geführt.

Oder macht man das mittels Select auf auf beide Tabellen? :gruebel:

Ach so, ich arbeite mit SQL Management Express auf einem SQL-Server 2008 R2.

_________________
Gruß
Christoph
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 26.05.12 10:23 
Hallo Christoph,

ja, das nennt sich Datenbank-Normalisierung
Entferne also die Spalte "UNIT" aus deiner 2. Tabelle und verwende zum Abrufen einen (Outer) Join.
Datenbanktechnisch solltest du dann selbstverständlich einen ForeignKey von B.PNAME auf A.PNAME getetzt haben, damit du immer eine Verknüpfung zu der UNIT herstellen kannst. Ansonsten würdest du einen Left oder Right Join benötigen, um auch Daten aus B ohne Verknüpfung zu A selektieren zu können.

Mit welcher Technik greifst du denn auf die DB zu (ADO.NET, Linq-to-SQL, EF, ...)?
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Sa 26.05.12 13:16 
Vielen Dank schon mal für die Info! Ich verwende ADO.Net.

Werde ich mir später anschauen, ich bin mal kurz 150Km Rennradfahren :-D

_________________
Gruß
Christoph
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Di 29.05.12 21:31 
Hallo,

ich habe heute mal experimentiert. Ich habe es bisher nicht hinbekommen, so wie ich mir das vorgestellt hatte. Ich habe die Spalte UNIT aus Tabelle B entfernt. Dann habe ich einen Fremdschlüssel von B.PNAME auf A.PNAME gelegt. (hier war ich mir nicht sicher das die Aktion korrekt ist, das ist der DataSet Designer vom VS besser, bzw. besser visualisiert.)

Geht das denn tatsächlich, dass ich die Einheiten mit einem einfachen Select gegen die Tabelle B erhalte?

Z.B.

ausblenden Quelltext
1:
SELECT * FROM B					


Result: (UNIT kommt hier aus Tabelle A)
ausblenden Quelltext
1:
2:
3:
4:
DATE    PNAME   VALUE    UNIT   usw……
01.12   Xyz     18       Kg
02.12   Abc     20       g
03.12   Nbv     100      ppm



Ich habe jetzt eine andere Lösung, diese ist halt von der Grundidee etwas anders, aber sicher auch OK, oder?

(nur Exemplarisch)
ausblenden Quelltext
1:
2:
3:
4:
SELECT  DATE, PNAME, VALUE, A.UNIT
FROM B, A
WHERE A.PNAME = B.PNAME
AND irgendwelche anderen Bedingungen…..


Was meint ihr, soll ich das so lassen, oder soll ich nochmal Energie in meine ursprüngliche Idee stecken? Es funktioniert ja soweit.........

_________________
Gruß
Christoph