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, 8142 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 ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Windows 10
Klappt es noch mit 7 Key Windows 10 zu aktivieren? (10)

Frage von zeroblue2005 zum Thema Windows 10 ...

Windows Mobile
gelöst Windows 10 Phone Encryption - Recovery Key? (1)

Frage von DerWoWusste zum Thema Windows Mobile ...

Festplatten, SSD, Raid
gelöst LSI MegaRaid SAS 9271-4i - Upgrade Key Missing! (5)

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

Windows Server
Bitlocker Key per Batch - Loginscript ablegen (5)

Frage von dgrebner zum Thema Windows Server ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (14)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...