2011-01-21 28 views
9

Hiện tại tôi muốn phát triển ứng dụng từ điển cho thiết bị di động. Bản thân từ điển sử dụng tệp/cơ sở dữ liệu ngoại tuyến để dịch từ đó. nó chỉ dịch cho hai ngôn ngữ, ví dụ như từ điển tiếng Anh - tiếng Tây Ban Nha. Tôi đã có một thiết kế đơn giản trong đầu. nó sẽ là hai bảng: Bảng tiếng Anh và bảng tiếng Tây Ban Nha. cho mỗi bảng chứa của:thiết kế cơ sở dữ liệu cho ứng dụng từ điển

  • word_id = id đó sẽ là một chìa khóa ngoại cho bảng khác
  • word = chữ
  • word_description
  • correspond_trans_id = id của bảng khác đó là dịch từ này sang ngôn ngữ khác.

và cũng vì điều này là dành cho ứng dụng di động, cơ sở dữ liệu sử dụng SQLite.

Dữ liệu định nghĩa cho mỗi bảng đã được cung cấp theo thứ tự theo trường 'word' trên bàn. Tuy nhiên tôi vẫn đang suy nghĩ vấn đề nếu có bổ sung cho định nghĩa dữ liệu. Vì bảng sẽ được sắp xếp theo trường 'word', có phương pháp nào để đặt (chèn) bản ghi mới vẫn theo thứ tự theo từ không? hoặc bất kỳ ý tưởng nào để làm cho nó hiệu quả hơn?

Trả lời

14

Ít nhất nó cho mỗi bản dịch có một vài khả năng dịch tùy thuộc vào ngữ cảnh. nếu bạn muốn làm một cuốn từ điển hai chiều cho hai ngôn ngữ bạn cần ít nhất ba bảng:

ENGLISH 
ID | WORD 
1 | 'dictionary' 

GERMAN 
ID | WORD 
1 | 'lexikon' 
2 | 'wörterbuch' 

TRANSLATION_EN_DE 
ID_EN | ID_DE 
1  | 1 
1  | 2 

Hai bảng đầu tiên được chứa tất cả những từ mà được biết đến trong ngôn ngữ đó và ánh xạ hai chiều được thực hiện bằng việc lập bản đồ thứ 3 bàn. đây là một trường hợp ánh xạ n: n phổ biến. với hai bảng nữa bạn luôn có thể thêm một ngôn ngữ mới vào bạn là hình ảnh. Nếu bạn đang làm nó với một bảng, bạn sẽ có nhiều định nghĩa cho một từ duy nhất, do đó không có db chuẩn hóa.

bạn cũng có thể hợp nhất các bảng ngôn ngữ của mình thành một bảng xác định ngôn ngữ của từ bằng một cột khác (tham khảo bảng ngôn ngữ). trong trường hợp đó, bạn sẽ cần một chỉ mục 2 cột cho ngôn ngữ và chính từ đó.

+0

Hai bảng đầu tiên có thể được kết hợp với cột "ngôn ngữ" bổ sung. –

0

Tôi đồng ý với Matt - Để làm cho cuộc sống dễ dàng hơn nhiều, tôi sẽ gắn bó với một bảng. Ngoài ra nếu bạn định sử dụng CoreData, mô hình lập chỉ mục thiết kế cơ sở dữ liệu truyền thống khác với mô hình dựa trên đồ thị đối tượng khi làm việc trong Obj. C/IOS. Nó rất dễ suy nghĩ dọc theo các dòng truyền thống của truy vấn Chọn và tham gia bên trong/bên ngoài nhưng ví dụ cột 'correspond_trans_id' bình thường sẽ được xử lý bằng cách thiết lập 'mối quan hệ' khi xác định mô hình dữ liệu của bạn cho hai bảng (nếu bạn đang sử dụng CoreData tất nhiên).

Về bản chất, trừ khi có lý do chính đáng để có hai bảng, tôi sẽ chỉ chọn một.

Liên quan đến thứ tự, bạn có thể không cần giữ thứ tự các từ trong tập dữ liệu. Tôi đoán bạn muốn giữ mọi thứ theo thứ tự chữ cái mà sẽ liên quan đến một số công việc nếu dữ liệu đã từng thay đổi, thậm chí chỉ với một bảng.

Một lần nữa sử dụng CoreData, NSFetchRequest và NSSortDescriptor, rất dễ trả lại một tập hợp các bản ghi được sắp xếp theo một cột được chỉ định, giải phóng bạn khỏi phải lo lắng về việc sửa đổi và bổ sung vào cơ sở dữ liệu của bạn.

Nếu bạn có bất kỳ câu hỏi nào, hãy cho tôi một tiếng hét.

3

Bạn định làm gì khi một từ trong ngôn ngữ 1 có thể được dịch bằng nhiều từ trong ngôn ngữ 2? Tôi nghĩ rằng bạn phải sử dụng một cái gì đó giống như thiết kế của wursT để xử lý điều đó.

RE chèn bản ghi theo thứ tự bảng chữ cái: Bạn thường không lo lắng về thứ tự vật lý của các bản ghi trong cơ sở dữ liệu. Bạn sử dụng mệnh đề ORDER BY để truy xuất chúng theo bất kỳ thứ tự mong muốn nào và chỉ mục để làm cho nó hiệu quả. Không có gì trong tiêu chuẩn SQL để kiểm soát thứ tự vật lý. Umm, tôi nhớ lại về một cái gì đó về buộc một thứ tự vật lý trên một số cơ sở dữ liệu tôi đã làm việc với, tôi nghĩ rằng đó là MySQL, nhưng hầu hết sẽ không cung cấp cho bạn bất kỳ kiểm soát này. Tôi đã không làm việc với SQLite vì vậy tôi không thể nói nếu nó cung cấp một cách.

1

Chắc chắn mối quan hệ giữa các từ và bản dịch có thể là từ một đến nhiều hoặc nhiều người. Tôi không rõ làm thế nào bạn sẽ đại diện cho điều này trong mô hình của bạn. Có vẻ như bạn có thể cần ít nhất một bàn nữa.

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