Mọi nhà phát triển nên biết gì về cơ sở dữ liệu? [đóng cửa]


206

Cho dù chúng ta có thích hay không, nhiều người nếu không phải hầu hết các nhà phát triển của chúng ta thường xuyên làm việc với cơ sở dữ liệu hoặc có thể phải làm việc với một ngày nào đó. Và xem xét số lượng lạm dụng và lạm dụng trong tự nhiên và khối lượng câu hỏi liên quan đến cơ sở dữ liệu xuất hiện mỗi ngày, thật công bằng khi nói rằng có một số khái niệm mà các nhà phát triển nên biết - ngay cả khi họ không thiết kế hoặc làm việc với cơ sở dữ liệu ngày nay. Vì thế:



Các khái niệm quan trọng mà các nhà phát triển và các chuyên gia phần mềm khác nên biết về cơ sở dữ liệu là gì?


Hướng dẫn trả lời:


Giữ danh sách của bạn ngắn.
Một khái niệm cho mỗi câu trả lời là tốt nhất.

Hãy cụ thể .
"Mô hình hóa dữ liệu" có thể là một kỹ năng quan trọng , nhưng điều đó có nghĩa chính xác là gì?

Giải thích lý do của bạn.
Tại sao khái niệm của bạn quan trọng? Đừng chỉ nói "sử dụng chỉ mục." Đừng rơi vào "thực hành tốt nhất." Thuyết phục khán giả của bạn để đi tìm hiểu thêm.

Upvote câu trả lời bạn đồng ý với.
Đọc câu trả lời của người khác trước. Một câu trả lời xếp hạng cao là một tuyên bố hiệu quả hơn hai câu trả lời thấp. Nếu bạn có nhiều thứ để thêm, hãy thêm một bình luận hoặc tham khảo bản gốc.

Đừng downvote một cái gì đó chỉ vì nó không áp dụng cho cá nhân bạn.
Tất cả chúng ta làm việc trong các lĩnh vực khác nhau. Mục tiêu ở đây là cung cấp định hướng cho người mới cơ sở dữ liệu để có được sự hiểu biết toàn diện, có căn cứ về thiết kế cơ sở dữ liệu và phát triển dựa trên cơ sở dữ liệu, chứ không phải cạnh tranh cho danh hiệu quan trọng nhất.


15
Tại sao bỏ phiếu để đóng này ?? Đó là một Wikia cộng đồng và do đó thích hợp.
David

5
Tôi sẽ bỏ phiếu để mở lại nếu nó bị đóng ... Tôi cũng muốn xem danh sách những điều mà các DBA nên (nhưng không) biết về OOP và ứng dụng / Thiết kế phần mềm hệ thống ..
Charles Bretana

7
@gnovice: Từ "chủ quan" trong bối cảnh đó đang đề cập đến những câu hỏi hoàn toàn là vấn đề quan điểm. "Bạn nghĩ gì về cuốn sách của Joe Celko?" - đó là một câu hỏi chủ quan. Câu hỏi này đang thu hút thông tin khách quan, nó chỉ xảy ra rằng không có câu trả lời "đúng" duy nhất. Tôi nghĩ rằng điều quan trọng là lùi lại một bước và hỏi, "đây chỉ là trò đùa nhàn rỗi, hay nó hữu ích cho một số nhà phát triển?" Dù sao thì hai xu của tôi - không giống như tôi kiếm được điểm rep cho việc này. :-)
Aaronaught

6
Cá nhân, tôi ghét những câu hỏi này. Họ hầu như luôn luôn có hàng đống ý kiến ​​cá nhân, xem nhẹ thông tin có thể sử dụng và nặng về tuyên bố chủ quan. Nhưng tôi không sẵn sàng đóng nó vì lý do đó một mình; nó có thể được một nửa chiều đàng hoàng, Aaron, nếu bạn thiết lập một số hướng dẫn để được trả lời: đơn đề câu trả lời (những gì bạn nên biết và lý do tại sao bạn nên biết điều đó), không có bản sao, up-bỏ phiếu những gì bạn đồng ý với ... và hầu hết quan trọng, chuyển ý kiến ​​của riêng bạn vào câu trả lời chứng minh điều này. Như hiện tại, nó đọc như một bài đăng trên blog, hoặc thảo luận trên diễn đàn, không ai trong số đó có bất kỳ doanh nghiệp nào trên SO.
Shog9

4
Tôi thấy điều này khá thú vị: "Đó là một Wiki cộng đồng và do đó thích hợp." Làm thế nào trên trái đất một CW có thể làm cho nó thích hợp? Một câu hỏi có phù hợp hay không, và tôi nghĩ rằng câu hỏi này là cách để chủ quan trở nên hữu ích nếu ai đó đang tìm kiếm câu trả lời. Nó có thể thú vị, nhưng đó không phải là đặc điểm duy nhất mà một câu hỏi phải có.
Georg Schölly

Câu trả lời:


106

Điều đầu tiên các nhà phát triển nên biết về cơ sở dữ liệu là đây: cơ sở dữ liệu để làm gì? Không phải chúng hoạt động như thế nào, cũng như cách bạn xây dựng một cái, thậm chí cả cách bạn viết mã để lấy hoặc cập nhật dữ liệu trong cơ sở dữ liệu. Nhưng họ để làm gì?

Thật không may, câu trả lời cho điều này là một mục tiêu di chuyển. Trong thời kỳ hoàng kim của cơ sở dữ liệu, những năm 1970 đến đầu những năm 1990, cơ sở dữ liệu là để chia sẻ dữ liệu. Nếu bạn đang sử dụng cơ sở dữ liệu và bạn không chia sẻ dữ liệu, bạn sẽ tham gia vào một dự án học thuật hoặc bạn đang lãng phí tài nguyên, bao gồm cả chính bạn. Thiết lập cơ sở dữ liệu và thuần hóa DBMS là những nhiệm vụ hoành tráng đến mức hoàn vốn, về mặt dữ liệu được khai thác nhiều lần, phải rất lớn để phù hợp với khoản đầu tư.

Trong 15 năm qua, cơ sở dữ liệu đã được sử dụng để lưu trữ dữ liệu liên tục chỉ liên quan đến một ứng dụng. Xây dựng cơ sở dữ liệu cho MySQL hoặc Access hoặc SQL Server đã trở nên thường xuyên đến mức cơ sở dữ liệu gần như trở thành một phần thông thường của một ứng dụng thông thường. Đôi khi, nhiệm vụ giới hạn ban đầu đó được đẩy lên cao bởi nhiệm vụ leo lên, vì giá trị thực của dữ liệu trở nên rõ ràng. Thật không may, cơ sở dữ liệu được thiết kế với một mục đích duy nhất thường thất bại đáng kể khi chúng bắt đầu bị đẩy vào một vai trò rộng lớn và nhiệm vụ quan trọng.

Điều thứ hai các nhà phát triển cần tìm hiểu về cơ sở dữ liệu là toàn bộ khung nhìn trung tâm dữ liệu của thế giới. Chế độ xem thế giới trung tâm dữ liệu khác với chế độ xem thế giới trung tâm quy trình hơn bất kỳ điều gì mà hầu hết các nhà phát triển đã từng học. So với khoảng cách này, khoảng cách giữa lập trình có cấu trúc và lập trình hướng đối tượng là tương đối nhỏ.

Điều thứ ba các nhà phát triển cần học, ít nhất là trong một tổng quan, là mô hình hóa dữ liệu, bao gồm mô hình hóa dữ liệu khái niệm, mô hình dữ liệu logic và mô hình dữ liệu vật lý.

Mô hình hóa dữ liệu khái niệm thực sự là phân tích yêu cầu từ quan điểm trung tâm dữ liệu.

Mô hình hóa dữ liệu logic nói chung là ứng dụng của một mô hình dữ liệu cụ thể cho các yêu cầu được phát hiện trong mô hình dữ liệu khái niệm. Mô hình quan hệ được sử dụng nhiều hơn bất kỳ mô hình cụ thể nào khác và chắc chắn các nhà phát triển cần tìm hiểu mô hình quan hệ. Thiết kế một mô hình quan hệ mạnh mẽ và phù hợp cho một yêu cầu không cần thiết không phải là một nhiệm vụ tầm thường. Bạn không thể xây dựng các bảng SQL tốt nếu bạn hiểu sai mô hình quan hệ.

Mô hình hóa dữ liệu vật lý nói chung là DBMS cụ thể và không cần phải tìm hiểu chi tiết, trừ khi nhà phát triển cũng là người xây dựng cơ sở dữ liệu hoặc DBA. Những gì các nhà phát triển cần phải hiểu là mức độ mà thiết kế cơ sở dữ liệu vật lý có thể được tách ra khỏi thiết kế cơ sở dữ liệu logic và mức độ tạo ra cơ sở dữ liệu tốc độ cao có thể được thực hiện chỉ bằng cách điều chỉnh thiết kế vật lý.

Điều tiếp theo các nhà phát triển cần học là trong khi tốc độ (hiệu suất) là quan trọng, thì các biện pháp khác về độ tốt của thiết kế thậm chí còn quan trọng hơn , chẳng hạn như khả năng sửa đổi và mở rộng phạm vi của cơ sở dữ liệu hoặc đơn giản hóa việc lập trình.

Cuối cùng, bất cứ ai gây rối với cơ sở dữ liệu cần phải hiểu rằng giá trị của dữ liệu thường vượt xa hệ thống đã chiếm được nó .

Phù!


Viết rất tốt! Và viễn cảnh lịch sử là tuyệt vời cho những người không làm công việc cơ sở dữ liệu tại thời điểm đó (ví dụ như tôi).
Aaronaught

6
Viết độc đáo. Và tôi nghĩ rằng điểm cuối cùng của bạn bị bỏ qua quá thường xuyên bởi những người cố gắng 'hoàn thành nó'.
DaveE

1
Có một kết nối giữa những gì tôi đã viết và các chủ đề như Giải thích Kế hoạch, Lập chỉ mục và Chuẩn hóa dữ liệu. Tôi muốn thảo luận về kết nối đó sâu hơn trong một số loại diễn đàn thảo luận. SO không phải là một diễn đàn như vậy.
Walter Mitty

1
Nếu bạn thấy việc đọc quái vật này, hãy tưởng tượng cảm giác khi viết nó! Tôi đã không bắt đầu viết một bài luận. Khi tôi bắt đầu, nó dường như chảy. Bất cứ ai thêm vào bashing thực sự giúp ích cho độc giả, IMO.
Walter Mitty

3
@Walter Bạn đã cung cấp giải thích cho tất cả các điểm của mình ngoại trừ điểm này: "Điều thứ hai các nhà phát triển cần tìm hiểu về cơ sở dữ liệu là toàn bộ chế độ xem trung tâm dữ liệu của thế giới. Thế giới trung tâm dữ liệu khác với thế giới trung tâm quy trình hơn bất cứ điều gì hầu hết các nhà phát triển đã từng học. So với khoảng cách này, khoảng cách giữa lập trình có cấu trúc và lập trình hướng đối tượng là tương đối nhỏ. " Bạn có thể giải thích về điều này? Bạn nói rằng khoảng cách là lớn, nhưng tôi đoán tôi muốn thực sự hiểu chế độ xem tập trung vào dữ liệu và cách nó tách rời khỏi chế độ xem quy trình.
jedd.ahyoung

73

Câu hỏi hay. Sau đây là một số suy nghĩ không theo thứ tự cụ thể:

  1. Bình thường hóa, ít nhất là hình thức bình thường thứ hai, là điều cần thiết.

  2. Tính toàn vẹn tham chiếu cũng rất cần thiết, với việc cân nhắc xóa tầng và cập nhật thích hợp.

  3. Sử dụng tốt và đúng các hạn chế kiểm tra. Hãy để cơ sở dữ liệu làm càng nhiều công việc càng tốt.

  4. Không phân tán logic nghiệp vụ trong cả cơ sở dữ liệu và mã lớp giữa. Chọn cái này hay cái khác, tốt nhất là trong mã tầng giữa.

  5. Quyết định một cách tiếp cận nhất quán cho các khóa chính và các khóa cụm.

  6. Đừng quá chỉ số. Chọn chỉ số của bạn một cách khôn ngoan.

  7. Bảng nhất quán và đặt tên cột. Chọn một tiêu chuẩn và dính vào nó.

  8. Giới hạn số lượng cột trong cơ sở dữ liệu sẽ chấp nhận giá trị null.

  9. Đừng mang đi với các kích hoạt. Họ có công dụng của họ nhưng có thể làm phức tạp mọi thứ một cách vội vàng.

  10. Hãy cẩn thận với UDFs. Chúng rất tuyệt nhưng có thể gây ra vấn đề về hiệu suất khi bạn không biết tần suất chúng có thể được gọi trong truy vấn.

  11. Nhận sách của Celko về thiết kế cơ sở dữ liệu. Người đàn ông kiêu ngạo nhưng biết công cụ của mình.


1
quan tâm đến chi tiết về mục 4. Đây là một chủ đề luôn luôn hấp dẫn tôi.
Brad

9
@David: Tôi luôn thích đặt nó ở cả hai nơi. Bằng cách đó, bạn được bảo vệ chống lại lỗi cũng như lỗi người dùng. Không có lý do gì để làm cho mọi cột trở nên vô hiệu hoặc để cho phép các giá trị ngoài phạm vi 1-12 được chèn vào một Monthcột. Quy tắc kinh doanh phức tạp, tất nhiên, là một câu chuyện khác.
Aaronaught

1
@Brad - Hầu hết các ứng dụng của chúng tôi tại nơi làm việc đã được thực hiện tốt trước khi các quy trình lập trình vững chắc được đưa vào sử dụng. Do đó, chúng tôi có logic kinh doanh rải rác khắp nơi. Một số trong UI, một số ở tầng giữa và một số trong cơ sở dữ liệu. Đó là một mớ hỗn độn. IMO, logic kinh doanh thuộc tầng lớp trung lưu.
Randy Minder

2
@David - Nếu chắc chắn tuyệt đối rằng sửa đổi cơ sở dữ liệu sẽ chỉ xảy ra trong các ứng dụng thì bạn có thể đúng. Tuy nhiên, điều này có lẽ là khá hiếm. Vì người dùng có thể sẽ nhập dữ liệu trực tiếp vào cơ sở dữ liệu, nên cũng nên đặt xác thực vào cơ sở dữ liệu. Bên cạnh đó, một số loại xác nhận đơn giản được thực hiện hiệu quả hơn trong cơ sở dữ liệu.
Randy Minder

1
Điểm # 8 thực sự quan trọng. Làm thế nào để có được các loại cột nói chung, là một điều rất quan trọng cần biết.
Chris Vest

22

Đầu tiên, các nhà phát triển cần hiểu rằng có một cái gì đó để biết về cơ sở dữ liệu. Chúng không chỉ là các thiết bị ma thuật nơi bạn đặt SQL và lấy ra các tập kết quả, mà là các phần mềm rất phức tạp với logic và các yêu cầu riêng của chúng.

Thứ hai, có các thiết lập cơ sở dữ liệu khác nhau cho các mục đích khác nhau. Bạn không muốn nhà phát triển tạo báo cáo lịch sử khỏi cơ sở dữ liệu giao dịch trực tuyến nếu có sẵn kho dữ liệu.

Thứ ba, các nhà phát triển cần hiểu SQL cơ bản, bao gồm các phép nối.

Quá khứ, nó phụ thuộc vào mức độ chặt chẽ của các nhà phát triển. Tôi đã từng làm việc trong các công việc mà tôi là nhà phát triển và thực tế là DBA, nơi các DBA ở ngay lối đi và nơi các DBA ở trong khu vực của họ. (Tôi không thích phần ba.) Giả sử các nhà phát triển có liên quan đến thiết kế cơ sở dữ liệu:

Họ cần hiểu chuẩn hóa cơ bản, ít nhất là ba hình thức bình thường đầu tiên. Bất cứ điều gì ngoài điều đó, có được một DBA. Đối với những người có bất kỳ kinh nghiệm nào với các phòng xử án ở Hoa Kỳ (và các chương trình truyền hình ngẫu nhiên được tính ở đây), có câu "Tùy thuộc vào chìa khóa, toàn bộ chìa khóa, và không có gì ngoài chìa khóa, vì vậy hãy giúp bạn Codd."

Họ cần có manh mối về các chỉ mục, ý tôi là họ nên có một số ý tưởng về những chỉ số họ cần và khả năng chúng ảnh hưởng đến hiệu suất. Điều này có nghĩa là không có các chỉ số vô dụng, nhưng không ngại thêm chúng vào các truy vấn hỗ trợ. Bất cứ điều gì hơn nữa (như số dư) nên để lại cho DBA.

Họ cần hiểu nhu cầu về tính toàn vẹn dữ liệu và có thể chỉ ra nơi họ đang xác minh dữ liệu và họ đang làm gì nếu họ gặp vấn đề. Điều này không cần phải có trong cơ sở dữ liệu (nơi sẽ khó đưa ra thông báo lỗi có ý nghĩa cho người dùng), nhưng phải ở đâu đó.

Họ nên có kiến ​​thức cơ bản về cách lên kế hoạch và cách đọc nó nói chung (ít nhất là đủ để biết liệu các thuật toán có hiệu quả hay không).

Họ nên biết mơ hồ kích hoạt là gì, chế độ xem là gì và có thể phân vùng các cơ sở dữ liệu. Họ không cần bất kỳ loại chi tiết nào, nhưng họ cần biết để hỏi DBA về những điều này.

Tất nhiên họ nên biết không can thiệp vào dữ liệu sản xuất, hoặc mã sản xuất hoặc bất cứ thứ gì tương tự, và họ nên biết rằng tất cả các mã nguồn đều đi vào một VCS.

Tôi chắc chắn đã quên một cái gì đó, nhưng nhà phát triển trung bình không cần phải là một DBA, miễn là có một DBA thực sự trong tay.


19

Lập chỉ mục cơ bản

Tôi luôn bị sốc khi thấy một bảng hoặc toàn bộ cơ sở dữ liệu không có chỉ mục hoặc các chỉ mục tùy ý / vô dụng. Ngay cả khi bạn không thiết kế cơ sở dữ liệu và chỉ phải viết một số truy vấn, tối thiểu vẫn cần phải hiểu:

  • Những gì được lập chỉ mục trong cơ sở dữ liệu của bạn và những gì không:
  • Sự khác biệt giữa các kiểu quét, cách chúng được chọn và cách bạn viết truy vấn có thể ảnh hưởng đến lựa chọn đó;
  • Khái niệm về phạm vi bảo hiểm (tại sao bạn không nên viết SELECT *);
  • Sự khác biệt giữa một chỉ số cụm và không cụm;
  • Tại sao nhiều hơn / chỉ số lớn hơn không nhất thiết phải tốt hơn;
  • Tại sao bạn nên cố gắng tránh bọc cột lọc trong các chức năng.

Nhà thiết kế cũng nên biết về các mẫu chống chỉ mục phổ biến, ví dụ:

  • Mẫu chống truy cập (lập chỉ mục từng cột, từng cột một)
  • Mô hình chống bắt tất cả (một chỉ mục lớn trên tất cả hoặc hầu hết các cột, dường như được tạo ra theo ấn tượng sai lầm rằng nó sẽ tăng tốc mọi truy vấn có thể hiểu được liên quan đến bất kỳ cột nào trong số đó).

Chất lượng chỉ mục của một cơ sở dữ liệu - và có hoặc không bạn tận dụng lợi thế của nó với các truy vấn bạn viết - tài khoản cho đến nay các đoạn quan trọng nhất của hiệu suất. 9 trên 10 câu hỏi được đăng trên SO và các diễn đàn khác phàn nàn về hiệu suất kém luôn biến thành do lập chỉ mục kém hoặc biểu hiện không thể nói được.


Bạn có thể giải thích về "phạm vi bảo hiểm"? Tôi có thể thấy lý do tại sao CHỌN * không phải là một thói quen tốt để tham gia, nhưng tôi không biết ý nghĩa của "phạm vi bảo hiểm" và tự hỏi liệu nó có ám chỉ đến một lý do khác để tránh CHỌN * không.
Edmund

1
@Edmund: Một chỉ mục bao gồm một truy vấn nếu tất cả các trường đầu ra là một phần của chỉ mục (dưới dạng cột được lập chỉ mục hoặc INCLUDEcột trong SQL Server). Nếu chỉ mục khả dụng duy nhất cho một truy vấn nhất định là không bao phủ, thì tất cả các hàng phải được truy xuất, từng cái một, hoạt động rất chậm và phần lớn thời gian trình tối ưu hóa truy vấn sẽ quyết định rằng nó không phải là Thay vào đó, nó đáng giá và thực hiện quét toàn bộ chỉ mục / bảng. Đó là lý do tại sao bạn không viết SELECT *- nó hầu như đảm bảo rằng không có chỉ mục nào sẽ bao gồm truy vấn.
Aaronaught

cảm ơn! Mặc dù là người dùng PostgreSQL, tôi không cần phải lo lắng về những điều như vậy (chưa?): Các chỉ mục không chứa thông tin về mức độ hiển thị vì vậy các bộ dữ liệu bảng luôn cần phải được quét. Nhìn chung, mặc dù, nó có vẻ như là một yếu tố khá quan trọng.
Edmund

@Edmund: PostgreSQL có thể không có INCLUDEcột (tôi không thể chắc chắn), nhưng điều đó không có nghĩa là bạn không thể đặt các cột bạn muốn đưa vào dữ liệu chỉ mục thực tế. Đó là những gì chúng tôi phải làm lại trong SQL Server 2000 ngày. Bảo hiểm vẫn là vấn đề cho dù bạn đang sử dụng DBMS nào.
Aaronaught

16

Bình thường hóa

Tôi luôn cảm thấy buồn khi thấy ai đó đang vật lộn để viết một truy vấn quá phức tạp, hoàn toàn đơn giản với một thiết kế được chuẩn hóa ("Hiển thị cho tôi tổng doanh số trên mỗi vùng.").

Nếu bạn hiểu điều này ngay từ đầu và thiết kế phù hợp, bạn sẽ tự cứu mình rất nhiều nỗi đau sau này. Thật dễ dàng để chuẩn hóa hiệu suất sau khi bạn đã bình thường hóa; Thật không dễ dàng để bình thường hóa một cơ sở dữ liệu không được thiết kế theo cách đó ngay từ đầu.

Ít nhất, bạn nên biết 3NF là gì và làm thế nào để đạt được điều đó. Với hầu hết các cơ sở dữ liệu giao dịch, đây là sự cân bằng rất tốt giữa việc làm cho các truy vấn dễ viết và duy trì hiệu suất tốt.


14

Chỉ mục hoạt động như thế nào

Đây có thể không phải là quan trọng nhất, nhưng chắc chắn là chủ đề được đánh giá thấp nhất.

Vấn đề với việc lập chỉ mục là các hướng dẫn SQL thường không đề cập đến chúng và tất cả các ví dụ về đồ chơi đều hoạt động mà không có bất kỳ chỉ mục nào.

Thậm chí nhiều nhà phát triển có kinh nghiệm có thể viết SQL khá tốt (và phức tạp) mà không cần biết nhiều về chỉ mục hơn là " Một chỉ mục giúp truy vấn nhanh ".

Đó là bởi vì cơ sở dữ liệu SQL làm rất tốt công việc như hộp đen:

Hãy cho tôi biết những gì bạn cần (gimme SQL), tôi sẽ chăm sóc nó.

Và điều đó hoạt động hoàn hảo để lấy kết quả chính xác. Tác giả của SQL không cần biết hệ thống đang làm gì đằng sau hậu trường - cho đến khi mọi thứ trở nên chậm chạp .....

Đó là khi lập chỉ mục trở thành một chủ đề. Nhưng điều đó thường rất muộn và ai đó (một số công ty?) Đã bị một vấn đề thực sự.

Đó là lý do tại sao tôi tin rằng lập chỉ mục là chủ đề số 1 không thể quên khi làm việc với cơ sở dữ liệu . Thật không may, nó rất dễ dàng để quên nó.

Khước từ

Các đối số được mượn từ lời nói đầu của Sách điện tử miễn phí của tôi " Sử dụng Chỉ mục, Luke ". Tôi đang dành khá nhiều thời gian để giải thích cách các chỉ mục hoạt động và làm thế nào để sử dụng chúng đúng cách.


12

Tôi chỉ muốn chỉ ra một quan sát - đó là dường như phần lớn các phản hồi cho rằng cơ sở dữ liệu có thể hoán đổi cho nhau với cơ sở dữ liệu quan hệ. Ngoài ra còn có cơ sở dữ liệu đối tượng, cơ sở dữ liệu tập tin phẳng. Điều quan trọng là khẳng định nhu cầu của dự án phần mềm trong tay. Từ góc độ lập trình viên, quyết định cơ sở dữ liệu có thể bị trì hoãn cho đến sau này. Mô hình dữ liệu mặt khác có thể đạt được sớm và dẫn đến nhiều thành công.

Tôi nghĩ mô hình hóa dữ liệu là một thành phần quan trọng và là một khái niệm tương đối cũ nhưng nó là một khái niệm đã bị nhiều người trong ngành công nghiệp phần mềm lãng quên. Mô hình hóa dữ liệu, đặc biệt là mô hình hóa khái niệm, có thể tiết lộ hành vi chức năng của một hệ thống và có thể được dựa vào như một lộ trình phát triển.

Mặt khác, loại cơ sở dữ liệu cần thiết có thể được xác định dựa trên nhiều yếu tố khác nhau để bao gồm môi trường, khối lượng người dùng và phần cứng cục bộ có sẵn như không gian ổ cứng.


Bạn có nghĩa là thích làm sơ đồ mối quan hệ thực thể?
crosenblum

Có ... tôi có quên đề cập đến ERD không? :-)
FernandoZ

1 ... Nhưng bạn phải nhận ra bạn đang ở trên SO: nhà của thợ sửa ống nước chi tiêu ngày của họ ấn định không phù hợp ORM trở kháng vì vậy tất cả họ biết, ăn uống và nghĩ là không chỉ quan hệ nhưng "SQL" :)
SyntaxT3rr0r


9

Mọi nhà phát triển nên biết rằng điều này là sai: "Cấu hình một hoạt động cơ sở dữ liệu hoàn toàn khác với mã hồ sơ."

Có một Big-O rõ ràng theo nghĩa truyền thống. Khi bạn thực hiện EXPLAIN PLAN(hoặc tương đương), bạn sẽ thấy thuật toán. Một số thuật toán liên quan đến các vòng lặp lồng nhau và là O ( n ^ 2). Các thuật toán khác liên quan đến tra cứu cây B và là O ( n log n ).

Điều này rất, rất nghiêm trọng. Đó là trung tâm để hiểu tại sao các chỉ số quan trọng. Đó là trọng tâm để hiểu sự đánh đổi bình thường hóa-bình thường hóa tốc độ. Đó là trọng tâm để hiểu tại sao kho dữ liệu sử dụng lược đồ sao không được chuẩn hóa cho các cập nhật giao dịch.

Nếu bạn không rõ ràng về thuật toán đang được sử dụng, hãy làm như sau. Dừng lại. Giải thích kế hoạch thực hiện truy vấn. Điều chỉnh chỉ số cho phù hợp.

Ngoài ra, hệ quả tất yếu: Nhiều chỉ số không tốt hơn.

Đôi khi một chỉ mục tập trung vào một hoạt động sẽ làm chậm các hoạt động khác. Tùy thuộc vào tỷ lệ của hai thao tác, việc thêm một chỉ mục có thể có hiệu ứng tốt, không có tác động tổng thể hoặc gây bất lợi cho hiệu suất tổng thể.


Tôi có một cảm giác rằng sẽ được thực hiện sai cách. Điều tôi muốn nói là "truyền thống" là bạn không thực sự có quyền kiểm soát các thuật toán, chỉ có khả năng ảnh hưởng đến những thuật toán nào được sử dụng. Dù sao, tôi đã loại bỏ ngôn ngữ đó vì tôi không muốn bất cứ điều gì gây tranh cãi quá nhiều trong bài viết chính.
Aaronaught

@Aaron: Bạn làm có kiểm soát đối với các thuật toán. Đó là những gì chỉ số dành cho.
S.Lott

Hmm, vậy bạn có thể thay đổi loại thuật toán sắp xếp nào được DE sử dụng? Những cấu trúc dữ liệu được sử dụng cho chỉ mục? Tôi không muốn tranh luận về điểm này, đó là lý do tại sao tôi lấy nó ra, nhưng tôi nghĩ rằng bạn có quyền kiểm soát ít hơn khi làm việc với cơ sở dữ liệu so với mã.
Aaronaught

@Aaron: Ít kiểm soát hơn không loại bỏ nghĩa vụ thực sự hiểu nếu truy vấn là * O ** (* n ^ 2) hoặc * O ** (* n log n ) hoặc chỉ ** O ** (n). Kiểm soát ít hơn không loại bỏ nghĩa vụ thực sự hiểu những gì đang diễn ra và tìm ra cách kiểm soát nó.
S.Lott

@ S.Lott: Tôi nghĩ rằng chúng ta ở cùng một phía ở đây, vì tôi đã gợi ý một gánh nặng lớn hơn cho cơ sở dữ liệu - "Bạn cần biết ... [cách] đọc một kế hoạch truy vấn". Nhưng bản chỉnh sửa của tôi dường như đã được khôi phục, vì vậy ... tôi đoán bây giờ nó thuộc về cộng đồng.
Aaronaught

8

Tôi nghĩ mỗi nhà phát triển nên hiểu rằng cơ sở dữ liệu đòi hỏi một mô hình khác nhau .

Khi viết một truy vấn để lấy dữ liệu của bạn, một cách tiếp cận dựa trên tập hợp là cần thiết. Nhiều người với một cuộc đấu tranh nền tương tác với điều này. Tuy nhiên, khi họ nắm lấy nó, họ có thể đạt được kết quả tốt hơn nhiều, mặc dù giải pháp có thể không phải là giải pháp đầu tiên xuất hiện trong tâm trí lặp đi lặp lại của họ.


Vui lòng làm rõ ý nghĩa của phương pháp "dựa trên tập hợp"
Sông Vivian

1
Rằng bạn nên xem dữ liệu theo bộ và xem xét các vấn đề của mình có khả năng được giải quyết bằng cách đặt số học - liên quan đến các hàm xếp hạng khi cần, truy vấn con, tổng hợp, v.v. Nhiều nhà phát triển nghĩ về những gì cần phải được thực hiện cho mỗi hàng, đó là suy nghĩ lặp đi lặp lại.
Cướp Farley

8

Câu hỏi tuyệt vời. Chúng ta hãy xem, trước tiên, không ai nên xem xét truy vấn một cơ sở dữ liệu không hiểu kỹ về các phép nối. Điều đó giống như lái xe mà không biết tay lái và phanh ở đâu. Bạn cũng cần biết các kiểu dữ liệu và cách chọn cái tốt nhất.

Một điều khác mà các nhà phát triển nên hiểu là có ba điều bạn nên có trong đầu khi thiết kế cơ sở dữ liệu:

  1. Tính toàn vẹn dữ liệu - nếu dữ liệu không thể dựa vào bạn về cơ bản không có dữ liệu - điều này có nghĩa là không đưa logic cần thiết vào ứng dụng vì nhiều nguồn khác có thể chạm vào cơ sở dữ liệu. Các ràng buộc, khóa ngoại và đôi khi kích hoạt là cần thiết để toàn vẹn dữ liệu. Đừng sử dụng chúng bởi vì bạn không thích chúng hoặc không muốn bị làm phiền để hiểu chúng.

  2. Hiệu suất - rất khó để cấu trúc lại một cơ sở dữ liệu hoạt động kém và hiệu suất nên được xem xét ngay từ đầu. Có nhiều cách để thực hiện cùng một truy vấn và một số được biết là nhanh hơn hầu như luôn luôn, đó là thiển cận không học và sử dụng những cách này. Đọc một số sách về điều chỉnh hiệu suất trước khi thiết kế truy vấn hoặc cấu trúc cơ sở dữ liệu.

  3. Bảo mật - dữ liệu này là máu sống của công ty bạn, nó cũng thường chứa thông tin cá nhân có thể bị đánh cắp. Tìm hiểu để bảo vệ dữ liệu của bạn khỏi các cuộc tấn công tiêm nhiễm SQL và gian lận và trộm danh tính.

Khi truy vấn cơ sở dữ liệu, rất dễ nhận được câu trả lời sai. Hãy chắc chắn rằng bạn hiểu mô hình dữ liệu của bạn kỹ lưỡng. Hãy nhớ rằng các quyết định thực tế thường được đưa ra dựa trên dữ liệu mà truy vấn của bạn trả về. Khi nó sai, các quyết định kinh doanh sai được đưa ra. Bạn có thể giết một công ty từ các truy vấn xấu hoặc mất một khách hàng lớn. Dữ liệu có ý nghĩa, các nhà phát triển dường như thường quên điều đó.

Dữ liệu hầu như không bao giờ biến mất, hãy nghĩ về việc lưu trữ dữ liệu theo thời gian thay vì chỉ làm thế nào để có được nó trong ngày hôm nay. Cơ sở dữ liệu đó hoạt động tốt khi nó có một trăm nghìn hồ sơ, có thể không tốt trong mười năm. Các ứng dụng hiếm khi kéo dài như dữ liệu. Đây là một lý do tại sao thiết kế cho hiệu suất là rất quan trọng.

Cơ sở dữ liệu của bạn sẽ có thể cần các trường mà ứng dụng không cần xem. Những thứ như GUID để nhân rộng, ngày được chèn vào các trường. v.v. Bạn cũng có thể cần lưu trữ lịch sử thay đổi và ai đã thực hiện chúng khi và có thể khôi phục các thay đổi xấu từ kho này. Hãy suy nghĩ về cách bạn dự định làm điều này trước khi bạn đến hỏi một trang web về cách khắc phục vấn đề mà bạn quên đặt một mệnh đề where trên một bản cập nhật và cập nhật toàn bộ bảng.

Không bao giờ phát triển trong phiên bản mới hơn của cơ sở dữ liệu so với phiên bản sản xuất. Không bao giờ, không bao giờ, không bao giờ phát triển trực tiếp đối với cơ sở dữ liệu sản xuất.

Nếu bạn không có quản trị viên cơ sở dữ liệu, hãy đảm bảo ai đó đang tạo bản sao lưu và biết cách khôi phục chúng và đã kiểm tra khôi phục chúng.

Mã cơ sở dữ liệu là mã, không có lý do gì để không giữ nó trong kiểm soát nguồn giống như phần còn lại của mã của bạn.


6

Thiết kế cơ sở dữ liệu tiến hóa. http://martinfowler.com/articles/evodb.html

Các phương pháp nhanh này làm cho quá trình thay đổi cơ sở dữ liệu có thể quản lý, dự đoán và kiểm tra được.

Các nhà phát triển nên biết, cần những gì để cấu trúc lại cơ sở dữ liệu sản xuất về mặt kiểm soát phiên bản, tích hợp liên tục và thử nghiệm tự động.

Quá trình thiết kế cơ sở dữ liệu tiến hóa có các khía cạnh quản trị, ví dụ một cột sẽ bị loại bỏ sau một khoảng thời gian tồn tại trong tất cả các cơ sở dữ liệu của cơ sở mã này.

Ít nhất là biết rằng khái niệm và phương pháp tái cấu trúc cơ sở dữ liệu tồn tại. http://www.agiledata.org/essays/databaseRefactoringCatalog.html

Phân loại và mô tả quy trình cũng có thể thực hiện công cụ cho các phép tái cấu trúc này.


Tôi thích khái niệm tái cấu trúc, nhưng liên quan đến DB, vấn đề lớn thực sự với nó là dữ liệu liên tục. tái cấu trúc DB thường liên quan đến việc di chuyển dữ liệu, trong thực tế rất khó khăn, đặc biệt là nếu bạn không cho phép bất kỳ thời gian chết nào của hệ thống. rollback cũng không tầm thường. theo quan điểm của tôi, những khó khăn trong việc triển khai đúng cách / an toàn + chiến lược rollback thường là những người trình chiếu để tái cấu trúc DB nhẹ như mã ứng dụng. bản thân nó thường có ý nghĩa đối với công cụ tái cấu trúc nhưng bạn luôn phải vượt xa chi phí / lợi ích.
manuel aldana

Xem thêm 'Tái cấu trúc cơ sở dữ liệu' của Ambler's ( amazon.com/Refactoring-Database-Evolutionary-Database-Design/, ).
Jonathan Leffler

5

Từ kinh nghiệm của tôi với cơ sở dữ liệu quan hệ, mọi nhà phát triển nên biết:

- Các loại dữ liệu khác nhau :

Sử dụng đúng loại cho công việc chính xác sẽ giúp thiết kế DB của bạn mạnh mẽ hơn, truy vấn của bạn nhanh hơn và cuộc sống của bạn dễ dàng hơn.

- Tìm hiểu về 1xM và MxM :

Đây là bánh mì và bơ cho cơ sở dữ liệu quan hệ. Bạn cần hiểu mối quan hệ một-nhiều và nhiều-nhiều và áp dụng sau đó khi thích hợp.

- Nguyên tắc " KISS " cũng áp dụng cho DB :

Đơn giản luôn làm việc tốt nhất. Miễn là bạn đã nghiên cứu cách DB hoạt động, bạn sẽ tránh được sự phức tạp không cần thiết sẽ dẫn đến các vấn đề về bảo trì và tốc độ.

- Chỉ số :

Nó không đủ nếu bạn biết chúng là gì. Bạn cần hiểu khi nào nên sử dụng chúng và khi nào không.


cũng thế:

  • Đại số Boolean là bạn của bạn
  • Hình ảnh: Đừng lưu trữ chúng trên DB. Đừng hỏi tại sao.
  • Kiểm tra XÓA với CHỌN

+1 cho Hình ảnh. Tôi sẽ thay thế 'Hình ảnh' bằng 'BLOB'.
Agnel Kurian

Tôi không thực sự chắc chắn về phần "đơn giản". Cơ sở dữ liệu đơn giản nhất có thể là một bảng khổng lồ với một loạt các varchar(max)cột. Cơ sở dữ liệu quan hệ nên được chuẩn hóa , không được đơn giản hóa .
Aaronaught

Mối quan tâm của bạn được đề cập trước đó, trong phần "loại dữ liệu" trong bài đăng của tôi. Tôi đã đề cập đến việc sử dụng (không cần thiết) các thủ tục / trình kích hoạt / con trỏ được lưu trữ, v.v.
Anax

5

Tôi muốn tất cả mọi người, cả DBA và nhà phát triển / nhà thiết kế / kiến ​​trúc sư, hiểu rõ hơn về cách mô hình đúng miền kinh doanh và cách ánh xạ / dịch mô hình miền kinh doanh đó sang cả mô hình logic cơ sở dữ liệu chuẩn hóa, mô hình vật lý được tối ưu hóa và mô hình vật lý được tối ưu hóa mô hình lớp hướng đối tượng thích hợp, mỗi một trong số đó là (có thể) khác nhau, vì nhiều lý do khác nhau và hiểu khi nào, tại sao và làm thế nào chúng (hoặc nên) khác nhau.


5

Tôi muốn nói các kỹ năng SQL cơ bản mạnh mẽ. Tôi đã thấy rất nhiều nhà phát triển cho đến nay, những người biết một chút về cơ sở dữ liệu nhưng luôn hỏi các mẹo về cách tạo một truy vấn khá đơn giản. Các câu hỏi không phải lúc nào cũng dễ dàng và đơn giản. Bạn phải sử dụng nhiều phép nối (bên trong, bên trái, v.v.) khi truy vấn cơ sở dữ liệu được chuẩn hóa tốt.


5

Về nhận xét sau đây cho câu trả lời của Walter M .:

"Được viết rất tốt! Và viễn cảnh lịch sử là tuyệt vời cho những người không làm việc cơ sở dữ liệu tại thời điểm đó (ví dụ như tôi)".

Các quan điểm lịch sử là trong một ý nghĩa nhất định hoàn toàn quan trọng. "Những người quên lịch sử, sẽ cam chịu lặp lại nó." Cfr XML lặp lại các lỗi phân cấp của quá khứ, cơ sở dữ liệu đồ thị lặp lại các lỗi mạng trong quá khứ, các hệ thống OO buộc mô hình phân cấp theo người dùng trong khi mọi người chỉ bằng một phần mười của bộ não nên biết rằng mô hình phân cấp không phù hợp với chung- đại diện mục đích của thế giới thực, vân vân, vân vân.

Đối với câu hỏi:

Mọi nhà phát triển cơ sở dữ liệu nên biết rằng "Quan hệ" không bằng "SQL". Sau đó, họ sẽ hiểu lý do tại sao họ bị các nhà cung cấp DBMS buông tha quá mức và tại sao họ nên nói với những nhà cung cấp đó tìm ra những thứ tốt hơn (ví dụ như DBMS thực sự có quan hệ) nếu họ muốn tiếp tục hút số lượng lớn tiền của khách hàng của họ cho phần mềm crappy như vậy).

Và mọi nhà phát triển cơ sở dữ liệu nên biết mọi thứ về đại số quan hệ. Sau đó, sẽ không còn một nhà phát triển nào phải đăng những câu ngu ngốc "Tôi không biết làm công việc của mình và muốn người khác làm điều đó cho tôi" trên Stack Overflow nữa.


1
Tôi đồng ý rằng nhà phát triển cần biết SQL và phân kỳ RDM ở đâu. Phải nói rằng, việc sử dụng RDM hợp lý có thể là một trợ lý vô giá cho người thiết kế cơ sở dữ liệu, ngay cả khi việc triển khai là SQL.
Walter Mitty

1
Trong trường hợp bạn quên, George Santayana, đã viết câu nói kinh điển đó ...
crosenblum

5

Tôi nghĩ rằng rất nhiều chi tiết kỹ thuật đã được đề cập ở đây và tôi không muốn thêm vào chúng. Một điều tôi muốn nói là mang tính xã hội hơn là kỹ thuật, đừng rơi vào cái bẫy "DBA biết điều tốt nhất" với tư cách là một nhà phát triển ứng dụng.

Nếu bạn đang gặp vấn đề về hiệu năng với truy vấn, hãy sở hữu vấn đề này. Tự nghiên cứu và thúc đẩy các DBA giải thích những gì đang xảy ra và giải pháp của họ đang giải quyết vấn đề như thế nào.

Hãy đến với đề xuất của riêng bạn quá sau khi bạn đã thực hiện nghiên cứu. Đó là, tôi cố gắng tìm một giải pháp hợp tác cho vấn đề thay vì để lại các vấn đề cơ sở dữ liệu cho các DBA.


câu trả lời tốt. Mỗi chúng ta đều có khu vực riêng của mình, chúng ta đóng góp cho mọi vấn đề hoặc giải pháp.
crosenblum

5

Tôn trọng đơn giản.

  • Nó không chỉ là một kho lưu trữ
  • Bạn có thể không biết rõ hơn nhà cung cấp hoặc DBA
  • Bạn sẽ không hỗ trợ nó lúc 3 giờ sáng với những người quản lý cấp cao hét vào mặt bạn

3

Hãy xem xét việc không chuẩn hóa như một thiên thần có thể chứ không phải ma quỷ và cũng xem xét cơ sở dữ liệu NoQuery như một giải pháp thay thế cho cơ sở dữ liệu quan hệ.

Ngoài ra, tôi nghĩ rằng mô hình Quan hệ thực thể là điều cần biết cho mọi nhà phát triển ngay cả khi bạn không thiết kế cơ sở dữ liệu. Nó sẽ cho phép bạn hiểu thấu đáo cơ sở dữ liệu của bạn.


3

Không bao giờ chèn dữ liệu với mã hóa văn bản sai.

Khi cơ sở dữ liệu của bạn bị ô nhiễm với nhiều bảng mã, điều tốt nhất bạn có thể làm là áp dụng một số loại kết hợp heuristic và lao động thủ công.


2
"Mã hóa văn bản sai" là gì và nó xảy ra như thế nào?
Gennady Vanin Геннадий Внаин 31/10/10

1
@ vgv8, nó xảy ra khi khách hàng của bạn cho phép người dùng gửi văn bản theo bất kỳ mã hóa nào bạn muốn, bạn sẽ lưu trữ nó một cách mù quáng. Sau đó, khi bạn cần thực hiện một số loại chuyển đổi hoặc phân tích, mã của bạn bị hỏng, vì ứng dụng của bạn giả sử utf-8, nhưng một số kẻ ngốc đã thêm dữ liệu utf-16 và lỗi chương trình của bạn hoặc bắt đầu phát ra tiếng vô nghĩa.
mikerobi

3

Ngoài các tùy chọn cú pháp và khái niệm mà họ sử dụng (chẳng hạn như tham gia, kích hoạt và thủ tục được lưu trữ), một điều sẽ rất quan trọng đối với mọi nhà phát triển sử dụng cơ sở dữ liệu là:

Biết cách công cụ của bạn sẽ thực hiện truy vấn bạn đang viết với tính cụ thể.

Lý do tôi nghĩ rằng điều này rất quan trọng chỉ đơn giản là sản xuất ổn định. Bạn nên biết mã của bạn hoạt động như thế nào để bạn không dừng tất cả thực thi trong luồng của mình trong khi chờ đợi một hàm dài hoàn thành, vậy tại sao bạn không muốn biết truy vấn của mình sẽ ảnh hưởng đến cơ sở dữ liệu, chương trình của bạn và thậm chí có thể máy chủ?

Đây thực sự là một cái gì đó đã tấn công nhóm R & D của tôi nhiều lần hơn là thiếu dấu chấm phẩy hoặc tương tự. Giả định là truy vấn sẽ thực thi nhanh chóng vì nó thực hiện trên hệ thống phát triển của họ chỉ với vài nghìn hàng trong các bảng. Ngay cả khi cơ sở dữ liệu sản xuất có cùng kích thước, nhiều khả năng nó sẽ được sử dụng nhiều hơn và do đó gặp phải các ràng buộc khác như nhiều người dùng truy cập cùng lúc hoặc gặp sự cố với truy vấn khác ở nơi khác, do đó, trì hoãn kết quả của truy vấn này.

Ngay cả những điều đơn giản như cách tham gia ảnh hưởng đến hiệu suất của truy vấn cũng là vô giá trong sản xuất. Có nhiều tính năng của nhiều công cụ cơ sở dữ liệu giúp mọi thứ dễ dàng hơn về mặt khái niệm, nhưng có thể giới thiệu gotchas về hiệu suất nếu không nghĩ rõ ràng.

Biết quy trình thực hiện công cụ cơ sở dữ liệu của bạn và lập kế hoạch cho nó.


3

Đối với một nhà phát triển chuyên nghiệp tầm trung sử dụng cơ sở dữ liệu rất nhiều (viết / duy trì truy vấn hàng ngày hoặc gần như hàng ngày), tôi nghĩ rằng kỳ vọng sẽ giống như bất kỳ lĩnh vực nào khác: Bạn đã viết một trường đại học .

Mỗi người đam mê C ++ đã viết một lớp chuỗi ở trường đại học. Mỗi người đam mê đồ họa đã viết một raytracer ở trường đại học. Mỗi người đam mê web đã viết các trang web tương tác (thường là trước khi chúng tôi có "khung web") ở trường đại học. Mọi mọt sách phần cứng (và thậm chí cả mọt sách phần mềm) đều xây dựng CPU ở trường đại học. Mỗi bác sĩ mổ xẻ toàn bộ xác chết ở trường đại học, ngay cả khi cô ấy chỉ đo huyết áp và nói với tôi rằng cholesterol của tôi quá cao ngày hôm nay. Tại sao cơ sở dữ liệu sẽ khác nhau?

Thật không may, chúng có vẻ khác nhau, ngày nay, vì một số lý do. Mọi người muốn các lập trình viên .NET biết các chuỗi hoạt động trong C như thế nào , nhưng các phần bên trong RDBMS của bạn không nên quan tâm đến bạn quá nhiều .

Hầu như không thể có được mức độ hiểu biết tương tự từ việc chỉ đọc về chúng, hoặc thậm chí làm việc theo cách của bạn từ trên xuống. Nhưng nếu bạn bắt đầu ở phía dưới và hiểu từng phần, thì việc tìm ra các chi tiết cụ thể cho cơ sở dữ liệu của bạn là tương đối dễ dàng. Ngay cả những thứ mà nhiều chuyên viên máy tính cơ sở dữ liệu dường như không thể mò mẫm, như khi nào nên sử dụng cơ sở dữ liệu không liên quan.

Có lẽ đó là một chút nghiêm ngặt, đặc biệt là nếu bạn không học khoa học máy tính ở trường đại học. Tôi sẽ nhấn mạnh một số: Bạn có thể viết một cái ngay hôm nay , hoàn toàn, từ đầu. Tôi không quan tâm nếu bạn biết chi tiết cụ thể về cách trình tối ưu hóa truy vấn PostgreSQL hoạt động, nhưng nếu bạn biết đủ để tự viết một cái, có lẽ nó sẽ không quá khác so với những gì họ đã làm. Và bạn biết đấy, thực sự không khó để viết một bài cơ bản.


Từ bài viết Joel được liên kết về chuỗi C, không phải là đoạn trích dẫn sau đây đến hành vi không xác định: char * str = "* Xin chào!"; str [0] = strlen (str) - 1; str là một chuỗi ký tự và là chung trong bộ nhớ chỉ đọc. Bạn không thể viết thư cho nó :?
Hereto Tìm hiểu

Một chuyên gia cơ sở dữ liệu chuyên nghiệp, tốt, nhưng mọi nhà phát triển ?
Ben Aston

Ben: Mọi nhà phát triển chuyên nghiệp sử dụng cơ sở dữ liệu thường xuyên, yeah. Chúng thực sự không khó lắm, vì vậy nếu bạn không biết cách, điều đó có nghĩa là bạn chưa bao giờ mất một chút thời gian để tìm hiểu cách thức hoạt động của DB. Mỗi chuyên ngành khoa học máy tính tôi tốt nghiệp đều thiết kế CPU và triển khai HĐH. Một cơ sở dữ liệu đơn giản hơn một trong hai cơ sở dữ liệu này, vì vậy nếu bạn dành thời gian sử dụng một cơ sở dữ liệu, tôi sẽ không thấy một lý do nào để không biết về cách chúng hoạt động.
Ken

2

Thứ tự của các cột trong một chỉ mục không duy nhất là quan trọng.

Cột đầu tiên phải là cột có nhiều thay đổi nhất trong nội dung của nó (tức là tính chính xác).

Điều này là để hỗ trợ khả năng của SQL Server để tạo các số liệu thống kê hữu ích trong cách sử dụng chỉ mục khi chạy.


-1 Tôi không nên tuân theo các quy tắc như 'Cột đầu tiên phải là cột có nhiều thay đổi nhất trong nội dung của nó'. Nếu một người có một số kiến ​​thức cơ bản về cách các chỉ mục hoạt động, thật đơn giản hãy xem thứ tự quan trọng như thế nào và thứ tự của cột sẽ phụ thuộc vào cách bảng sẽ được truy vấn.
phép lạ173

cảm ơn, nhưng nếu chỉ mục được tạo trên 3 trường, trên cơ sở truy vấn sql cụ thể sẽ sử dụng 3 trường đó trong mệnh đề where của nó, thì thứ tự có thể có ý nghĩa và trường có số lượng thẻ cao nhất xuất hiện trước \ dẫn đến cải thiện hiệu suất .... hoặc ít nhất đó là những gì tôi đọc trong sách điều chỉnh hiệu suất của Microsoft SQL Server. Tôi đã thử nó và nó có vẻ hoạt động tốt hơn (nhiều năm trước).
Mike D

2

Hiểu các công cụ mà bạn sử dụng để lập trình cơ sở dữ liệu !!!

Tôi đã lãng phí quá nhiều thời gian để cố gắng hiểu lý do tại sao mã của tôi thất bại một cách bí ẩn.

Nếu bạn đang sử dụng .NET chẳng hạn, bạn cần biết cách sử dụng đúng các đối tượng trong System.Data.SqlClientkhông gian tên. Bạn cần biết cách quản lý các SqlConnectionđối tượng của mình để đảm bảo chúng được mở, đóng và khi cần thiết, được xử lý đúng cách.

Bạn cần biết rằng khi bạn sử dụng a SqlDataReader, cần phải đóng nó tách biệt với SqlConnection. Bạn cần hiểu làm thế nào để giữ các kết nối mở khi thích hợp với cách giảm thiểu số lần truy cập vào cơ sở dữ liệu (vì chúng tương đối đắt về thời gian tính toán).


2
  • Kỹ năng SQL cơ bản.
  • Lập chỉ mục.
  • Đối phó với các hóa thân khác nhau của NGÀY / THỜI GIAN / THỜI GIAN.
  • Tài liệu trình điều khiển JDBC cho nền tảng bạn đang sử dụng.
  • Xử lý các loại dữ liệu nhị phân ( CLOB , BLOB , v.v.)

1

Đối với một số dự án, và mô hình hướng đối tượng là tốt hơn.

Đối với các dự án khác, một mô hình quan hệ là tốt hơn.



1

Khả năng tương thích RDBMS

Hãy xem nếu cần chạy ứng dụng trong nhiều RDBMS. Nếu có, có thể cần phải:

  • tránh các phần mở rộng SQL RDBMS
  • loại bỏ các kích hoạt và thủ tục lưu trữ
  • tuân theo các tiêu chuẩn SQL nghiêm ngặt
  • chuyển đổi các kiểu dữ liệu trường
  • thay đổi mức cô lập giao dịch

Mặt khác, những câu hỏi này nên được xử lý riêng và các phiên bản (hoặc cấu hình) khác nhau của ứng dụng sẽ được phát triển.


1

Đừng phụ thuộc vào thứ tự các hàng được trả về bởi một truy vấn SQL.


3
... trừ khi có một ORDER BYđiều khoản trong đó?
Aaronaught

Và không sử dụng một cách ORDER BYkhông cần thiết vì nó thêm tải cho máy chủ SQL
Vivian River

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.