2010-10-13 39 views
6

Tôi có một mô hình có 3 địa chỉ: pickup, dropoff và billing. Tôi tính địa chỉ thanh toán thường là địa chỉ nhận hoặc trả hàng, do đó, từ góc độ giao diện người dùng, tôi phải có tùy chọn "giống như". Nhưng từ quan điểm DB, tôi có nên lưu trường "giống như" hay tôi nên sao chép dữ liệu?Làm cách nào để lưu trữ dữ liệu "giống như"?

Trả lời

4

Bạn phải có cùng một Id của một hàng từ bảng Địa chỉ trong hai cột khác nhau, PickUp và DropOff. Bằng cách này, bạn không sao chép địa chỉ, không sử dụng một số địa chỉ sentinel, và có thể dễ dàng truy vấn để xem địa chỉ Pickup có giống như DropOff hay không. Nếu một trong những thay đổi này trong tương lai, bạn luôn có thể sửa đổi giá trị Id được lưu trữ trong cột tương ứng thành một địa chỉ mới.

+0

Phải ... giải pháp hiển nhiên. Tôi nghĩ rằng tôi đã nhầm lẫn vấn đề trong đầu của tôi khi tôi nghĩ điều này lên (có một "tiết kiệm như mặc định" là tốt ...) – mpen

2

Bạn có thể tạo bảng có tên 'Địa chỉ' và thực hiện Pickup, Dropoff, FK thanh toán cho bảng Địa chỉ đó.

2

Chỉ vì địa chỉ là cùng một địa chỉ thực không có nghĩa là địa chỉ khái niệm giống nhau. Thực sự, địa chỉ của John Doe có thể là "123 Elm St.", nhưng về mặt khái niệm địa chỉ của anh ta là "địa chỉ gửi thư của John Doe".

Đặc biệt, đối với địa chỉ tôi sẽ nói có thể và nên được nhân đôi trong vòng một cơ sở dữ liệu vì trường hợp đơn giản này: xem xét hai người sống ở cùng một địa chỉ. Bây giờ một trong số họ di chuyển. Nếu bạn chỉ lưu trữ địa chỉ một lần, hãy cập nhật địa chỉ của "mover", sau đó cập nhật địa chỉ của bạn cùng phòng ban đầu.

Nhưng nói chung, hãy xem xét cách dữ liệu được gắn với dữ liệu khác. Nếu nhiều thứ có thể liên quan đến nó, hãy chắc chắn rằng một sự thay đổi cho một thứ sẽ ảnh hưởng đến tất cả.

+0

Điểm tốt, phụ thuộc vào kịch bản mặc dù. – mpen

1

alt text

+0

Haha ... dễ thương! Bạn không cần phải vẽ cho tôi một sơ đồ, nhưng cảm ơn :) – mpen

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