10/10/2018, 00:17

Cấu trúc dữ liệu như thế nào hợp lý nhất ?

Nhờ các bác góp ý một chút về cách xây dựng cơ sở dữ liệu cho 1 hộp thư điện tử , sao cho :

- 1 email có thể được gán nhiều label như Gmail ()
- có nhiều email thuộc 1 label


Mình hình dung đây là quan hệ N-N và đang tổ chức như sau :

tblLabel :

ID (auto_increment, PK)
LabelName (varchar)
Messages (text) *

* Trường Messages chứa 1 chuỗi các MessageID phân cách bởi dấu ","

tblEmail :

MessageID (varchar, PK)
Labels (text) *
Subject (varchar)
Sender (varchar)
Recipients (text)
Contents (text)
Status (boolean)

* Trường Labels chứa 1 chuỗi tên các label, phân cách bởi dấu ","


Làm như vậy có gì không ổn ? Cách tổ chức sao cho khi lấy mẩu tin và thiết lập, di chuyển giữa các label được linh hoạt nhất là gì ? Mong các bác cho những lời khuyên
3do viết 02:29 ngày 10/10/2018
bạn thử viết những câu sql dùng để truy vấn, sửa, xóa trong chương trình của bạn rồi bạn sẽ tự khắc thấy được thiết kế nào là hợp lí
sacroyant viết 02:24 ngày 10/10/2018
Cách thông dụng để xử lý quan hệ N-N như trên là ngoài 2 bảng Label và Email, người ta tạo thêm 1 bảng trung gian định nghĩa quan hệ giữa Label với Email qua PK của mỗi bảng đó.

Ý tưởng của tớ là bỏ bớt 1 bảng để giảm truy vấn database. Lưu theo chuỗi cũng giảm số trường phải truy vấn. Mỗi khi thay đổi thì thường là chỉ cần xử lý trên chuỗi sau đó update lại, việc này cũng đơn giản. Tên 1 label khoảng 30 ký tự, 1 message được gán 20 label thì chuỗi cũng chỉ đến 600 ký tự

Hiện tớ đang làm thế nhưng không chắc chắn nó có lợi hơn cách truyền thống không
nguyen_lan2005 viết 02:18 ngày 10/10/2018
Nếu ở Sài Gòn, tham gia những chuyên đề, làm ứng dụng, đề tài do Lân trực tiếp hỗ trợ,chia sẻ lâu dài, phân tích thiết kế, xây dựng, ....
========================
www.becivn.net
www.nguyenlan.com
www.nguyenlan.net
YH Lanit_itec
sacroyant viết 02:29 ngày 10/10/2018
Được gửi bởi nguyen_lan2005
Nếu ở Sài Gòn, tham gia những chuyên đề, làm ứng dụng, đề tài do Lân trực tiếp hỗ trợ,chia sẻ lâu dài, phân tích thiết kế, xây dựng, ....
========================
Nếu ở Pháp, hãy tham gia những chuyên đề phát triển công nghệ do giáo sư tiến sĩ, viện sĩ viện hàn lâm Paris Sacroyant Nguyen và các đồng sự trực tiếp giảng dạy
zoejoe viết 02:21 ngày 10/10/2018
Được gửi bởi sacroyant
Nếu ở Pháp, hãy tham gia những chuyên đề phát triển công nghệ do giáo sư tiến sĩ, viện sĩ viện hàn lâm Paris Sacroyant Nguyen và các đồng sự trực tiếp giảng dạy
Thế có cho em chức gì trong này không vậy ?? Phó viện sĩ được hem anh
sacroyant viết 02:21 ngày 10/10/2018
Được gửi bởi zoejoe
Thế có cho em chức gì trong này không vậy ?? Phó viện sĩ được hem anh
Các đồng sự nghĩa là bao gồm zoejoe, 3do, zmt... Toàn hàng nội chất lượng ngoại đó

Thế cậu không cho tớ ý kiến về kiểu cấu trúc dữ liệu kia à

Tớ còn 1 bảng tblBookmarks chơi kiểu này :

tblBokmarks

UserID (varchar)
Link(text)

Dữ liệu trong trường Link có dạng :

title1,link1,no1|title2,link2,no2|title3,link3,no3 |....

Theo các bác có khả thi không
herofit viết 02:30 ngày 10/10/2018
thía không có herofit àh
TheHeTre viết 02:17 ngày 10/10/2018
Được gửi bởi sacroyant
Nhờ các bác góp ý một chút về cách xây dựng cơ sở dữ liệu cho 1 hộp thư điện tử , sao cho :

- 1 email có thể được gán nhiều label như Gmail ()
- có nhiều email thuộc 1 label


Mình hình dung đây là quan hệ N-N và đang tổ chức như sau :

tblLabel :

ID (auto_increment, PK)
LabelName (varchar)
Messages (text) *

* Trường Messages chứa 1 chuỗi các MessageID phân cách bởi dấu ","

tblEmail :

MessageID (varchar, PK)
Labels (text) *
Subject (varchar)
Sender (varchar)
Recipients (text)
Contents (text)
Status (boolean)

* Trường Labels chứa 1 chuỗi tên các label, phân cách bởi dấu ","


Làm như vậy có gì không ổn ? Cách tổ chức sao cho khi lấy mẩu tin và thiết lập, di chuyển giữa các label được linh hoạt nhất là gì ? Mong các bác cho những lời khuyên
Hehe, các bác chúa spam mà không giúp người à? Sau đây là trả lời của hàng Việt Nam chất lượng Lào

Mô hình N-N dạy trong trường học bài vở quá nên thành ra khi triển khai thực tế có vẻ chưa ổn lắm.
Theo mình thì sẽ có 3 bảng:
Code:
tblLabel : 
      LabelID (auto_increment, PK) 
      LabelName (varchar)
Code:
tblEmail :   
   MessageID (varchar, PK)
   Subject (varchar) 
   Sender (varchar)
   Recipients (text) 
   Contents (text)
   Status (boolean)
và bảng mới để lưu quan hệ của 2 bảng trên:
Code:
LabelID
MessageID
sacroyant viết 02:32 ngày 10/10/2018
@ TheHeTre : Cảm ơn bác. Đêm qua tham khảo cấu trúc mấy bảng liên quan đến tin nhắn trong vBulletin, thấy nó làm cũng hay hay., nhưng vẫn cần đến 3 bảng và không "sáng tạo" bằng mình

Cách của bác nêu ra tôi vẫn áp dụng từ trước đến giờ đấy chứ.

Được gửi bởi sacroyant
Cách thông dụng để xử lý quan hệ N-N như trên là ngoài 2 bảng Label và Email, người ta tạo thêm 1 bảng trung gian định nghĩa quan hệ giữa Label với Email qua PK của mỗi bảng đó...
Theo các bác có cách nào khả dĩ chỉ dùng 1 bảng mà được không nhỉ
Bài liên quan
0