2012-06-19 23 views
9

Câu hỏi của tôi có vẻ hơi lạ nhưng tôi chắc chắn hầu hết các bạn có thể đã trải qua giai đoạn này.Làm thế nào để hiểu một cơ sở dữ liệu đã được phát triển?

Tôi hiện đang làm việc trên dự án di chuyển cơ sở dữ liệu (từ FoxPro sang SQL Server). DB đang được di chuyển là rất lớn và tôi mới vào dự án này. Có cách nào dễ dàng để hiểu một cơ sở dữ liệu như vậy? Giống như các bảng liên quan như thế nào và nó được mô hình hóa như thế nào. Không có tài liệu thích hợp nào có sẵn trên DB này.

Tôi nghĩ rằng sự hiểu biết cách nó được xây dựng làm cho nó dễ dàng hơn nhiều để viết truy vấn mới/procs được lưu trữ. Chỉ tò mò muốn biết bất kỳ phím tắt nào.

Cảm ơn.

+0

Bạn đã thử sử dụng công cụ lập biểu đồ cơ sở dữ liệu chưa? Thông thường những công cụ này sẽ mô tả trực quan cấu trúc cơ sở dữ liệu của bạn, đó là một số điều dễ hiểu hơn. Máy chủ SQL có công cụ lập biểu đồ cơ sở dữ liệu khá đẹp, không chắc chắn về FoxPro – DSharper

+0

Không, không có cách nào dễ dàng. Bạn phải chạy ứng dụng và đăng ký những gì xảy ra và bạn phải kiểm tra mã để khám phá cách các bảng được sử dụng/tham gia như thế nào. –

+0

Bảng miễn phí hoặc vùng chứa cơ sở dữ liệu? – canon

Trả lời

13

Tôi thực sự hy vọng bạn không tìm thấy nhiều câu trả lời ở đây vì tôi đã thực hiện sự nghiệp dựa trên các mô hình dữ liệu không có giấy tờ lớn và cố gắng tìm ra chúng. Nhưng đối với những gì nó có giá trị:

  • Tôi không thích người sửa đổi dữ liệu tự động/modeller điện tử, mặc dù đây có thể là ý kiến ​​cá nhân. Sở thích của tôi là tìm một bảng trắng (hoặc giấy) và vẽ ra mô hình dữ liệu của bạn bằng tay. Nếu bạn là người học kinaesthetic (học bằng cách tham gia), tôi thấy đây là cách tốt nhất để làm quen với cơ sở dữ liệu mới ... tốt như hệ thống tự động là đọc cơ sở dữ liệu, bạn sẽ không tìm hiểu những gì bạn sẽ khi bạn vẽ nó bằng tay.

  • Có một số kỹ thuật mô hình hóa dữ liệu giới hạn, tuy nhiên chúng có thể được kết hợp theo nhiều cách. Tôi đoán với một cơ sở dữ liệu lớn hơn như bạn có ở đây, bạn sẽ có nhiều lập trình viên tạo ra nó, có nghĩa là bạn sẽ có khả năng thấy nhiều kỹ thuật được sử dụng trong cùng một cơ sở dữ liệu. Trong quá khứ tôi đã tìm thấy một hệ thống có thông tin mạch được lưu trữ như một bảng duy nhất tự liên tục lưu trữ thông tin cho một mạch dữ liệu trong khi phần thông tin khách hàng là một thiết kế sao rất thẳng về phía trước ... 2 rất riêng biệt các kiểu lập trình, có khả năng là hai nhà phát triển riêng biệt. Tôi sau đó mạo hiểm vào phần mạch điện thoại của ứng dụng, mà tôi nhận ra ngay lập tức là cùng một phong cách (có khả năng cùng một lập trình viên) như phần mạch dữ liệu được. Thông thường, các nhà phát triển sẽ được chỉ định cho một bộ phận hợp lý tương quan với một phần của doanh nghiệp của bạn ... xem các mẫu trong các phần tương tự.

  • Cấu trúc cơ sở dữ liệu vật lý chỉ là một phần để hiểu ... bên trái (trước cơ sở dữ liệu) là cách dữ liệu được tạo và tải vào cơ sở dữ liệu của bạn (kho dữ liệu?). Hiểu dữ liệu của bạn là gì và nó được tạo ra như thế nào là bước đầu tiên để biết bạn đang tìm gì trong cơ sở dữ liệu sau khi nó được tải.

  • Mặt đối diện ở trên, sau khi dữ liệu nằm trong cơ sở dữ liệu ... hiểu cách dữ liệu được sử dụng (được người dùng sử dụng) sẽ giúp bạn hiểu những gì họ đã thoát ra và điều họ cần từ đó . Điểm bổ sung nếu bạn có thể nhận được bàn tay của bạn trên kịch bản được sử dụng để tạo ra các báo cáo hiện tại như từ báo cáo sẽ giúp bạn xem làm thế nào hiện có bảng được sử dụng.

  • Đừng bao giờ quên phỏng vấn người dùng của bạn ... đặc biệt là nếu bạn có thể xác định vị trí đã được triển khai ban đầu cho hệ thống. Nếu nó được thiết kế trong nhà, tỷ lệ cược là những người cung cấp một số yêu cầu ban đầu cho hệ thống và nói chuyện với họ sẽ cho bạn biết ý tưởng của những người thiết kế hệ thống đầu tiên được nghe khi họ thu thập yêu cầu. Sự phân chia hợp lý của công ty bạn (chăm sóc khách hàng so với hoạt động so với thanh toán so với vv ...) thường là cùng một bộ phận mà mô hình dữ liệu của bạn sẽ tuân theo.

  • Và cuối cùng ... Phát! Nếu một môi trường dev hoặc QA có sẵn, hãy bắt đầu viết các truy vấn và xem những gì quay lại ... thay đổi câu lệnh của bạn và thử lại.

Tôi nghĩ rằng sự điên rồ lớn nhất bạn sẽ muốn tránh tập trung hoàn toàn vào cách sắp xếp các bảng. Hiểu dữ liệu thats in it, nó được tạo ra như thế nào và nó được tiêu thụ như thế nào. Hiểu công ty của bạn, cách nó được sắp xếp và cách nó hoạt động. Cách thức mà nó được lưu trữ (mô hình hóa dữ liệu) là thứ yếu đối với sự hiểu biết này.

+0

Wow @Twelfth! Thông tin AWESOME .. Cảm ơn rất nhiều! – rock

+2

Hãy nhớ ghi nhớ hình ảnh lớn thay vì chỉ tập trung vào chi tiết. – smwikipedia

-1

Bạn có thể sử dụng SQL Server Management Studio để tạo mô hình quan hệ thực thể, do đó bạn có thể dễ dàng thấy mối quan hệ giữa các bảng db. Về cơ bản bên trong thư mục db của bạn trong studio quản lý có một thư mục có tên "Sơ đồ cơ sở dữ liệu". Chỉ cần nhấp chuột phải vào nó và chọn "Sơ đồ cơ sở dữ liệu mới".

+0

Tôi đã thấy rằng trong SQL nhưng không thể tìm thấy bất kỳ công cụ như vậy trong foxpro .. – rock

+0

oh, tôi nghĩ rằng bạn đã di chuyển db để sql server. – bnvdarklord

+0

no @bnvdarklord .. cảm ơn lời đề nghị của bạn! – rock

1

Gần đây tôi đã trải qua quá trình tương tự ... Điều mà tôi nghĩ đã giúp tôi nhiều nhất là tạo sơ đồ cơ sở dữ liệu của riêng mình. Tôi đã sử dụng công cụ miễn phí wwwsqldesigner. Nó có vẻ khá dễ dàng, vấn đề duy nhất tôi có là nó sẽ không hoạt động trong Chrome vì lý do nào đó, nhưng firefox đã làm việc tốt. Tôi chỉ đặt vào các bảng mà tôi sử dụng rất nhiều, và tôi thấy rằng tôi thường xuyên quay trở lại với nó khi tôi cần phải làm một cái gì đó mới.

Nếu bạn có thể sử dụng sơ đồ cơ sở dữ liệu được tạo tự động, đó có thể là cách tốt hơn, nhưng tôi không thể làm cho chúng hoạt động (tôi đang sử dụng máy chủ sql).

Chúc may mắn!

+0

Cảm ơn Kreg .. Tôi sẽ thử xem công cụ bạn đề xuất có hoạt động cho tôi không ..! – rock

0

Máy chủ Foxpro cũ có tồn tại cùng với máy chủ sql mới sau khi di chuyển không? Nếu không, bạn nên cố gắng giải mã hệ thống theo từng phần. Không cần phải lãng phí thời gian vào bất kỳ mã trì trệ và không sử dụng nào. Ghi chú và sơ đồ để có được cảm nhận chung về luồng dữ liệu và bắt đầu đào!

+0

lol .. đào này giống như một vòng robin! Và foxpro sẽ được chuyển vào thùng rác nếu quá trình di chuyển này thành công .. – rock

+1

Nó không có vẻ thú vị chút nào. Tôi đã thực hiện một vài mdb để di chuyển sql và không thích nó một chút. –

+0

Tôi đồng ý hoàn toàn! – rock

3

Nếu tôi nhảy vào một cơ sở dữ liệu SQL Server khổng lồ với hàng trăm bảng và hàng triệu bản ghi ở đây là hai truy vấn tôi sử dụng để giúp hiểu rõ hơn, tìm các bảng "chính" và sau đó thu hẹp xuống các bảng cụ thể và cột.

--Query to show list of tables ordered by number of records in each table 
    SELECT 
     t.NAME AS TableName, 
     SUM(p.rows) AS [RowCount] 
    FROM 
     sys.tables t 
    INNER JOIN  
     sys.indexes i ON t.OBJECT_ID = i.object_id 
    INNER JOIN 
     sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id 
    INNER JOIN 
     sys.columns c on t.object_id = c.object_id 
    WHERE 
     i.index_id <= 1 
    GROUP BY 
     t.NAME, i.object_id, i.index_id, i.name 
    ORDER BY 
     SUM(p.rows) DESC 



--Query to show any columns or table names like what I'm looking for 
SELECT 
    c.name, t.name 
FROM sys.columns c 
    INNER JOIN sys.tables t ON c.object_id = t.object_id 
WHERE c.name LIKE '%#ColumnName%' OR t.name LIKE '%#TableName%' 
0

Xin chào tập lệnh sau có thể giúp bạn. Nếu bạn sử dụng điều này trên bất kỳ cơ sở dữ liệu phát triển nào, ít nhất bạn sẽ học được mối quan hệ của các bảng.

SELECT 
fk.name 'FK Name', 
tp.name 'Parent table', 
cp.name, cp.column_id, 
tr.name 'Refrenced table', 
cr.name, cr.column_id 
FROM 
    sys.foreign_keys fk 
INNER JOIN 
    sys.tables tp ON fk.parent_object_id = tp.object_id 
INNER JOIN 
    sys.tables tr ON fk.referenced_object_id = tr.object_id 
INNER JOIN 
    sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id 
INNER JOIN 
    sys.columns cp ON fkc.parent_column_id = cp.column_id AND fkc.parent_object_id = cp.object_id 
INNER JOIN 
    sys.columns cr ON fkc.referenced_column_id = cr.column_id AND fkc.referenced_object_id = cr.object_id 
ORDER BY 
tp.name, cp.column_id 
0

Có hai loại đối tượng dữ liệu khác nhau rõ ràng trong Foxpro.
Bạn rất có thể đang xem Bảng dữ liệu MIỄN PHÍ (các tệp DBF, CDX, IDX, FPT) không được chứa trong "Cơ sở dữ liệu".
Hoặc Foxpro có thể có Cơ sở dữ liệu (tệp DBC) có thể chứa các bảng Dữ liệu và có thể được 'giữ' trong một điều kiện liên quan.

Tuy nhiên, các bảng dữ liệu Foxpro thường không liên quan gì cả cho đến khi ứng dụng yêu cầu vào thời điểm chúng liên quan động dựa trên Biểu thức chỉ mục.

Chỉ mục được tạo trên Bảng dữ liệu sử dụng một số Biểu thức (ví dụ: Fld1 + Fld2 hoặc Account_ID, v.v.) hoạt động để đáp ứng nhu cầu của ứng dụng.
Các chỉ mục này có thể được 'kích hoạt' khi cần cho bất kỳ bảng Dữ liệu đã cho đã tạo chỉ mục.

Các bảng liên quan có mối quan hệ cha mẹ/con nơi bảng con đã kích hoạt chỉ mục và phụ huynh liên quan đến con đó theo giá trị từ các trường riêng của nó khớp với biểu thức chỉ mục con.

Cách bạn sử dụng dữ liệu sau khi được di chuyển đến máy chủ SQL phụ thuộc vào những gì bạn đang sử dụng cho ứng dụng của mình.

Nếu bạn vẫn đang sử dụng Foxpro cho ứng dụng, bạn có thể truy vấn SQL Server và lấy hồ sơ trở lại con trỏ bộ nhớ (nó hoạt động giống như bảng dữ liệu) và nếu bạn lấy lại nhiều con trỏ truy vấn SQL Server, bạn sau đó có thể tạo một chỉ mục (sử dụng biểu thức) và liên kết các bảng nếu cần.

Nếu bạn đang thay đổi ứng dụng sang một số ngôn ngữ khác (ví dụ như VB.net hoặc C++) thì bạn sẽ phải tự tạo 'quan hệ' thông qua cú pháp truy vấn SQL.

Hãy nhớ rằng việc di chuyển các bảng Dữ liệu không quá lớn.
Nhưng việc thay đổi ngôn ngữ ứng dụng là một Giao dịch LỚN và thậm chí cách bạn tiếp cận bất kỳ tác vụ cá nhân nào cũng sẽ phải được xử lý khác nhau.
Hãy suy nghĩ về nó như dịch một cuốn sách từ tiếng Anh sang tiếng Trung - MỌI THỬ ĐỂ THAY ĐỔI.

Nếu bạn không chắc chắn và/hoặc không có một bản sao của Foxpro và mã nguồn của ứng dụng, bạn nên cân nhắc việc tìm kiếm một Tư vấn để thực hiện công việc cho bạn hoặc, ít nhất, hỗ trợ/tư vấn cho bạn .

Ngoài ra, hãy nhớ rằng nếu dự án là KINH DOANH CHÍNH THỨC, thì bạn không nên cố gắng tiết kiệm chi phí chuyển đổi.

Chúc may mắn

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