2010-06-19 22 views
11

Chúc ngày vui vẻ!Làm thế nào để sử dụng lược đồ cơ sở dữ liệu đa ngôn ngữ với ORM?

Tôi đang tìm cách tốt nhất để triển khai giản đồ cơ sở dữ liệu đa ngôn ngữ, cách tiếp cận tôi sử dụng giống như ở đây: What are best practices for multi-language database design? (một bảng có dữ liệu trung lập ngôn ngữ và một cho tất cả bản dịch). Nó có vẻ là tốt và sạch sẽ và không giới hạn số lượng ngôn ngữ có thể.

Nhưng tôi muốn sử dụng ORM đơn giản (như LINQ trong C#, Outlet cho PHP v.v.) trong đó mỗi bảng được ánh xạ tới lớp thực thể. Điều này có thể hiệu quả nhưng các truy vấn trở nên phức tạp hơn.

Có thể có một số kỹ thuật đặc biệt để sử dụng DB shema như vậy với ORM? Hoặc tôi có thể hưởng lợi từ các ORM phức tạp hơn hỗ trợ ánh xạ phức tạp hơn?

Cảm ơn trước!

Trả lời

18

Chỉ sử dụng một bảng cho tất cả các bản dịch có thể dẫn đến hiệu suất nghiêm trọng và các vấn đề phức tạp đối với mọi thao tác (chọn/chèn/cập nhật/xóa); chỉ cần thử nó để hiểu những gì tôi có ý nghĩa.

Sau đó tôi sẽ đi theo phương pháp sau (hai bảng cho mỗi đối tượng "có thể dịch"), có vẻ như là sự cân bằng giữa hiệu suất, độ phức tạp và các vấn đề bảo trì.

product 
    - id (PK) 
    - number1 
    - number2 
    - date1 
    - date2 
    ... 

product_i18n 
    - id (PK) 
    - product_id (FK) 
    - language_id (FK) 
    - string1 
    - string2 
    ... 

language 
    - id (PK) 
    - name 

Kiểm tra như thế nào nó được thực hiện với Propel ORM (PHP): http://propelorm.org/blog/2011/01/11/propel-gets-i18n-behavior-and-why-it-matters.html

HTH

+0

Cảm ơn, rằng chương trình DB cùng tôi sử dụng, nhưng unfortunatelly ORMs mà tôi sử dụng (LINQ2SQL trên NET và Outlet cho PHP) không hỗ trợ trực tiếp các kịch bản như vậy. Tôi chắc chắn sẽ nhìn vào Propel. – artvolk

+0

làm thế nào bạn sẽ làm một dự phòng trong trường hợp này? – GorillaApe

+0

Tại sao bạn cần một dự phòng? –

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