2009-07-18 1 views
2

Ich habe eine Produkttabelle mit 100000 Produkten und auch ich habe eine Benutzer-Tabelle mit 5000 Datensätzen. Angenommen, ein Benutzer kann uns Feedback zu einer beliebigen Kombination dieser Produkte geben. Nehmen wir an, er entscheidet sich für den Vergleich der Produkte 1,3,100,200,400,500 und so weiter. (Er kann uns ein anderes Feedback über andere Produkte senden)Speichern eines Arrays in einer Zeichenfolge (Datenbank Experten Frage)

Hier ist meine Frage, ich möchte nur wissen, was ein Experte Datenbank-Designer über diese Situation denken würde, wo die Anzahl der Produkte und Benutzer groß sind. Ein Weg, um diese Bewertungen zu speichern, sind in einer einzigen Zeichenfolge wie: 1 # 5 3 # 4 100 # 5 .... x # y bedeutet, dass er y Sterne zum Produkt mit ID von x gab. Ich kann diesen vote_string zum Beispiel in mein PHP-Skript laden und die Details daraus extrahieren.

So würde die Rating-Tabelle wahrscheinlich diese Struktur haben: id, user_id, vote_string

Ein anderer Weg ist dieses Feedback in dieser Struktur zu speichern:

Abstimmung Tabelle: id, user_id, Datum

vote_details Tabelle: vote_id, product_id, vote ==> (vote_id, products_id) als Primärschlüssel und vote_id ist Fremdschlüssel.

(oder können diese zwei Tabellen können in einer einzigen Tabelle wie id, user_id, product_id, Abstimmung [id, user_id, product_id] als Primärschlüssel komprimiert werden)

ich es sehr leichtes erraten also, in der die Abfrage zweites Design, aber es verbraucht mehr Platz und Zeit für jede Abfrage, auch im Falle des Löschens von Produkten ist es besser, das zweite Design zu verwenden. Was würden Sie tun?

Jede Art von Idee ist geschätzt.

Antwort

6

Sie wollen fast nie die Straße der Verkettung von Zeichenfolgen in Datenbank Land gehen. Das macht das Leben für die Abfrage sehr schmerzhaft - und nicht so, wie DBs Daten verarbeiten sollen.

denke, dass Sie Ihren zweiten Ansatz wollen. Sie müssen über Primärschlüssel und Ähnliches nachdenken {dh kann dieselbe Person zweimal für ein Produkt stimmen?}

+0

Guter Punkt über Verkettung. und ja, er kann es. Er kann fast viele Rückmeldungen über 1 Produkt im Vergleich zu anderen senden. – EBAG

+0

+1 stimme ich voll und ganz zu. – Halvard

2

Indem Sie es als eine Schnur, wie 1 # 5 3 # 4 100 # 5 speichern, machen Sie es schwieriger später um Berichte zu erstellen. Sie müssen auch jedes Mal eine Zeichenfolge bearbeiten, wenn Sie die Daten verwenden müssen. Für eine einfache Struktur wie diese sehe ich nicht den Vorteil.

Ich würde für eine Tabelle (ID, Benutzer-ID, Produkt-ID, Abstimmung) gehen, aber ich bin mir sicher, dass zwei auch in Ordnung ist.

2

Ehsan

von verketten Sie einfach jede Fähigkeit getötet haben die db hat Integrität erzwingen oder einen Index effizient zu suchen, wenn ein Benutzer für ein bestimmtes Produkt gewählt hat.