Ich habe den Index nicht gut verstanden, also habe ich den folgenden Artikel gelesen und darüber nachgedacht.
Schienen: Indizieren Sie keine dunklen Wolken (Übersetzung)
Der Index scheint durch separates Kopieren der sortierten Spalten erstellt zu werden. Ich konnte es nicht verstehen, also werde ich darüber nachdenken.
Ich schreibe unter der Annahme, dass ich unerfahren und falsch bin. Bitte beziehen Sie sich nicht darauf.
Im obigen Artikel gab es das folgende Modell als Beispiel.
class ShoppingCart < ActiveRecord::Base
has_many :shopping_cart_products
has_many :products, through: :shopping_cart_products
end
class ShoppingCartProduct < ActiveRecord::Base
belongs_to :shopping_cart
belongs_to :product
end
class Product < ActiveRecord::Base
end
Einkaufswagen ShoppingCartProduct Produkt
Ich mache drei Modelle, aber ich bin von hier gestolpert.
Ich fragte mich, ob es notwendig war, das Zwischenprodukt ShoppingCartProduct zu wagen. Was ist der Grund dafür, dass der Warenkorb nicht direkt mit dem Produkt verknüpft wird?
Wenn ShoppingCart und Produkt zugeordnet sind Sie werden die Artikel in Ihrem Warenkorb abfragen.
Was ist falsch daran, Produkte direkt abzufragen? Ich sage, dass ich es wage, hier Warenkorbprodukte zu verwenden, und dass die DB Abfragen so weit wie möglich beschleunigen möchte. Es besteht kaum ein Zweifel daran, dass das Gesetz zu effizienten Ergebnissen führen wird, wenn dazwischen Wagenartikel eingreifen. Die Annahme ist, dass eine direkte Abfrage des Produkts es einfach verlangsamen würde.
Warum ist es spät? Es ist spekulativ, da nicht alle spezifischen Spalten und Daten im Referenzartikel geschrieben sind. Wenn das Warenkorbmodell direkt mit dem Produkt verknüpft ist, befinden sich mehrere Produkte im Warenkorb. Um die Produkte zu durchsuchen, müssen Sie dann die mit der Warenkorb-ID verbundenen Produkte aus dem Produktmodell extrahieren.
Angenommen, Sie möchten hier einen Index einfügen. Die Produkte sind in der Reihenfolge der Warenkorb-ID sortiert. Erstellen Sie eine weitere Spalte im Produktmodell, damit diese mit der Produkt-ID verknüpft werden kann. Der Index scheint langsam zu schreiben, da er eine zusätzliche Spalte erstellt. Das erste, woran ich dachte, war, den Index jedes Mal aufzunehmen, wenn ich das Produktmodell aufrufen wollte. Ich fragte mich, ob ich suchen würde. Zweitens wird das Schreiben verzögert, da jedes Mal, wenn ein Produkt hinzugefügt wird, ein Index hinzugefügt wird. Drittens müssen Sie bei der Suche nach verwandten Produkten aus dem Warenkorb nach den Produkten im Warenkorb aus der riesigen Produktliste suchen. Ein Wagen ändert sich häufig, und ich beziehe mich oft darauf. Unabhängig davon, wie stark das Produktmodell mit der Warenkorb-ID zusammenhängt, Ist es nicht schwierig, jedes Mal in den Warenkorb zu schauen und das Produktmodell abzufragen? Ich vermute, dass der dritte Grund die korrekte Verlangsamung ist, was wahrscheinlich der Grund für die Aufnahme des Produktmodells des Wagens ist.
Hier durch Positionieren des Produktmodells des Wagens als Mitte, Wenn Sie auf die Schaltfläche In den Warenkorb klicken, wird der Warenkorb dem Produkt zugeordnet. Ist es nicht erforderlich, eine Zwischenstufe zu haben, wenn Sie auf die Schaltfläche In den Warenkorb klicken? Dachte ich auch Es ist wahrscheinlich in Ordnung, eine direkte Verbindung zwischen dem Warenkorb und dem Artikel herzustellen.
Wenn Sie die Warenkorb-Taste drücken, erstellen Sie ein Warenkorb-Produktmodell basierend auf Ihrer Warenkorb-ID und Produkt-ID. Es ist ein Verständnis von Vermittlung.
class CreateShoppingCartProducts < ActiveRecord::Migration
def change
create_table :shopping_cart_products do |t|
t.integer :quantity, limit: 1, null: false
t.belongs_to :shopping_cart, index: true, foreign_key: true
t.belongs_to :product, index: true, foreign_key: true
t.timestamps null: false
end
end
end
Wie für den Index, Wenn Sie sich die Liste der Einkaufswagen ansehen, suchen Sie nach Artikeln im Einkaufswagen. Sie können direkt nach Produkten suchen, aber ich denke, Sie möchten nicht für jedes Produkt einen Index erstellen. In diesem Fall denke ich, dass ich den Index der Warenkorb-ID auf die Produkte im Warenkorb setzen und nach den Produkten aus der Produkt-ID suchen möchte.
Im Beispiel des obigen Artikels ist es falsch, den Index zwischen Warenkörben und Produkten im Warenkorb sowie zwischen Produkten im Warenkorb zu platzieren. Er sagt, lege keinen Index zwischen die Artikel im Warenkorb. Der Grund ist, dass Produkte aus dem Warenkorb gesucht werden, aber nicht umgekehrt. Dadurch wird der Index zwischen den Artikeln im Warenkorb gelöscht. In dem Artikel heißt es, Indizes wie folgt hinzuzufügen und zu entfernen:
python
class RemoveIndexShoppingCartProductsOnProductId < ActiveRecord::Migration
def up
remove_index(:shopping_cart_products, :product_id)
end
def down
add_index(:shopping_cart_products, :product_id)
end
end
Ich verstehe ein wenig, wie man indiziert, Ich hatte das Gefühl, dass das Design von DB noch nicht aufholte Betrachten wir ein einfaches DB-Entwurfsbeispiel.
Anstatt nur unwissentlich ein allgemeines DB-Konfigurationsbeispiel zu verwenden Es ist auch notwendig, einmal anzuhalten und darüber nachzudenken, warum ein solches Design hergestellt wird.
Recommended Posts