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

Frage Entwicklung Datenbanken

GELÖST

Foreign Key - Redundanzfrei?

Mitglied: VB-NET

VB-NET (Level 1) - Jetzt verbinden

21.10.2009 um 21:35 Uhr, 8300 Aufrufe, 5 Kommentare

Hallo,

ich beschäftige mich zur Zeit mit dem Thema Datenbanken (relationelle) und SQL.

Laut der dritten Normalform soll eine Datenbank vollständig redundanzfrei sein, sprich Daten werden sinnvoll aufgeteilt usw.

Nun kann man ja per SQL den Foreign Key nutzen, um z.b. automatische Updatefunktionen zu nutzen und um Tabellen miteinander zu Verknüpfen.

01.
Foreign Key ("Feldname") references TABLE("Feldname"));  
Jetzt will ich wissen, ob durch diesen Foreign Key die Datenbank dennoch redundanzfrei, d.h. in der dritten Normalform bleibt. Ich habe bereits mehrere Internetseiten studiert, aber ich finde dazu keine Lösung.

Gruß

VB-NET
Mitglied: dog
21.10.2009 um 21:47 Uhr
Laut der dritten Normalform soll eine Datenbank vollständig redundanzfrei sein

Und an diesem Punkt musst du eine Entscheidung treffen:

- Willst du an die Uni?
- Oder willst du in der Praxis Lösungen programmieren, die echten Anforderungen standhalten?

Sorry, aber Normalformen hin und her: Die Praxis sieht oft anders aus und da geht es nur um eins: Was ist billiger - Speicher oder Prozessorleistung?

Jetzt will ich wissen, ob durch diesen Foreign Key die Datenbank dennoch redundanzfrei, d.h. in der dritten Normalform bleibt.

Eben dafür ist es ja gedacht.
Stell dir vor du hast eine Tabelle:

01.
Musiker 
02.
------- 
03.
id (primary key) 
04.
name (varchar)
Jetzt kannst du dir eine zweite Tabelle machen:
01.
Titel 
02.
------- 
03.
id (primary key) 
04.
musiker_id (foreign key) 
05.
titelname (varchar) 
06.
...
In diesem Moment hast du Speicher gespart und die Performance erhöht.
Denn

a) Braucht das speichern einer Zahl weniger Speicher als das eines Texts
b) Ist das Suchen nach einer Zahl schneller als ein Text
c) Läufst du so weniger Gefahr in Probleme wie ""Bernd Horstmann" oder "Horstmann, Bernd" - wonach suche ich?" zu laufen.

Dazu kommt je nach verwendetem RDBMS der Vorteil der "referentiellen Integrität" - praktisch bedeutet das: Löschst du einen Musiker aus der Tabelle Musiker verschwinden auch gleich alle seine Tracks mit.

Grüße

Max

Zum Schluss sei noch ein gegenbeispiel gegeben:

Würdest du deine Datenbank anlegen als:

01.
Titel 
02.
---------- 
03.
id (primary key) 
04.
musiker (varchar 255) 
05.
titel (varchar)
wäre sie redundant.
Denn legst du z.B. 10 Lieder von "Mobby Dick" an verbrauchst du 10*255 Byte speicher.
Mit einer vernünftigen Relation und einem foreign key könntest du das aber aif 10*4 Byte reduzieren (du siehst den Unterschied?)

Und noch ein Beispiel wie man es zu weit treiben kann:

Natürlich haben viele Musiker auch viele Lieder mit gleichem Namen, folglich wäre auch folgende Datenbank möglich (wenn man das Konzept der Normalformen bis zum Ende bringen will):

01.
Musiker 
02.
--------- 
03.
id (primary key) 
04.
musiker (varchar 255) 
05.
 
06.
Titelnamen 
07.
---------- 
08.
id (primary key) 
09.
titelname (varchar 255) 
10.
 
11.
Titel 
12.
--------- 
13.
id (primary_key) 
14.
musiker_id (foreign_key) 
15.
titelname_id (foreign_key)
Und wenn du das in Erwägung ziehst dann hast du dich ganz oben für ersteres entschieden
Bitte warten ..
Mitglied: filippg
21.10.2009 um 23:33 Uhr
Hallo,

wo hast du denn deine Definition der 3NF her? An der Stelle, an der sie steht sollte dann auch genauer definiert sein, was sie unter "Redundanzfreiheit" versteht... Das es keine zwei Zeilen geben darf, in der (ein Teil oder alle) Attribute den gleichen Wert besitzen kann ja wohl kaum gemeint sein, das würde ja direkt die Menge der überhaupt modellierbaren Sachverhalte einschränken.
Ich halte mich bei der Definition lieber an http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/chap4.htm#Chap4.5 Dort heißt es "Eine Relation ist in der Dritten Normalform, wenn Sie in der Zweiten Normalform ist und jedes Nicht-Schlüssel-Attribut von keinem Schlüsselkandidaten transitiv abhängig ist."

Die Praxis sieht oft anders aus und da geht es nur um eins: Was ist billiger - Speicher oder Prozessorleistung?
Normalisierung hat m.E. nach wenig mit Performance oder Speicherbedarf zu tun. Das ist von einem theorethischen Standpunkt auch erstmal egal. Vielmehr geht es dabei darum Datenkonsistenz und -flexibilität zu gewährleisten.

Gruß

Filipp
Bitte warten ..
Mitglied: mrtux
22.10.2009 um 00:36 Uhr
Hi !

Also in einem Satz gesagt: Es gibt einen himmelweiten Unterschied zwischen der Theorie und der Praxis....

mrtux
Bitte warten ..
Mitglied: Netzheimer
22.10.2009 um 10:36 Uhr
Hallo VB-NET.

Der Foreign Key ist ja der Primary Key aus einer anderen Tabelle. Die Redundanzfreiheit ist in der einen Tabelle durch den Primary Key gegeben (Eindeutiger Datensatz).

Der Foreign Key bezieht sich nur auf diesen Primary Key. Die Optionen, z.B. CASCADE oder DELETE, die man bei der Darstellung von Beziehungen (REFERENCES) nimmt, haben Auswirkungen, wenn der Primary Key etwas macht, z.B.:

1. ON UPDATE CASCADE -> Der Primary Key bekommt ein Update und gibt es an den Foreign Key weiter (ich bin nicht mehr 3 sondern 99, du jetzt auch)
2. ON DELETE SET NULL -> Der Primary Key wird gelöscht, der Foreign Key wird auf NULL gesetzt (ich bin weg, du bist NULL)
3. Der Primary Key gibt nichts an den Foreign Key weiter -> Es kommt evtl zu Unstimmigkeiten, weil die Referenz auf den Foreign Key nicht mehr möglich ist (ich bin weg, du weißt es nur noch nicht)

Es sollte am besten zu jedem Foreign Key auch ein Pendant geben, alternativ NULL-Werte.

Ich hoffe, es beantwortet deine Frage.


@ die Anderen: Er wollte nicht wissen, wie man es in der Praxis handhabt, sondern seine Frage beantwortet bekommen.

Gruß
Netzheimer
Bitte warten ..
Mitglied: VB-NET
22.10.2009 um 20:00 Uhr
Danke für die Antworten. Es geht nicht um Uni oder an die Praxis, sondern nur was dieser Foreinkey Key macht und ob man da mit redundanzfreien Tabellen arbeitet.

Sprich wenn ich nun in einer Tabelle einen PK habe und den mit dem FK einer anderen Tabelle verbinde, dann kann ich beim Löschen des PK-Datensatzes direkt automatisch den FK löschen usw.

Vielen Dank!
Bitte warten ..
Ähnliche Inhalte
Windows Installation
KMS Welchen Key nehm ich
gelöst Frage von ysy0815Windows Installation4 Kommentare

Hallo zusammen, wir haben zur zeit ein KMS Server auf Windows7 der Windows 7 Clients nd Office 2010 aktiviert. ...

Windows Installation
Office Key in ISO packen
gelöst Frage von sk-it83Windows Installation2 Kommentare

Moin, ich würde ganz gern unseren Office Key in das vorhandene iso file integrieren, um nicht jedes mal nach ...

Batch & Shell
Powershell Foreach Key in Section
gelöst Frage von MarabuntaBatch & Shell2 Kommentare

Ich will Skriptseitig die ausgelesenen Versionen mit Soll-Versionen aus einer Ini-Datei abgleichen, nur wie prüfe ich so viele unterschiedliche ...

Windows 7
Win7 key zurücksetzen
gelöst Frage von TechnoXWindows 714 Kommentare

Hi ich würde gerne wissen: Wie kann ich eine Windows 7 Installation so zurückbiegen das ich nach der Treiber ...

Neue Wissensbeiträge
Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 5 StundenDatenschutz

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 10 StundenMicrosoft1 Kommentar

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 3 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 4 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement22 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...

Windows Server
Terminal Server 2016 erkennt Berechtigungen nicht
gelöst Frage von Thomas2Windows Server10 Kommentare

Hallo Administratoren, folgendes Problem stellt sich dar: Es gibt zwei Windows Server 2016, die als Terminal Server fungieren. Jetzt ...

SAN, NAS, DAS
Wer kennt sich mit QNAP und CISCO aus ?
gelöst Frage von MachelloSAN, NAS, DAS10 Kommentare

Hallo Zusammen hier im Forum, Ich habe ein QNas 451+ und dieses NAS hat zwei GBit Lan Adapter die ...