2009-11-04 4 views
5

Ich habe einen Kunden und Manager, zwei Tabellen unabhängig. Meine Kundentabelle hat fast hundert Millionen Datensätze, während Manager-Tabelle 100 Datensätze haben. Jetzt bin ich in der Lage, die Kunden dem Manager zuzuordnen. Regeln sind wie folgtViele zu viele Beziehung

  1. Ein Manager kann mehrere Kunden haben.
  2. Ein Kunde kann mit mehreren Managern zugeordnet werden.

Was ist der beste DB-Entwurf, um das zu lösen? Erstellen Sie ManagerCustomerMapping ist eine Idee. Aber ich bin nicht glücklich damit. deswegen führe ich einen sehr großen Tisch. Beispielsweise. Wenn der Manager1 und der Manager2 mit allen Kunden verknüpft sind, hat diese Tabelle zweihundert Millionen Datensätze.

+1

Können Sie erklären, welche Art von Abfragen das Schema lösen soll? – JPCF

+0

Können Sie die Beziehung zwischen Managern und Kunden etwas genauer erklären - insbesondere warum hätte ein Kunde 2+ Manager? –

+0

Portable SQL ist nicht der effizienteste Ansatz für Viele-zu-Viele-Beziehungen. MEINER BESCHEIDENEN MEINUNG NACH. – alecco

Antwort

10

Das beste DB-Design, trotz Ihrer Bedenken, ist genau das, was Sie beschrieben haben. Mit anderen Worten, haben Sie eine Mapping-Tabelle ManagerCustomerMapping.

Immer Beginnen Sie mit 3NF und modifizieren Sie es nur dann, wenn es echte Leistungsprobleme gibt, die nicht auf andere Weise gelöst werden können.

Wenn Ihr Unternehmen so groß ist, wie es aussieht (mit 100 Millionen Kunden), sollte der Plattenspeicher kein Problem darstellen, und eine ordnungsgemäße Indexierung der Zuordnungstabelle sollte Performance-Probleme mindern.

Und ja, wenn jeder Kunde zwei verschiedenen Managern zugeordnet ist, werden Sie 200 Millionen Datensätze haben. Das ist kein Problem. In der Art von Geschäften, in denen ich arbeite (DB2 auf System z), handelt es sich um eine mittelgroße Tabelle.

Das Schöne an SQL ist, dass Sie ein DBMS meistens austauschen können, wenn es nicht gut genug funktioniert.

Zweihundert Millionen Zeilen von zwei ID-Spalten auf die durchschnittliche Datenbank, und dies ist der beste Weg zu gehen, besonders, wenn es die Möglichkeit wären nicht belastend sein, dass ein Kunde (oder vice kann nicht an einen Manager vergeben werden versa). Jede andere Lösung, die versucht, eine Kunden-ID in die Manager-Tabelle zu setzen (oder eine Manager-ID in die Kundentabelle), wird in diesem Fall Speicherplatz verschwenden.

+0

wird nicht nur eine Zwei-Tabellen-Lösung Platz verschwenden, sondern es wird auch verhindern, dass eine Viele-zu-Viele-Beziehung ausgedrückt wird. Gute Antwort, Pax. –

0

Ihre Zahlen sind ziemlich faszinierend. Wie viele Kunden kann ein Account Manager kennen - 100? Wie viele Manager hast du, 1M? Wäre ein Verkäufer eine bessere Beschreibung? Wenn ja, vielleicht sollten Sie Data Warehouse (DW) Ansatz betrachten, zum Beispiel ein Kimball Stern würde wie folgt aussehen:

TABLE dimCustomer (KeyCustomer, Name, Address, ...etc) 
TABLE dimSalesPerson (KeySalesPeson, Name, Phone, Area, ...etc) 
TABLE dimProduct (KeyProduct, Description, CatalogPrice, ...etc) 
TABLE dimDate (KeyDate, FullDate, Year, Month, DayOfWeek, IsHoliday, etc...) 
TABLE factSales (KeyCustomer, KeyProduct, KeySalesPerson, KeyDate, Quantity, Ammount, OrderID, ..) 

Die factSales Tabelle einen Umsatz von jedem Punkt erfassen würde, zugegebenermaßen großen Tisch, aber Sie würden nicht brauchen Um Kunden überhaupt zu Managern zuzuordnen, suchen Sie einfach in der Faktentabelle nach dem letzten Vertriebsmitarbeiter, der Kontakt zum Kunden hat. Irgendwie denke ich, dass dies näher am Geschäftsmodell sein könnte.
Wenn es kein Geheimnis ist, welche Art von Geschäft ist diese Datenbank-Tracking?

0

Jetzt festhalten. Sie geben an, dass allen Kunden ein Manager zugewiesen werden kann? Ein Manager könnte für ein hundert Millionen Kunden verantwortlich sein? Ehrlich gesagt, es scheint, dass da etwas nicht stimmt.

Wenn Sie einen einfachen Manager < -> Kundenbeziehung wie beschrieben haben, dann ist das von Ihnen beschriebene Design (eine Viele-zu-Viele-Verknüpfungstabelle) korrekt.Aber wenn Sie wirklich alle Kunden mit mehreren der Manager verbinden wollen, dann schätze ich, dass es eine Hierarchie von Managern gibt, von denen Sie uns noch nicht erzählt haben - das heißt, ein Manager kann andere Manager verwalten, wer kann Verwaltung anderer Manager, die dann die Kunden verwalten (mit zusätzlichen Ebenen möglich und direkte Verwaltung der Kunden gemischt mit dem Management von Managern auf jeder Ebene).

Sie sehen diese Art von Struktur in Multi-Level-Marketing-Organisationen und auch in Provisionssystemen in bestimmten Branchen (ich zufällig gerade zufällig in der Versicherung neulich). Wenn das der Fall ist, müssen Sie die Beziehung zwischen den Managern getrennt ausdrücken (entweder mit einer selbstreferenziellen Spalte in der Manager-Tabelle, wenn nur ein direkter Eltern-Manager für jeden Manager möglich ist, oder eine separate Tabelle, falls dies der Fall ist) viele zu viele) und verbinden die Kunden nur mit ihrem ultimativen, direkten Manager.