Làm thế nào để đi sâu vào một cơ sở dữ liệu xấu xí?


26

Tôi chắc rằng nhiều bạn đang / đang xử lý một cơ sở dữ liệu xấu. Bạn biết đấy, cơ sở dữ liệu đó hoàn toàn không được chuẩn hóa, cơ sở dữ liệu mà bạn phải thực hiện một truy vấn lớn để có được dữ liệu tầm thường nhất, cơ sở dữ liệu đó đang được sản xuất và bạn không thể thay đổi một chút ... bạn biết , "cái đó".

Câu hỏi của tôi là, làm thế nào để bạn đối phó với nó?

  • Bạn có cố gắng tạo một cơ sở dữ liệu mới?
  • Bạn từ bỏ và để nó một mình?
  • Lời khuyên nào bạn có thể đưa ra?

Câu trả lời:


29
  • Điều đầu tiên tôi làm là tạo một Sơ đồ mối quan hệ thực thể (ERD). Đôi khi bạn có thể chỉ cần mô tả siêu dữ liệu bằng các công cụ dòng lệnh nhưng để tiết kiệm thời gian, có một số công cụ có thể tự động tạo sơ đồ.

  • Thứ hai, kiểm tra từng bảng và cột đảm bảo tôi tìm hiểu ý nghĩa của những gì nó lưu trữ.

  • Thứ ba, kiểm tra từng mối quan hệ và đảm bảo tôi hiểu các bảng liên quan với nhau như thế nào.

  • Thứ tư, đọc bất kỳ chế độ xem hoặc kích hoạt để hiểu thực thi toàn vẹn dữ liệu tùy chỉnh hoặc hoạt động xếp tầng.

  • Thứ năm, đọc bất kỳ thủ tục lưu trữ. Cũng đọc đặc quyền truy cập SQL nếu có như vậy.

  • Thứ sáu, đọc qua các phần của mã ứng dụng sử dụng cơ sở dữ liệu. Đó là nơi một số quy tắc kinh doanh bổ sung và quy tắc toàn vẹn dữ liệu được thi hành.


cập nhật: Tôi vừa đọc một bài viết thú vị " 9 điều cần làm khi bạn kế thừa cơ sở dữ liệu " với một danh sách kiểm tra tốt.

Tóm lược:

  1. Sao lưu
  2. Nghiên cứu (các bước tài liệu lược đồ tôi đề cập ở trên)
  3. Nói chuyện với các nhà phát triển cũ
  4. Cơ sở dữ liệu lỗi
  5. Kiểm soát mã nguồn
  6. Nói chuyện với người dùng và / hoặc chủ doanh nghiệp
  7. Thiết lập uy tín với người dùng bằng cách sửa một số thứ hoặc thực hiện một số cải tiến
  8. Tạo môi trường phát triển
  9. Thả đồ vật lỗi thời

13

Điều này không phải lúc nào cũng có thể, nhưng một điều có hiệu quả với tôi trong một số tình huống là thay thế một số bảng bằng các khung nhìn. Sau đó, bạn có thể dọn dẹp các bảng bên dưới và trong một số trường hợp cuối cùng sẽ loại bỏ các khung nhìn. Như tôi đã nói, chỉ hoạt động trong một số trường hợp.


Trong Oracle Materialized Views cũng có thể giúp với điều này.
Leigh Riffel

9

Từ điển dữ liệu là bạn của bạn. Ngoài ra, hãy thử thiết kế ngược cơ sở dữ liệu với công cụ kỹ thuật đảo ngược trên Visio và xây dựng bộ sơ đồ của riêng bạn. Bởi vì kỹ thuật đảo ngược có tính tương tác - bạn xây dựng các sơ đồ - nó hấp dẫn hơn nhiều so với việc đọc qua từ điển dữ liệu. Sự tích cực của quy trình là lợi thế của nó và tôi thấy khá thoải mái khi làm điều này.

Hầu hết các công việc tôi làm là trong kho dữ liệu, trong đó chọc vào các lược đồ cơ sở dữ liệu hệ thống nguồn là một hoạt động cốt lõi. Tôi đã thực hiện loại điều này trong một số dịp và thấy nó hoạt động rất tốt.

Visio pro không đắt lắm và công cụ mô hình Visio cho phép bạn chia sẻ một mô hình giữa nhiều sơ đồ. Như một phần thưởng, bạn có thể thêm các khóa ngoại bị thiếu trong sơ đồ và bạn sẽ có được một bộ tài liệu hữu ích cho hệ thống ở cuối.


6

Ngoài ý tưởng của Bill Karwin, tôi khuyên bạn nên nói chuyện với người dùng - đôi khi người dùng biết khá nhiều về cơ sở dữ liệu của họ được sử dụng để làm gì, đặc biệt nếu họ thực hiện bất kỳ báo cáo nào từ đó.


6

Tôi đối phó với một phần mềm rất xấu cho phần mềm của nhà cung cấp, ngoài việc đưa ra đề xuất, tôi không thể làm gì nhiều để thay đổi phần mềm. Tôi luôn cố gắng để mọi thứ thay đổi, nhưng vì nó nằm ngoài tầm kiểm soát của tôi, tôi bị mắc kẹt với rác.

Một trong những điều tôi nhanh chóng bắt đầu sử dụng, vì cơ sở dữ liệu hoàn toàn không có mối quan hệ nào, là một truy vấn Tên chung cho lược đồ:

--Find Column named like 'blah' in a specific table
SELECT O.NAME, O.ID, C.NAME, O.XTYPE
FROM SYSOBJECTS O LEFT JOIN SYSCOLUMNS C ON O.ID=C.ID
WHERE C.NAME LIKE '%SearchFor%' AND O.XTYPE IN ('U','V') AND O.Name like '%TableName%'
ORDER by O.Name

hoặc là

--Find all Columns in DB with name like 'blah'    
SELECT O.NAME, O.ID, C.NAME, O.XTYPE
FROM SYSOBJECTS O LEFT JOIN SYSCOLUMNS C ON O.ID=C.ID
WHERE C.NAME LIKE '%SearchFor%' AND O.XTYPE IN ('U','V')
ORDER by O.Name

Vì một số bảng có quá nhiều cột được đặt tên kém và có quá nhiều cột để xem qua để tìm những gì tôi có thể sử dụng để tạo mối quan hệ giữa các bảng.

Tôi biết điều này không giúp ích nhiều trong phần thiết kế lại câu hỏi, nhưng nó rất hữu ích trong việc hiểu và giải mã lược đồ xấu.


6

SchemaCrawler là công cụ khám phá cơ sở dữ liệu của tôi có một vài tính năng giúp dễ dàng khám phá cơ sở dữ liệu xấu. SchemaCrawler có chức năng giống như "grep", cho phép bạn tìm kiếm các bảng và cột bằng các biểu thức thông thường. Ví dụ: bạn có thể tìm kiếm các bảng và cột với "TÀI KHOẢN" như một phần của tên của chúng và chúng có thể có liên quan theo một cách nào đó.

SchemaCrawler cũng có các mối quan hệ khóa ngoại, ngay cả khi không có khóa ngoại. Nó thực hiện điều này bằng cách tìm "các liên kết yếu" bằng cách sử dụng các quy ước đặt tên phổ biến, chẳng hạn như bảng là tên thường là số nhiều, nhưng tên cột thì không và tên cột có thể có tiền tố là _ID. Bạn có thể tìm thấy các bảng liên quan bằng cách sử dụng các mối quan hệ được suy luận này.


5

Phụ thuộc vào mức độ xấu của nó và mức độ kiểm soát của bạn đối với thiết kế và những gì tương tác với nó. Tôi đã phải tương tác với một số cơ sở dữ liệu xấu xí trong nhiều năm tại công việc hiện tại của tôi và đây là cách tôi đã xử lý chúng:

Dữ liệu nhân viên

Có cơ sở dữ liệu chứa dữ liệu nhân viên. Đó là một cơ sở dữ liệu nhà cung cấp, vì vậy tôi không có quyền kiểm soát nó. (Un?) May mắn thay, tôi không có quyền truy cập trực tiếp vào nó. Tôi nhận được một bãi DTS mỗi sáng.

Tốt nhất tôi có thể quản lý là viết một tập lệnh xóa dữ liệu đầu vào từ kết xuất buổi sáng (vâng, lựa chọn từ đó là có chủ ý) và chuyển nó sang định dạng hữu ích hơn và làm việc từ dữ liệu được lọc.

Ngay cả khi tôi có thể thay đổi nó, tôi có lẽ sẽ không - chỉ bởi vì có một số lượng lớn các chương trình khác dựa vào nó được thiết lập theo cách đó và tôi không thể thay đổi chúng.

Dữ liệu đào tạo trực tuyến

Đây là một mớ hỗn độn trong thiết kế của riêng tôi. Tôi đã xây dựng nó mới ra khỏi trường đại học mà không có người cố vấn để giúp tôi ... Tôi đã từng sửa nó một chút. Vì tôi kiểm soát chương trình duy nhất truy cập dữ liệu, khi tôi nâng cấp các phần của trang web, tôi sẽ "nâng cấp" cấu hình của cơ sở dữ liệu. Tôi sẽ viết một kịch bản chuyển đổi và kiểm tra nó một cách mạnh mẽ trên một bản sao để tôi có thể đảm bảo rằng tất cả các thay đổi cần thực hiện đều được thực hiện.

Đó là một quá trình lâu dài, nhưng nó đi cùng độc đáo.

Dữ liệu đào tạo trong lớp học

Dự án thí điểm của tôi đã được tích hợp dữ liệu từ 3 cơ sở dữ liệu khác nhau, tất cả đều được thiết kế hơi khác nhau bởi người tiền nhiệm của tôi ... là một nhà giáo dục y tá học một hoặc hai lớp lập trình.

Đó là một quá trình chậm chạp. Vì tôi có toàn quyền kiểm soát các chương trình truy cập dữ liệu, tôi đã thay đổi từng chút một như dữ liệu đào tạo trực tuyến.

Nhìn lại, đây sẽ là một ứng cử viên hàng đầu cho việc bắt đầu sạch sẽ ... tầm nhìn luôn luôn là 20/20.

Đến cuối cùng...

Tôi không biết điều này hữu ích như thế nào và tôi có thể giải thích nhiều hơn (đến một điểm, công ty hợp pháp yada yada và tất cả). Câu trả lời cuối cùng là "Nó phụ thuộc".


5

Vì vậy, sau khi đọc tất cả các câu trả lời của bạn, tôi cung cấp cho bạn của tôi:

Đầu tiên tôi tìm "Bảng chính", sau đó, bằng bút và giấy, tôi bắt đầu ánh xạ mối quan hệ với các bảng khác, sau đó, nếu có một số mã ứng dụng để xem xét, tôi bắt đầu tạo một số phác thảo thô về cách dữ liệu chảy.

Sau khi tôi nhận được một bức tranh đẹp về cách thức hoạt động của db, tôi chỉ cần kiểm tra các vị trí để thay đổi mọi thứ. Đó là nó.

Tôi không biết tại sao nhưng tôi thích giấy hơn bất kỳ phần mềm mô hình hóa cơ sở dữ liệu nào.


5

Do sử dụng nó bởi ứng dụng bên ngoài, bạn không thể thay đổi "giao diện" cơ sở dữ liệu. Tôi không biết bạn đang sử dụng loại cơ sở dữ liệu nào (oracle, mysql, mssql), nhưng tôi thấy đây là một trong những cách:

  • xây dựng giao diện cơ sở dữ liệu bằng cách sử dụng các loại đối tượng như các thủ tục xem và lưu trữ.
  • từng bước tái cấu trúc (bình thường hóa, đổi tên trường ...)
  • thay đổi ứng dụng của khách hàng (nếu cần)

Lượt xem, thủ tục lưu trữ sẽ ẩn các sửa đổi cơ sở dữ liệu nội bộ (thay đổi).


4

Ngoài việc khám phá cấu trúc của cơ sở dữ liệu, tôi thấy rằng việc xem xét chất lượng dữ liệu cũng rất quan trọng . Khi bạn hiểu ý nghĩa của từng cột, bạn có thể tìm kiếm bất kỳ nơi nào có nhiều giá trị bị thiếu. Khi bạn trở nên quen thuộc hơn với dữ liệu, bạn cũng có thể kiểm tra xem có sự không nhất quán giữa các giá trị trong các cột khác nhau hay không.


4

Nó phụ thuộc vào cách bạn phải tương tác. Đối với các kịch bản sử dụng trong đó việc chia theo nhóm có thể chấp nhận được, tôi thường thấy nó hiệu quả nhất về mặt chi phí (về thời gian phát triển và do đó chi phí cho khách hàng) để sắp xếp dữ liệu theo cấu trúc thân thiện hơn và chống lại điều đó.


4

Nếu bạn có thể phân chia vấn đề thành các vấn đề mà bạn có thể bao bọc bộ não của mình, bạn có thể tấn công chúng cùng một lúc. Đôi khi, chỉ cần biết rằng có một bảng không bị lỗi, có thể cho bạn một bãi biển để làm việc. Bằng cách này, bạn mở rộng "điểm sạch" của mình để bao gồm nhiều cơ sở dữ liệu hơn.


4

Nếu bạn có Visio (một phần của Microsoft Office), bạn có thể thử chức năng kỹ sư đảo ngược . Nó không đẹp, nhưng ít nhất nó sẽ giúp bạn bắt đầu (với một phần chi phí của các công cụ "thực" như Rational Rose).



3

Bill đã đưa ra một câu trả lời tuyệt vời. Tôi sẽ thêm rằng tôi sẽ đăng nhập vào giao diện người dùng với tư cách là người dùng thử nghiệm và cố gắng hiểu chính xác những gì người dùng làm với dữ liệu. Nó sẽ giúp bạn hiểu lý do tại sao đằng sau một số procs hoặc thiết kế được lưu trữ. Hiểu ý nghĩa của dữ liệu và được sử dụng là rất quan trọng để hiểu cơ sở dữ liệu aa.

Nếu cơ sở dữ liệu thuộc chức năng kinh doanh hoặc chủ đề mà bạn nói chung không quen thuộc (giả sử nó có kế hoạch bay và trước đây bạn chỉ làm việc trên các ứng dụng tài chính), thì hãy hỏi người dùng về một số tài liệu đọc về vấn đề này hoặc đi đến thư viện chính mình hoặc tìm kiếm trên Internet về các vấn đề. Hỏi người dùng nếu có vấn đề pháp lý hoặc quy định bạn cần phải biết. Một lần nữa một số nền tảng chủ đề này có thể giải thích những gì có vẻ là sự lựa chọn thiết kế kỳ lạ.


3

Nếu đó là cơ sở dữ liệu của nhà cung cấp (và tôi đã thấy một số cơ sở dữ liệu thực sự xấu), tất cả những gì bạn có thể làm là phàn nàn với nhà cung cấp về nó.

Đối với các ứng dụng được xây dựng trong nhà, thường chỉ cần một số giáo dục cho các nhà phát triển và bạn có thể bắt đầu thay đổi lược đồ để hiệu suất được cải thiện. Nó cần có thời gian, và nó thường là một quá trình chậm.

Theo kinh nghiệm của tôi, việc xây dựng một cơ sở dữ liệu mới không thực sự là một lựa chọn, vì việc di chuyển hàng trăm GB hoặc TB dữ liệu không phải là tất cả khả thi.

Để nó một mình cũng thường không phải là một lựa chọn. Khi lượng dữ liệu trong cơ sở dữ liệu tăng lên, hiệu suất sẽ ngày càng tệ hơn (được cấp theo thời gian tôi thấy các vấn đề chúng thường khá tệ). Cuối cùng, người dùng sẽ không thể sử dụng ứng dụng vì hiệu suất rất tệ.


3

À ... cơ sở dữ liệu Xấu xí, Doanh nghiệp lớn là cơ sở dữ liệu kế thừa mà chúng ta sẽ tìm thấy.

  • Điều chỉnh hiệu suất mọi người không phàn nàn về cơ sở dữ liệu như vậy cho đến khi họ tìm thấy các vấn đề về hiệu suất. Vì vậy, trong tổ chức của chúng tôi, chúng tôi xác định các truy vấn riêng lẻ và tinh chỉnh chúng như một bản vá.
  • Giới hạn dữ liệu bây giờ chúng tôi biết nơi rác thải hôi thối, vì vậy hãy cố gắng tránh luồng dữ liệu thông qua các cơ sở dữ liệu như vậy. Tạo cơ sở dữ liệu dàn và chuyển hướng dữ liệu của bạn đến các bảng đó để bắt đầu và sử dụng các cơ sở dữ liệu cũ làm bãi chứa dữ liệu.
  • Tránh tích trữ dữ liệu Lưu trữ / cắt bớt dữ liệu cũ không còn cần thiết nữa. Cần có một nhóm quyết định thời gian cần thiết cho dữ liệu trong cơ sở dữ liệu. Sau đó, bạn có thể di chuyển nó đến các tập tin phẳng hoặc thậm chí vào các ổ đĩa băng.
  • Loại bỏ nó một khi bạn có thể đạt được sự chuyển hướng và cắt bớt dữ liệu. Thuyết phục các đội khác bắt đầu sử dụng cơ sở dữ liệu mới.

Nó không hoạt động luôn nhưng nếu chúng ta không nỗ lực thì nó sẽ trở nên tồi tệ hơn. Tôi cố gắng thiết kế lại cơ sở dữ liệu cùng với các ứng dụng, nó có thể giúp tôi tăng thêm công việc với việc di chuyển dữ liệu nhưng hiệu suất là một trò ảo thuật mà tôi luôn rút ra khỏi mũ.

Chúc may mắn với người bạn gái xấu xí của bạn;)


2

Xem liệu tùy chọn của phiên Chuyển giao kiến ​​thức có sẵn cho bạn không và nếu có, hãy tận dụng lợi thế của nó.

Ngoài ra, nhiều DBMS đi kèm với các công cụ cho phép bạn vẽ / in lược đồ cơ sở dữ liệu với một số thông tin hữu ích (ví dụ: khóa ngoại).

Ngoài ra, (bị đánh cắp từ NXC), bạn có thể đảo ngược cơ sở dữ liệu thông qua các công cụ như Visio.


2

Tôi muốn kích hoạt một hồ sơ truy vấn và xem những gì diễn ra trên một hệ thống sản xuất. Cung cấp cho tôi một số ý tưởng về những bảng nào là 'nóng' và loại truy vấn chống lại chúng.


1

Đặt một bản sao lưu trên máy chủ hộp cát và sau đó bắt đầu viết và chạy các truy vấn kiểm tra. Tôi luôn tìm thấy một hệ thống phức tạp dễ hiểu hơn nếu tôi có thể chạm tay vào nó và không lo lắng về việc phá vỡ nó.

Ngoài ra, tôi muốn mở The Daily WTF trong cửa sổ trình duyệt. Tiếp quản thiết kế của người khác thường liên quan đến rất nhiều khoảnh khắc "Tôi không thể tin rằng họ đã làm {WTF}" và điều đó giúp có một nơi nào đó để mọi người hiểu nỗi đau của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.