Gibt es eine offizielle Anleitung oder einen Schwellenwert, um anzugeben, wann es am besten ist, einen Fremdschlüssel in einer MySQL-Datenbank zu verwenden?
Angenommen, Sie haben eine Tabelle für Filme erstellt. Eine Möglichkeit besteht darin, die Hersteller- und die Director-Daten in dieselbe Tabelle zu integrieren. (Film-ID, Film-Name, Regisseur-Name, Produzent-Name).
Angenommen, die meisten Regisseure und Produzenten haben an vielen Filmen gearbeitet. Wäre es am besten, zwei andere Tabellen für Produzenten und Regisseure zu erstellen und einen Fremdschlüssel in der Filmtabelle zu verwenden?
Wann wird es die beste Vorgehensweise, dies zu tun? Wenn viele Regisseure und Produzenten mehrmals in der Kolumne erscheinen? Oder ist es am besten, am Anfang einen Fremdschlüsselansatz anzuwenden? Während es effizienter erscheint, einen Fremdschlüssel zu verwenden, erhöht sich auch die Komplexität der Datenbank.
Wann lohnt sich also der Kompromiss zwischen Komplexität und Normalisierung? Ich bin nicht sicher, ob es einen Schwellenwert oder eine bestimmte Anzahl von Zellwiederholungen gibt, die es sinnvoller machen, einen Fremdschlüssel zu verwenden.
Ich denke über eine Datenbank nach, die von Hunderten von Benutzern gleichzeitig verwendet wird.
Vielen Dank!
Dafür gibt es einige offizielle Richtlinien. Sie heißen normale Formen, und die Praxis, Ihre Datenbank in sie zu bringen, nennt man Normalisierung: Ссылка
Wenn du eine db-Klasse in der Schule nimmst, werden sie dir wahrscheinlich 3nf oder bcnf beibringen. Ich habe diese Ansätze immer als etwas schwerfällig empfunden, aber ich habe genug Erfahrung im db-Design, dass ich diese Fragen im Grunde intuitiv finde ...
In Ihrem Beispiel möchten Sie definitiv Fremdschlüsseleinschränkungen verwenden. Eine Viele-zu-Eins-Beziehung wird am besten so ausgedrückt. es wird die Auswahl von Filmen etwas langsamer machen, da Sie einen Join in der "People" -Tabelle und der "Movies" -Tabelle machen müssen - möglicherweise viele Joins, abhängig davon, wie viele "People" -Felder die Filmtabelle hat.
aber der Vorteil ist, dass Sie die Leute selbst leicht verwalten können. Wenn Sie die Schreibweise eines Personennamens ändern möchten, müssen Sie nicht die gesamte Tabelle durchsuchen, um in jedem Feld nach dieser Person zu suchen. Sie können vermeiden, dieselbe Person in der db mehrmals mit leichten Unterschieden in der Schreibweise zu haben. Sie können Aktionen festlegen, die ausgeführt werden sollen, wenn eine Person gelöscht wird. Sie können leicht zählen, wie viele verschiedene Rollen eine Person hatte.
Vergessen Sie nicht, wenn Sie Fremdschlüssel verwenden möchten, müssen Sie Ihre Tabellen innodb in mysql machen.
Angenommen, Sie haben eine Tabelle für erstellt Filme. Ein Weg, es zu tun ist zu Integriere den Produzenten und Regisseur Daten in die gleiche Tabelle. (Film-ID, FilmName, RegisseurName, producerName).
Das ist viel zu unnormalisiert. Du wiederholst Daten.
Nehmen wir aber die meisten Regisseure und Produzenten haben an vielen Filmen gearbeitet. Wäre es am besten, zwei andere zu erstellen Tabellen für Produzenten und Regisseure, und verwende einen Fremdschlüssel im Film Tabelle?
Nehmen wir auch an, dass eine Person an einem Film als Produzent und am nächsten als Regisseur arbeiten kann. Eine einzelne Person könnte auch als Regisseur, Produzent, Autor und Schauspieler in einem einzigen Film angerechnet werden!
Wann wird es zu empfehlen? mach das? Wenn viele der Regisseure und Produzenten erscheinen mehrere mal in der Spalte? Oder ist es das Beste? üben Sie, einen Fremdschlüssel zu verwenden Ansatz am Anfang? Während es scheint effizienter, einen Fremdschlüssel zu verwenden, es erhöht auch die Komplexität der Datenbank.
Sie werden Fremdschlüssel, Beziehungen (besonders 1-zu-viele und viele-zu-viele) und normale Formulare von Anfang an beherrschen wollen. Sie werden in kürzester Zeit zur zweiten Natur werden.
Tags und Links mysql database foreign-keys