Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Foreign Key - Redundanzfrei?

Frage Entwicklung Datenbanken

Mitglied: VB-NET

VB-NET (Level 1) - Jetzt verbinden

21.10.2009 um 21:35 Uhr, 8205 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
Festplatten, SSD, Raid
gelöst Windows 7 Pro x64 Key aus einer (fast) kaputten HDD auslesen (7)

Frage von carbon1X zum Thema Festplatten, SSD, Raid ...

Windows 7
Windows 7 Office 2016 Pro Plus Image Produkt Key (2)

Frage von simonlohr zum Thema Windows 7 ...

Voice over IP
SIP Telefon Lautsprecher ausschalten bei Speed-Dial über Line-Key

Frage von Mohadib zum Thema Voice over IP ...

Neue Wissensbeiträge
Batch & Shell

Batch - ein paar Basics die man kennen sollte

Tipp von Pedant zum Thema Batch & Shell ...

Microsoft

Restrictor: Profi-Schutz für jedes Window

(6)

Tipp von AlFalcone zum Thema Microsoft ...

Batch & Shell

Batch zum Zurücksetzen eines lokalen Profils

Tipp von Mr.Error zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft Office
Saubere HTML aus Word-Dokument (16)

Frage von peterpa zum Thema Microsoft Office ...

Router & Routing
ASUS RT-N18U mit VPN Client hinter Fritzbox - Portforwarding (15)

Frage von marshall75000 zum Thema Router & Routing ...

Hosting & Housing
gelöst Webserver bei WIX, aber DNS Server wo anders (9)

Frage von laster zum Thema Hosting & Housing ...