2009-11-04 44 views
5

Tôi có một khách hàng và người quản lý, hai bảng độc lập. Bảng khách hàng của tôi có gần trăm triệu bản ghi trong khi bảng quản lý có 100 bản ghi. Bây giờ tôi đang ở vị trí để ánh xạ khách hàng đến người quản lý. Quy tắc như sauNhiều mối quan hệ với nhiều người

  1. Một người quản lý có thể có nhiều khách hàng.
  2. Một khách hàng có thể lập bản đồ với nhiều người quản lý.

DB thiết kế tốt nhất để giải quyết vấn đề này là gì? Tạo ManagerCustomerMapping có thể là một ý tưởng. Nhưng tôi không hài lòng với nó. vì điều này dẫn tôi một cái bàn rất lớn. Ví dụ. Nếu Manager1 và Manager2 được ánh xạ với tất cả khách hàng thì bảng này có 2 trăm triệu bản ghi.

+1

Bạn có thể giải thích loại truy vấn nào bạn muốn lược đồ giải quyết? – JPCF

+0

Bạn có thể giải thích mối quan hệ giữa Người quản lý và Khách hàng nhiều hơn một chút không - cụ thể, tại sao Khách hàng lại có hơn 2 Người quản lý? –

+0

SQL di động không phải là cách tiếp cận hiệu quả nhất cho quan hệ nhiều-nhiều. IMHO. – alecco

Trả lời

10

Thiết kế DB tốt nhất, bất chấp sự hiểu lầm của bạn, chính xác là những gì bạn mô tả. Nói cách khác, có một bảng ánh xạ ManagerCustomerMapping.

Luôn luôn bắt đầu bằng 3NF và sửa đổi khi và chỉ khi có vấn đề về hiệu năng thực sự không thể giải quyết theo những cách khác.

Nếu doanh nghiệp của bạn có diện mạo lớn (với 100 triệu khách hàng), bộ nhớ đĩa không phải là vấn đề và việc lập chỉ mục thích hợp của bảng ánh xạ sẽ giảm thiểu bất kỳ mối quan tâm nào về hiệu suất.

Và có, nếu mỗi khách hàng ánh xạ tới hai người quản lý khác nhau, bạn sẽ có 200 triệu bản ghi. Đó không phải là một vấn đề. Trên các loại cửa hàng tôi làm việc trong (DB2 trên hệ thống z), đó là về một bảng cỡ trung bình.

Vẻ đẹp của SQL là bạn chủ yếu có thể hoán đổi một DBMS nếu nó không hoạt động đủ tốt.

Hai trăm triệu hàng hai cột ID sẽ không phù hợp với cơ sở dữ liệu trung bình, và đây là cách tốt nhất để đi, đặc biệt là nếu có khả năng khách hàng không được phân bổ cho người quản lý (hoặc phó versa). Bất kỳ giải pháp nào khác cố gắng đặt ID khách hàng vào bảng người quản lý (hoặc ID người quản lý vào bảng khách hàng) sẽ lãng phí dung lượng trong trường hợp đó.

+0

không chỉ là một không gian giải pháp hai bàn, mà còn ngăn chặn việc thể hiện mối quan hệ nhiều-nhiều. Phản ứng tốt, pax. –

0

Số của bạn khá hấp dẫn. Có bao nhiêu khách hàng có thể người quản lý tài khoản biết - 100? Bạn có bao nhiêu người quản lý, 1 triệu? Một người bán hàng có phải là mô tả tốt hơn không? Nếu vậy, có lẽ bạn nên xem xét cách tiếp cận kho dữ liệu (DW), ví dụ một ngôi sao Kimball sẽ trông như thế:

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, ..) 

Bảng factSales sẽ chụp bán hàng của tất cả các mục, bảng phải thừa nhận là lớn, nhưng bạn sẽ không cần để ánh xạ khách hàng đến người quản lý, chỉ cần tìm kiếm bảng thực tế và tìm người bán hàng cuối cùng đã liên hệ với khách hàng. Bằng cách nào đó tôi nghĩ rằng điều này có thể gần gũi hơn với mô hình kinh doanh.
Nếu đó không phải là bí mật, loại doanh nghiệp nào theo dõi cơ sở dữ liệu này?

0

Bây giờ, hãy tiếp tục. Bạn tuyên bố rằng người quản lý có thể được chỉ định cho TẤT CẢ khách hàng? Người quản lý có thể chịu trách nhiệm cho một trăm triệu khách hàng? Thành thật mà nói, có vẻ như có gì đó sai ở đó.

Nếu bạn có người quản lý đơn giản < -> mối quan hệ khách hàng như mô tả, thì thiết kế bạn mô tả (bảng liên kết nhiều người) là chính xác.Nhưng nếu bạn thực sự muốn liên kết TẤT CẢ khách hàng với một vài người quản lý, tôi đoán rằng có một hệ thống cấp bậc của người quản lý mà bạn chưa nói với chúng tôi - đó là, người quản lý có thể quản lý những người quản lý khác, người có thể quản lý các nhà quản lý khác, những người quản lý khách hàng (với các cấp bổ sung có thể và quản lý trực tiếp của khách hàng được trộn lẫn với việc quản lý người quản lý ở mọi cấp).

Bạn thấy loại cấu trúc này trong các tổ chức tiếp thị đa cấp và cũng trong các hệ thống hoa hồng trong các ngành nhất định (tôi đã tình cờ gặp phải nó trong bảo hiểm ngày hôm sau). Nếu trường hợp đó xảy ra, bạn cần phải thể hiện mối quan hệ giữa các nhà quản lý một cách riêng biệt (với cột tự tham chiếu trong bảng người quản lý, nếu chỉ có một người quản lý cha mẹ trực tiếp có thể cho mỗi người quản lý hoặc một bảng riêng biệt nếu đó là nhiều đến nhiều) và chỉ liên kết khách hàng với người quản lý trực tiếp, cuối cùng của họ.

Các vấn đề liên quan