Frage

Ich programmiere eine Website, die Nutzer die neuesten Anzeigen detaillierten Felder für verschiedene Arten von Gegenständen schreiben erlaubt sie verkaufen. Aber ich habe eine Frage zu dem besten Datenbankschema.

Die Seite viele Kategorien Merkmale (z. B. Autos, Computer, Kameras) und jede Kategorie von Anzeigen ihre jeweils eigenen Felder haben. Zum Beispiel Autos haben Attribute wie Anzahl der Türen, Marke, Modell und Leistung, während Computer-Attribute haben wie CPU, RAM, Motherboard Modell, etc.

Jetzt, da sie alle Inserate sind, war ich einer polymorphen Ansatz zu denken, eine übergeordnete DIASHOW Tabelle erstellen und eine andere Kind-Tabelle für jede der verschiedenen Kategorien (Computer, Autos, Kameras). Jedes Kind Tisch eine listing_id hat, die die DIASHOW TABLE wird Link zurück. Also, wenn ein Eintrag geholt wird, wäre es eine Reihe von Anzeigen nach der verknüpften Zeile in der zugehörigen untergeordneten Tabelle.

verbunden holen
LISTINGS
-listing_id
-user_id
-email_address
-date_created
-description

CARS
-car_id
-listing_id
-make
-model
-num_doors
-horsepower

COMPUTERS
-computer_id
-listing_id
-cpu
-ram
-motherboard_model

Jetzt ist dieses Schema ein gutes Design-Muster oder gibt es bessere Möglichkeiten, dies zu tun?

ich als einziges Erbe aber schnell aus dem Gedanken, gebürstet, da die Tabelle schnell zu zu groß werden, aber dann kam wieder ein Dilemma in dem Sinne - wenn der Benutzer hat eine globale Suche über alle Listen, dann das bedeutet, ich muß Abfrage jedes Kind Tisch getrennt. Was passiert, wenn ich über 100 verschiedene Kategorien haben, wäre es nicht ineffizient sein?

ich auch von einem anderen Ansatz gedacht, wo es eine Master-Tabelle (meta-Tabelle), die die Felder in jeder Kategorie und ein Feld Tabelle definiert, dass speichert die Feldwerte von jeder Auflistung, aber würde das gehen gegen Datenbank Normalisierung?

Wie würden Websites wie Kijiji es tun?

War es hilfreich?

Lösung

Ihr Datenbank-Design ist in Ordnung. Kein Grund zu ändern, was du hast. Ich habe die Suche ein paar Möglichkeiten getan gesehen. Eine davon ist Ihre Suche Stored Procedure verbinden alle die Tabellen haben Sie über und Index der Spalten suchen müssen gesucht werden. Der zweite Weg, ich habe es getan gesehen was ziemlich gut funktioniert hat, einen Tisch zu haben, die nur für die Suche verwendet wird, die eine Kopie von was auch immer Feldern bekommt, dass Bedarf durchsucht werden. Dann würden Sie Trigger auf diesen Feldern legen und die Suchtabelle aktualisieren.

Sie haben beide Nachteile aber ich zog die ersten in die zweite.

EDIT

Sie müssen die folgenden Tabellen.

Kategorien - Ich würde - Beschreibung

CategoriesListingsXref - Kategorie ID - ListingId

Mit diesem Querverweis Modell, das Sie alle Ihre Angebote für eine bestimmte Kategorie während der Suche teilnehmen können. Dann fügen Sie ein wenig dynamische SQL (weil es einfacher ist, zu verstehen) und bauen Sie Ihre Abfrage das Feld schließen (n) gegen suchen möchten und Anruf auf Abfrage ausführen.

Das ist es.

EDIT 2 Dies scheint ein wenig größer Diskussion zu sein, dass wir in diesen Kommentarfelder Nachtclu. Aber alles, was wir würden diskutieren können durch Lesen der folgenden Post zu verstehen.          http://www.sommarskog.se/dyn-search-2008.html

Es ist wirklich vollständig und zeigen Ihnen mehr als 1, wie es mit Vor-und Nachteilen zu tun. Viel Glück.

Andere Tipps

ich glaube, der Entwurf, den Sie gewählt haben, wird gut sein für das Szenario, das Sie gerade beschrieben wurde. Obwohl ich nicht sicher bin, ob die Unterklasse-Tabellen sollten ihre eigene ID haben. Da ein CAR ein Eintrag ist, macht es Sinn, dass die Werte aus der gleichen „Domäne“ sind.

In der typischen Kleinanzeigen-Website, die Daten für eine Anzeige geschrieben werden einmal und dann ist grundsätzlich schreibgeschützt. Sie können dies nutzen und speichern Sie die Daten in einem zweiten Satz von Tabellen, die gerade in der Art und Weise mehr optimiert sind für die Suche Sie die Benutzer suchen möchten. Auch nur die Suche Problem wirklich existiert für eine „allgemeine“ Suche. Sobald der Benutzer eine bestimmte Art von Anzeige nimmt, können Sie in den Unterklasse-Tabellen wechseln, um erweiterte Suche (RAM> 4gb, cpu = überwältigt) zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top