Nền tảng lý thuyết nào bạn đã tìm thấy cho thiết kế cơ sở dữ liệu "Mẫu lưu trữ"? Tôi đoán là không. Đó là một lớp phức tạp dựa trên tiền đề không có thật: rằng "lớp kiên trì" là thứ bạn cần phải tách biệt. Từ những gì tôi có thể nói, nó đóng vai trò của việc lập trình rộng rãi về sự thiếu hiểu biết về các nguyên tắc thiết kế quan hệ và những người mắc kẹt đến một trung tâm giả định của thiết kế OO của ứng dụng. Nhưng nó không biện minh cho sự tồn tại của nó trên lý trí, chứ chưa nói đến lý thuyết, căn cứ.
Thiết kế cơ sở dữ liệu One True Path đã không thay đổi sau 30 năm: phân tích dữ liệu. Tìm các khóa và ràng buộc và các mối quan hệ nhiều-một. Thiết kế bảng của bạn theo mẫu thông thường Boyce-Codd. Sử dụng các khung nhìn và các thủ tục được lưu trữ để tạo điều kiện truy cập dữ liệu.
Mặc dù không được yêu cầu, nhưng DBMS SQL cung cấp lớp cách ly tốt hơn bất cứ thứ gì lập trình viên có thể cung cấp. Đúng là khi cơ sở dữ liệu thay đổi SQL được sử dụng để truy cập, nó có thể phải thay đổi. Nhưng lưu ý rằng điều đó đúng bất kể có hay không có lớp hòa giải . Miễn là ứng dụng sử dụng các khung nhìn và các thủ tục được lưu trữ để truy cập DBMS, các công cụ kỹ thuật SQL thông thường sẽ chỉ ra khi thay đổi cơ sở dữ liệu cơ bản làm mất hiệu lực các khung nhìn và các thủ tục được lưu trữ.
Tất nhiên, đó là thách thức. Một lớp trung gian cung cấp ảo giác về sự cô lập và sự thoải mái cho người lập trình viết mã, anh ta biết cách làm. Học thiết kế cơ sở dữ liệu và SQL đòi hỏi phải học một cái gì đó mới. Hầu hết mọi người thà chết chứ không nghĩ, và nhiều người thành công.
Ai đó trong nhóm của bạn sẽ nghi ngờ rằng việc viết SQL để hỗ trợ 200 lớp của bạn là rất nhiều công việc. Không còn nghi ngờ gì nữa. Nhưng ít nhất đó là công việc hữu ích . Nếu bạn thiết kế cơ sở dữ liệu bằng cách bắt chước thiết kế OO của mình, bạn cũng sẽ làm được rất nhiều việc, phần lớn là vô dụng và đánh bại hầu hết những gì DBMS cung cấp cho bạn.
Ví dụ, bạn suy ngẫm về Đơn vị công việc phản ánh trong cơ sở dữ liệu (như bảng hoặc bảng, tôi đoán). Đơn vị của công việc là một built-in dịch vụ của DBMS: begin transaction
... cập nhật cơ sở dữ liệu ... commit transaction
. Không có gì để mô hình hóa, ngoài việc ánh xạ các lớp của bạn vào các bảng cơ sở dữ liệu trong SQL.
Câu hỏi của bạn đã được đăng 4 năm trước. Tôi đang trả lời vì nó đã được "cập nhật" theo một cách nào đó gần đây, cho thấy nó vẫn được ai đó quan tâm. Tôi hy vọng câu trả lời của tôi khuyến khích người đọc áp dụng lý thuyết quan hệ cơ bản cho vấn đề thay vì áp dụng một cách giải quyết vô nghĩa.