Xin được gợi ý, chia sẻ việc xây dựng CSDL và cách lọc dữ liệu

MinhKhai

Giải pháp Ếc-xào
Tham gia ngày
16 Tháng tư 2008
Bài viết
614
Thích
310
Điểm
735
#1
Kính gửi các anh chị
Em đang có nhu cầu xây dựng CSDL đơn giản trên Excel với mục đích khi cần tìm kiếm sẽ ra kết quả chính xác nhất.
Em muốn xây dựng file tìm kiếm về ủy quyền. Khi nhập tên (hoặc mã )1 công ty ở ô tìm kiếm, các kết quả liên quan đến Công ty tìm kiếm sẽ được hiện ra: Cụ thể như sau
* Khi nhập vào ô tìm kiếm Công ty ABC, Vùng 1 sẽ list ra các Cty ủy quyền cho Cty ABC, Vùng 2 sẽ list ra những Công ty được Cty ABC ủy quyền, Vùng 3 sẽ list ra các cấp phó của Cty ABC được GĐ Cty ABC ủy quyền cho, Vùng 4 sẽ list ra những đơn vị trực thuộc được Cty ABC ủy quyền cho và vùng 5 sẽ list ra những cá nhân được Cty ABC ủy quyền cho.

Trong file đính kèm em đã mô tả yêu cầu của mình bằng hình vẽ, mong các anh chị mở xem và cho cách giải quyết,
+ Cách xây dựng sheet dữ liệu nguồn (Cấu trúc dữ liệu nguồn)
+ Code VBA dùng để khi nhập thông tin tìm kiếm, các kết quả tìm kiếm được liệt kê ra như yêu cầu trên

Trân trọng cảm ơn
 

File đính kèm

Hoang2013

Thành viên gắn bó
Tham gia ngày
15 Tháng tám 2013
Bài viết
1,625
Thích
1,591
Điểm
100
Tuổi
5
#2
Chí ít bạn cần nhập đủ vài tên & địa chỉ vô các ô của sơ đồ; Vậy bạn mới giúp người khác không trong ngành mường tượng ra vấn đề chứ nhỉ?
Còn như hiện tại thì bạn chờ những người trong ngành có khả năng mà thôi!
 

MinhKhai

Giải pháp Ếc-xào
Tham gia ngày
16 Tháng tư 2008
Bài viết
614
Thích
310
Điểm
735
#3
Chí ít bạn cần nhập đủ vài tên & địa chỉ vô các ô của sơ đồ; Vậy bạn mới giúp người khác không trong ngành mường tượng ra vấn đề chứ nhỉ?
Còn như hiện tại thì bạn chờ những người trong ngành có khả năng mà thôi!
Cảm ơn bạn đã quan tâm
Mình đang chưa biết tạo CSDL như thế nào để hiệu quả (tạo cấu trúc như nào để thuận tiện tìm kiếm)
Mình tạo thử CSDL theo cách nghĩ của mình trong file đính kèm để mọi người thêm hiểu. Cách tạo của mình khiến dữ liệu nguồn sẽ bị trùng lặp rất nhiều. Kể cả việc chấp nhận trùng lặp thì cũng chưa biết cách nào để việc tìm kiếm được hiển thị chính xác
 

File đính kèm

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
3,787
Thích
9,104
Điểm
860
#4
Nguyên tắc cơ bản bạn làm theo thế này:
1. Tạo bảng dữ liệu: mỗi một đối tượng có một bảng riêng, mỗi bảng bảng của đối tượng đó có cột MÃ là duy nhất: ví dụ danh mục công ty
MA CT, TEN CTY, TINH_TP, DIA_CHI, MST,...
2. Chú ý các loại thông tin phân chia thành các cột, mỗi cột chỉ ghi một loại. Những thông tin quan hệ với nhau nhau chia thành các cột khác nhau:
Ví dụ trong bảng ghi nhận ủy quyền;
MA_GIAO_DICH, CTY_UQ, CTY_NHAN_UY,....
3. Các mảng/sheet phải có quan hệ với nhau, tức là các cột ở các bảng phải tìm được nhau, trong đó danh mục đối tượng quan hệ với bảng giao dịch, loại đó ta gọi là quan hệ 1 - nhiều,...
4. Dùng kiến thức và công cụ chạy được lệnh SQL để truy vấn các bảng dữ liệu theo như các vấn đề bạn muốn. Kiến thức nền tảng bạn phải biết về SQL với các câu lệnh: SELECT,... INNER JOIN, LEFT JOIN,... (Bạn có thể tìm trên Youtube "Bài 1 - Tạo báo cáo động" để biết cách dùng SQL với CSDL có quan hệ.
 

Hoang2013

Thành viên gắn bó
Tham gia ngày
15 Tháng tám 2013
Bài viết
1,625
Thích
1,591
Điểm
100
Tuổi
5
#5
Cái này mình đang mù mờ lắm. Nhưng cũng mạnh dạn gợi í bạn ba bảng đầu như sau:
1./ Bảng Công ti tìm kiếm:
PHP:
'
Mã CT   Tên Công ty     Địa chỉ         Mã số thuế       Đại diện pháp luật    '
ABC    Công ty ABC    Địa chỉ Cty      A35 A0000 1       Nguyễn Văn Giám
VCB    Công ty VCB    Địa chỉ Cty      B53 A0000 2       Vũ Văn Giám
. ..    . . . .     . . . .     . . . .
2./ Công ti ủy quyền:
PHP:
'
Mã CT     Tên Công ty      Địa chỉ    Mã số thuế     Đại diện pháp luật    '
ABC00     Cty ABC00     ĐC Cty ABC00   MST Cty ABC00   Tran Van ABC00
ABC01     Cty ABC01     ĐC Cty ABC01   MST Cty ABC01   Tran Van ABC01
ABC02     Cty ABC02     ĐC Cty ABC02   MST Cty ABC02   Tran Van ABC02
VCB00     Cty VCB00     ĐC Cty VCB00   MST Cty VCB00   Lê Văn VCB00
VCB01     Cty VCB01     ĐC Cty VCB01   MST Cty VCB01   Lê Văn VCB01
VCB02     Cty VCB02     ĐC Cty VCB02   MST Cty VCB02   Lê Văn VCB02
VCB03     Cty VCB03     ĐC Cty VCB03   MST Cty VCB03   Lê Văn VCB03
VCB04     Cty VCB04     ĐC Cty VCB04   MST Cty VCB04   Lê Văn VCB04
. . .    . . . .     . . . .      . . . .
3./ Bảng được ủy quyền
PHP:
'
Mã CT   Tên Công ty      Địa chỉ          Mã số thuế   Đại diện pháp luật    '
100ACB   Công ty 1   Địa chỉ Công ty 1   MST Cty 1   Trần Văn A
101ACB   Công ty 2   Địa chỉ Công ty 2   MST Cty 2   Trần Văn B
102ACB   Công ty 3   Địa chỉ Công ty 3   MST Cty 3   Trần Văn C
103ACB   Công ty 4   Địa chỉ Công ty 4   MST Cty 4   Trần Văn D
104ACB   Công ty 5   Địa chỉ Công ty 5   MST Cty 5   Trần Văn E
100VCB   Công ty 6   Địa chỉ Công ty 6   MST Cty 6   Trần Văn F
101VCB   Công ty 7   Địa chỉ Công ty 7   MST Cty 7   Trần Văn G
102VCB   Công ty 8   Địa chỉ Công ty 8   MST Cty 8   Trần Văn H
103VCB   Công ty 9   Địa chỉ Công ty 9   MST Cty 9   Trần Văn I
104VCB   Công ty 10   Địa chỉ Công ty10   MST Cty 0   Trần Văn J
. . .   . . .     . . . .    . . . .
 
Lần chỉnh sửa cuối:

MinhKhai

Giải pháp Ếc-xào
Tham gia ngày
16 Tháng tư 2008
Bài viết
614
Thích
310
Điểm
735
#6
Nguyên tắc cơ bản bạn làm theo thế này:
1. Tạo bảng dữ liệu: mỗi một đối tượng có một bảng riêng, mỗi bảng bảng của đối tượng đó có cột MÃ là duy nhất: ví dụ danh mục công ty
MA CT, TEN CTY, TINH_TP, DIA_CHI, MST,...
2. Chú ý các loại thông tin phân chia thành các cột, mỗi cột chỉ ghi một loại. Những thông tin quan hệ với nhau nhau chia thành các cột khác nhau:
Ví dụ trong bảng ghi nhận ủy quyền;
MA_GIAO_DICH, CTY_UQ, CTY_NHAN_UY,....
3. Các mảng/sheet phải có quan hệ với nhau, tức là các cột ở các bảng phải tìm được nhau, trong đó danh mục đối tượng quan hệ với bảng giao dịch, loại đó ta gọi là quan hệ 1 - nhiều,...
4. Dùng kiến thức và công cụ chạy được lệnh SQL để truy vấn các bảng dữ liệu theo như các vấn đề bạn muốn. Kiến thức nền tảng bạn phải biết về SQL với các câu lệnh: SELECT,... INNER JOIN, LEFT JOIN,... (Bạn có thể tìm trên Youtube "Bài 1 - Tạo báo cáo động" để biết cách dùng SQL với CSDL có quan hệ.
Cảm ơn anh Tuân
Kiến thức về Excel em còn chưa vững thì làm sao em hiểu được SQL.
Do em không có phương án xử lý theo yêu cầu bài toán nên không biết thiết kế CSDL sao cho phù hợp.
Mong anh và các cao thủ khác bớt chút thời làm mẫu giúp em.
Em cảm ơn
 

MinhKhai

Giải pháp Ếc-xào
Tham gia ngày
16 Tháng tư 2008
Bài viết
614
Thích
310
Điểm
735
#7
Cái này mình đang mù mờ lắm. Nhưng cũng mạnh dạn gợi í bạn ba bảng đầu như sau:
1./ Bảng Công ti tìm kiếm:
PHP:
'
Mã CT   Tên Công ty     Địa chỉ         Mã số thuế       Đại diện pháp luật    '
ABC    Công ty ABC    Địa chỉ Cty      A35 A0000 1       Nguyễn Văn Giám
VCB    Công ty VCB    Địa chỉ Cty      B53 A0000 2       Vũ Văn Giám
. ..    . . . .     . . . .     . . . .
2./ Công ti ủy quyền:
PHP:
'
Mã CT     Tên Công ty      Địa chỉ    Mã số thuế     Đại diện pháp luật    '
ABC00     Cty ABC00     ĐC Cty ABC00   MST Cty ABC00   Tran Van ABC00
ABC01     Cty ABC01     ĐC Cty ABC01   MST Cty ABC01   Tran Van ABC01
ABC02     Cty ABC02     ĐC Cty ABC02   MST Cty ABC02   Tran Van ABC02
VCB00     Cty VCB00     ĐC Cty VCB00   MST Cty VCB00   Lê Văn VCB00
VCB01     Cty VCB01     ĐC Cty VCB01   MST Cty VCB01   Lê Văn VCB01
VCB02     Cty VCB02     ĐC Cty VCB02   MST Cty VCB02   Lê Văn VCB02
VCB03     Cty VCB03     ĐC Cty VCB03   MST Cty VCB03   Lê Văn VCB03
VCB04     Cty VCB04     ĐC Cty VCB04   MST Cty VCB04   Lê Văn VCB04
. . .    . . . .     . . . .      . . . .
3./ Bảng được ủy quyền
PHP:
'
Mã CT   Tên Công ty      Địa chỉ          Mã số thuế   Đại diện pháp luật    '
000ACB   Công ty 1   Địa chỉ Công ty 1   MST Cty 1   Trần Văn A
001ACB   Công ty 2   Địa chỉ Công ty 2   MST Cty 2   Trần Văn B
002ACB   Công ty 3   Địa chỉ Công ty 3   MST Cty 3   Trần Văn C
003ACB   Công ty 4   Địa chỉ Công ty 4   MST Cty 4   Trần Văn D
004ACB   Công ty 5   Địa chỉ Công ty 5   MST Cty 5   Trần Văn E
000VCB   Công ty 6   Địa chỉ Công ty 6   MST Cty 6   Trần Văn F
001VCB   Công ty 7   Địa chỉ Công ty 7   MST Cty 7   Trần Văn G
002VCB   Công ty 8   Địa chỉ Công ty 8   MST Cty 8   Trần Văn H
003VCB   Công ty 9   Địa chỉ Công ty 9   MST Cty 9   Trần Văn I
004VCB   Công ty 10   Địa chỉ Công ty10   MST Cty 0   Trần Văn J
. . .   . . .     . . . .    . . . .
Cảm ơn bạn đã nhiệt tình
Mình rất cần code xử lý yêu cầu bài toán. Còn việc code yêu cầu cấu trúc CSDL như thế nào thì mình sẽ làm theo. Rất mong bạn tiếp tục góp ý
 

Hoang2013

Thành viên gắn bó
Tham gia ngày
15 Tháng tám 2013
Bài viết
1,625
Thích
1,591
Điểm
100
Tuổi
5
#8
Ngược rồi bạn à!
Thiết kế theo "mô tả công việc" suông sẻ mới Code khiết gì gì đó được, & như vậy mới vĩnh viễn tồn tại CSDL!
 

VetMini

Thành viên gạo cội
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
5,602
Thích
6,320
Điểm
560
#9
Những gì tôi nói sau đây là cách xây dựng một CSDL Liên Hệ chuẩn. Ngôn ngữ SQL chỉ hoạt động hữu hiệu trên nền tảng CSDL LH đã được chuẩn hoá, ít nhất là bậc 1 (lý tưởng là phải chuẩn bậc 3 trở lên).

Mọi công ty đều có dữ liệu đầy đủ. Vì vậy chỉ cần 1 bảng dữ liệu cty. Điều trọng yếu là mỗi cty phải có một mã số riêng để phân biệt.
Công việc làm là kiểm soát uỷ quyền. Như vậy cần một bảng uỷ quyền.
Mỗi cty có thể uỷ quyền cho nhiều đơn vị. Như vậy cần một (vài) bảng uỷ quyền nội bộ.

Trước mắt là bạn cần 3 bảng:
Bảng 1: chi tiết cty. Gồm các trường chi tiết, kể cả nhân vật đại diện
Bảng 2: chi tiết uỷ quyền. Gồm 2 trường, 1 là mã cty uỷ quyền, và 2 là mã cty được uỷ quyền
Bảng 3: chi tiết uỷ quyền nội bộ. Vì khong thể xác định 1 công ty có bao nhiêu phần nội bộ cho nên bảng này phải tách làm 2
Bảng 3: chi tiết đơn vị. Gồm 3 trường, 1 là mã cty, 2 là mã đơn vị, và 3 là nhân vật được uỷ quyền
Bảng 4: chi tiết uỷ quyền nội bộ. Gồm 3 trường, 1 là mã cty uỷ quyền, 2 là mã cty được uỷ quyền, và 3 là mã đơn vị được uỷ quyền
(tức là bạn cần ít nhất 4 bảng)

Code SQL có thể dựa vào chi tiết trên để lọc ra những cái bạn muốn. Đó là theo lý thuyết. Trên thực tế, CSDL LH đôi khi vướng phải vấn đề tốc độ cho nên ngừoi ta phải uyển chuyển thiết kế 1 chút. Việc này thì phải có dữ liệu và quy trình làm việc 1 thời gian mới có thể chỉnh được.
Theo nguyên tắc của CSDL LH, càng gần chuẩn thì càng nhiều trường, càng nhiều liên hệ và càng dễ truy vấn. Nhưng ngược lại cái giá phải trả là tốc độ truy vấn.

Trong khi làm việc sẽ xảy ra việc thời gian hiệu lực của một sự uỷ quyền. Vì vậy có thể bảng 2, 3 và 4 sẽ phải thêm 2 trường ngày tháng hiệu lực.

Trong khi làm việc cũng có thể xảy ra việc trùng lặp, ví dụ uỷ quyền 2 lần. Vì vậy code của bạn bắt buộc phải có phần kiểm soát những lỗi này.
 

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
3,787
Thích
9,104
Điểm
860
#10
Cảm ơn anh Tuân
Kiến thức về Excel em còn chưa vững thì làm sao em hiểu được SQL.
Do em không có phương án xử lý theo yêu cầu bài toán nên không biết thiết kế CSDL sao cho phù hợp.
Mong anh và các cao thủ khác bớt chút thời làm mẫu giúp em.
Em cảm ơn
Kiến thức bạn chưa vững nhưng bạn đang hỏi về một kiến thức mà muốn tự làm được phải có quá trình học từ A-Z, căn bản về tổ chức CSDL liệu, SQL hay mấy hàm Excel chỉ là bước giải quyết trên CSDL mà thôi. Bạn có thể nhờ ai đó code cho bạn cụ thể cái bạn cần, nhưng bạn không hiểu và tự thiết kế CSDL thì e nhiều năm nwuax vẫn đi hỏi đấy.
 

MinhKhai

Giải pháp Ếc-xào
Tham gia ngày
16 Tháng tư 2008
Bài viết
614
Thích
310
Điểm
735
#11
Các anh chị có ai code giúp cho em bài toán trên không ạ?
Nhu cầu của em là tìm kiếm và kết quả là list ra những mối liên hệ của từ khóa tìm kiếm.
Các anh chị có bài toán với lời giải sẵn tương tự bài toán trên thì cho em xin để em học hỏi
Em xin cảm ơn
 

HieuCD

Thành viên gạo cội
Tham gia ngày
14 Tháng chín 2010
Bài viết
4,775
Thích
7,237
Điểm
560
#13
Kính gửi các anh chị
Em đang có nhu cầu xây dựng CSDL đơn giản trên Excel với mục đích khi cần tìm kiếm sẽ ra kết quả chính xác nhất.
Em muốn xây dựng file tìm kiếm về ủy quyền. Khi nhập tên (hoặc mã )1 công ty ở ô tìm kiếm, các kết quả liên quan đến Công ty tìm kiếm sẽ được hiện ra: Cụ thể như sau
* Khi nhập vào ô tìm kiếm Công ty ABC, Vùng 1 sẽ list ra các Cty ủy quyền cho Cty ABC, Vùng 2 sẽ list ra những Công ty được Cty ABC ủy quyền, Vùng 3 sẽ list ra các cấp phó của Cty ABC được GĐ Cty ABC ủy quyền cho, Vùng 4 sẽ list ra những đơn vị trực thuộc được Cty ABC ủy quyền cho và vùng 5 sẽ list ra những cá nhân được Cty ABC ủy quyền cho.

Trong file đính kèm em đã mô tả yêu cầu của mình bằng hình vẽ, mong các anh chị mở xem và cho cách giải quyết,
+ Cách xây dựng sheet dữ liệu nguồn (Cấu trúc dữ liệu nguồn)
+ Code VBA dùng để khi nhập thông tin tìm kiếm, các kết quả tìm kiếm được liệt kê ra như yêu cầu trên

Trân trọng cảm ơn
Bạn xem file
 

File đính kèm

MinhKhai

Giải pháp Ếc-xào
Tham gia ngày
16 Tháng tư 2008
Bài viết
614
Thích
310
Điểm
735
#14
Cuối cùng đã có người giúp đỡ. Cảm ơn anh @HieuCD đã bỏ thời gian để chế biến lại CSDL đồng thời cho lời giải bài toán trên.
Em test thử ban đầu thì thấy nó đã chạy đúng ý em. Tuy nhiên em sẽ nhập thêm nhiều dữ liệu để test thử 1 vài tình huống rồi thêm anh nhé
Chúc anh sức khỏe
 
Top