Sự khác biệt giữa một bản ghi nhật ký và một hàng khác trong một máy chủ SQL là gì?


56

Có một câu hỏi khá vô hại về việc thêm ngày và giờ trong SQL Server đã đặt ra một cuộc tranh luận phân loại khá hấp dẫn.

Vậy làm thế nào để chúng ta phân biệt giữa các thuật ngữ liên quan và cách chúng ta sử dụng chúng đúng cách?

Hàng

Ghi lại


32
Một người đẩy một chiếc máy bay, cái còn lại được sử dụng bởi những người hipster bẩn thỉu để chơi nhạc
billinkc

1
Một bài đăng liên quan trên SO cho thấy rõ rằng đây là một câu hỏi quan trọng.
dezso

Lưu ý rằng trong Postgres và Oracle, một hàng có thể chứa nhiều bản ghi ...
a_horse_with_no_name

Câu trả lời:


69

Để trích dẫn Joe Celko (bạn không chỉ có thể tìm thấy tài liệu tham khảo này trên web và trong mục Wikipedia của anh ấy , mà thậm chí bạn sẽ thấy nó trên áo phông tại một số hội nghị):

Hàng không phải là hồ sơ.

Rất nhiều người chỉ cho anh ta là một kẻ ngốc nghếch, chỉ thích khiêm tốn và chửi mắng người mới, và tôi sẽ thừa nhận đó là cách anh ta đi qua. Nhưng tôi cũng đã gặp anh ấy trực tiếp - thậm chí chia sẻ một bữa ăn với anh ấy - và tôi không thể nói cho bạn biết tính cách ngoài đời thực của anh ấy khác với mặt trận trực tuyến của anh ấy như thế nào. Tôi thậm chí đã từng bắt gặp anh ta gọi các bản ghi hàng, và anh ta đã rất xấu hổ ( câu chuyện đầy đủ ở đây ).

Tôi thực sự đã mặc chiếc áo này đến hội nghị PASS ở Grapevine, Texas, năm 2006

Trong mọi trường hợp, hãy nói những gì bạn sẽ về nhân vật trực tuyến của anh chàng, nhưng anh ta đã viết tiêu chuẩn , và thực tế là một cơ quan như vậy ra lệnh rằng có một sự phân biệt sẽ cho bạn biết điều gì đó. Và nhiều như anh ta co rúm lại khi ai đó gọi một bản ghi, nhiều đồng nghiệp của tôi - cũng là chuyên gia trong thế giới SQL Server. Và những người trong chúng tôi tin rằng anh ấy đúng.

Ví dụ, Itzik Ben-Gan, một chuyên gia máy chủ SQL rõ ràng. Đây là một trích dẫn từ bài học đầu tiên trong Bộ công cụ đào tạo của anh ấy (Bài kiểm tra 70-461): Truy vấn Microsoft SQL Server 2012 :

Như một ví dụ về các thuật ngữ không chính xác trong T-SQL, mọi người thường sử dụng các thuật ngữ trong lĩnh vực này Các lĩnh vực và hồ sơ là vật lý. Các trường là những gì bạn có trong giao diện người dùng trong các ứng dụng khách và bản ghi là những gì bạn có trong các tệp và con trỏ. Các bảng là logic và chúng có các hàng và cột logic.

Và, biết Itzik, nếu bạn gửi cho anh ấy một e-mail hoặc góc anh ấy tại một hội nghị, anh ấy sẽ vui vẻ nói với bạn như vậy. Nếu bạn gọi một hàng là một bản ghi, theo ý kiến ​​của anh ấy, bạn không sử dụng thuật ngữ chính xác.

Bây giờ, là một ngành công nghiệp có đủ loại người, bạn có thể tìm thấy tài liệu (chẳng hạn như các bài báo mục tiêu công nghệ được đăng trong một câu trả lời khác) dường như tạo ra sự khác biệt rất tinh tế giữa hai người, và bạn sẽ tìm thấy nhiều người trong ngành xem xét chúng giống nhau (tôi biết một số người ở Microsoft và những người khác như Brent Ozar, người sẽ luôn gọi đó là một bản ghi). Điều đó không làm cho họ đúng, đó chỉ là cách họ nhìn nhận - họ xem logic và vật lý là như nhau (ít nhất là trong bối cảnh này) và nhiều người trong số họ có thể nghĩ rằng phần còn lại của chúng tôi chỉ là những người giữ lại hậu môn dành quá nhiều thời gian về ngữ nghĩa.

Vì không có nhà cung cấp nào nói "bạn sẽ gọi họ là {records | rows}", nên chúng tôi sẽ mãi mãi phải đối phó với lập luận này, bởi vì sẽ luôn có ai đó không hiểu logic so với vật lý, hoặc được dạy khác, hoặc đến từ nền tảng Access hoặc lập trình, v.v. Giống như một số người nói tomay-to và những người khác nói tomah-to, sẽ luôn có nhiều người từ "giống nhau" đến "họ hoàn toàn khác nhau "- và nhiều sắc thái ở giữa. Một lần nữa, điều đó không làm cho bất kỳ ai trong số họ đúng, bởi vì không ai có thể là người có thẩm quyền cuối cùng về vấn đề này. Nhưng trong không gian SQL Server, chắc chắn có đa số.


Điều đó nói rằng, IMHO, khi bạn đang nói về dữ liệu trong một bảng, bạn gọi nó là một hàng. Khi bạn đang thực hiện thao tác chèn, bạn đang chèn một hàng vào bảng. Khi bạn chạy một bản cập nhật, bạn đang cập nhật một hàng trong bảng. Và khi bạn thực hiện CHỌN, bạn đang truy xuất các hàng từ một bảng.

Hãy gọi nó là một bản ghi khi ứng dụng của bạn đã được giữ lại. Nhưng đừng tức giận nếu bạn nói: "Tôi đã chèn một bản ghi" và ai đó sửa bạn.


33

Microsoft đã ở một số nơi trong tổ chức của họ với điều kiện tên chính thức cho việc lưu trữ dữ liệu dạng bảng trên mỗi mục nhập bảng (để định nghĩa một định nghĩa phân loại phục vụ mục đích của riêng tôi) được gọi là "ROW". Tôi gửi làm bằng chứng ROW_NUMBER, ROWCOUNT, ROWVERSIONDataTable.Rowstài sản, trong đó một DataTablelà một C # đại diện của một TSQL "bảng" đối tượng. Trong trường hợp này, toàn bộ các thuộc tính MSDN khuyến khích việc sử dụng rowđể tham chiếu đến một tập hợp dữ liệu là một mục trong bảng. (lưu ý tôi đang cố gắng tránh sử dụng "bản ghi" hoặc "hàng" để xác định điều này, đó là điểm cần hỏi)

Tuy nhiên, cách nói là một ứng dụng liên quan đến "hồ sơ" của người dùng. Một cái gì đó độc đáo về một bản ghi có thể không được đại diện trực tiếp bởi một hàng lưu trữ duy nhất là thực tế là một bản ghi có thể có các phần phụ. Đúng, một bảng có thể có nhiều bảng liên quan, nhưng các bảng không được lưu trữ liên tục, nhưng chúng được lưu trữ liên quan về mặt logic.

Vì vậy, một hàng là thứ trong một bảng và một bản ghi là thứ mà nhà phát triển làm việc với việc sử dụng thực tế.


8
Người ta có thể lập luận rằng ROW là thực thể logic, trong khi RECORD là thực thể vật lý. ROW có thể có nhiều bản ghi: một trong chỉ mục được nhóm, một số trong các chỉ mục NC. Một hàng không vừa trong trang có thể được phân chia giữa bản ghi trong trang và bản ghi tràn trong bộ lưu trữ SLOB. Giá trị BLOB của một trường của một hàng có thể trải rộng trên một số bản ghi văn bản trong bộ lưu trữ BLOB. Một hàng trong một đống có thể bao gồm một bản ghi sơ khai và một bản ghi chuyển tiếp. V.v.
Remus Rusanu

Sau đó, bạn sẽ loại bỏ hoàn toàn việc sử dụng bản ghi từ khỏi miền ứng dụng hoặc hoàn toàn làm vấy bẩn vùng biển và đưa chúng ta ra khỏi các thuật ngữ có thể xác định và đi vào lĩnh vực thiết kế cơ sở dữ liệu lý thuyết và chi tiết triển khai. Bạn nêu lên những điểm tốt, nhưng từ quy ước của ứng dụng so với cơ sở dữ liệu, đó là nơi 80% độc giả của chúng tôi sẽ cảm thấy thoải mái, câu trả lời của tôi vẫn đứng vững, tôi giữ.
jcolebrand

4
Tôi không mâu thuẫn với câu trả lời của bạn, có lẽ tôi đã sai từ. Tôi chỉ trình bày cách mọi thứ được nhìn thấy bởi chính SQL Engine, trong đó lớp truy cập vật lý gọi chúng là 'bản ghi' so với lớp xử lý truy vấn (ngôn ngữ) xử lý 'hàng'.
Remus Rusanu

Tôi hiểu rồi. Tôi vẫn cảm thấy như nó làm vẩn đục nước. Không có hành vi phạm tội, tôi đảm bảo với bạn.
jcolebrand

31

Tôi vừa tìm kiếm qua tài liệu "Công nghệ thông tin - Ngôn ngữ cơ sở dữ liệu - SQL Phần 2: Nền tảng (SQL / Foundation)", định nghĩa tiêu chuẩn ANSI cho SQL được thực hiện bởi tất cả các RDBMS chính.

Từ rownày được sử dụng chủ yếu trong suốt tài liệu vài trăm lần, như mong đợi.

Từ recordnày chỉ được sử dụng để mô tả một bản ghi gần giống với bản ghi được sử dụng trong Oracle PL / SQL (mô tả cụ thể các kiểu dữ liệu bản ghi ADA). 6 đề cập trong tài liệu.

Tôi nghĩ rằng điều này làm sáng tỏ câu hỏi này, và trả lời các tranh luận khác nhau ở cả hai bên.


thông tin bổ sung

Từ một bản sao của (phiên bản nháp của tiêu chuẩn SQL mới nhất có sẵn miễn phí), có thể tìm thấy tại wiscorp.com (trang Tiêu chuẩn SQL có một số phiên bản cũ hơn và sửa đổi).

Tìm kiếm 7IWD2-02-Foundation-2011-12.pdf , với ngày 2011-12-21 cho thấy hàng từ xuất hiện 2277 lần trong tài liệu trong khi bản ghi từ chỉ xuất hiện 21 lần, dưới dạng động từ "bản ghi" hoặc trong một số phụ lục cuối cùng, về thông số kỹ thuật của kiểu dữ liệu tương ứng với kiểu dữ liệu SQL và kiểu ngôn ngữ máy chủ (Ada, Pascal).

Hơn nữa, cùng một tài liệu có ở trang 57 (nhấn mạnh của tôi):

4.15.1 Giới thiệu về bảng

Điều khoản này được sửa đổi bởi Mục 4.10.1, Giới thiệu về các bảng, trong ISO / IEC 9075-9.

Bảng là một tập hợp gồm 0 hoặc nhiều hàng trong đó mỗi hàng là một chuỗi gồm một hoặc nhiều giá trị cột. Loại cụ thể nhất của một hàng là một loại hàng. Mỗi hàng của một bảng đã cho có cùng loại hàng, được gọi là loại hàng của bảng đó. Giá trị của trường thứ i của mỗi hàng trong bảng là giá trị của cột thứ i của hàng đó trong bảng. Hàng là đơn vị dữ liệu nhỏ nhất có thể được chèn vào bảng và bị xóa khỏi bảng.

Mức độ của một bảng, và mức độ của mỗi phần tử hàng , là số cột của bảng đó. Số lượng hàng trong một bảng là số lượng thẻ. Một bảng có số lượng thẻ bằng 0 (không) được cho là trống.

Một bảng là một trong hai một bảng cơ sở , một bảng có nguồn gốc , hoặc một bảng tạm thời .


Vì vậy, liên quan đến DBMS sử dụng SQL:

Hàng không phải là bản ghi , trường không phải là cột, bảng không phải là tệp!


14

Bởi vì cơ sở dữ liệu quan hệ hiếm khi được sử dụng trong sự cô lập, để tránh nhầm lẫn giữa các phần khác của hệ thống, tôi luôn đề cập đến các bảng và hàng và cột. Trong một ứng dụng khách, chúng ta thường có các cấu trúc khác, bao gồm bộ dữ liệu, bộ dữ liệu, cơ sở dữ liệu, cơ sở dữ liệu, v.v. - ví dụ "trường" thường được sử dụng để nhập dữ liệu trên màn hình và Pascal có kiểu dữ liệu Bản ghi tương tự như cấu trúc trong C .

Đôi khi trong một thiết kế hệ thống, ý tưởng về "Bản ghi" có thể được sử dụng để có nghĩa là một cái gì đó rộng hơn một hàng. Nó có thể là một hàng và đó là lịch sử. Giống như khi chúng ta nói về một hàng bị xóa, chúng ta có thể có nghĩa là một hàng được đánh dấu đơn giản là đã xóa bằng một cột hoặc "di chuyển" đến một bảng đã bị xóa (và không chỉ đơn giản là không có một hàng mà không tồn tại, khá khó để ghim xuống). Có nhiều cách sử dụng khác nhau của thuật ngữ Record.

Các bảng, hàng và cột thường là thuật ngữ được chấp nhận để đề cập đến các thực thể này trong cơ sở dữ liệu quan hệ, bao gồm các bài báo và công việc của Codd và Date, và phần lớn các chuyên gia cơ sở dữ liệu thích thuật ngữ này vì nó không rõ ràng hơn.

Thường không có sự mơ hồ khi người ta nói về các hàng và cột - những người khác hiểu bạn đang nói về thiết kế vật lý cơ sở dữ liệu cơ bản và không có bất kỳ loại tạo tác nào khác từ một thiết kế logic trước thiết kế vật lý hoặc bất kỳ thực thể hệ thống mới nổi nào sau này như các trường trên màn.


9

Mặc dù câu hỏi của bạn đã được trả lời rất tốt. Tôi muốn thêm điểm của tôi quá. Có thể bạn thấy nó hữu ích cho đến một số mở rộng. Ngoài ra câu trả lời của tôi không dành riêng cho SQL Server

Những từ này được sử dụng thay thế cho nhau.

 1          2         3              4 
--------------------------------------------------------------------
Row    =  Record  =  Tuple        =  Entity 

Column =  Field   =  Attribute    =  Attribute

table  =  File    =  Relation     =  Entity Types(or Entity Set)
  • 4 thuật ngữ tốt để sử dụng khi chúng ta học mô-đun ER
  • 3 sử dụng khi Mô hình quan hệ
  • 2 cảnh chung, DataBase books start with these terminologybởi vì những thứ này thường được sử dụng bởi mọi người trong cuộc sống thực, cũng như trong hệ thống tệp.

Record là đơn vị cơ bản trong hệ thống lưu trữ có ý nghĩa ngầm. Trong DBMS, việc recordsử dụng từ trong chương mô tả cách các bảng cơ sở dữ liệu lưu trữ trên các khối đĩa. Trong DBMS a record-oriented file-systemlà một hệ thống tệp nơi các tệp được lưu trữ dưới dạng các tập hợp các bản ghi.


9

Ngôn ngữ tiếp tục phát triển. Một vài thập kỷ trước, những người biết chữ đã sử dụng "chỉ số" thay vì "chỉ mục" đơn giản hơn. Khi chúng tôi chuyển sang "chỉ mục", chúng tôi đã loại bỏ một sự phức tạp không cần thiết và làm cho ngôn ngữ trở nên hữu ích hơn. Nhu cầu ghi nhớ số nhiều cho "chỉ mục" là chi phí hoàn toàn - nó không giúp chúng ta giao tiếp theo bất kỳ cách nào. Đừng nhầm lẫn, đã từng có những người phát xít ngữ pháp thích sửa lỗi cho những người chuyển sang "chỉ mục". Tất nhiên, ngữ pháp Đức quốc xã đã mất. Đây là cách dao cạo của Occam loại bỏ các chi tiết vô dụng nếu toàn bộ điều đó có liên quan đủ lâu.

Vì vậy, hãy để chúng tôi làm cho nó dễ dàng - biết sự khác biệt giữa các hàng và hồ sơ hoàn toàn không có gì cho khả năng phát triển và duy trì cơ sở dữ liệu của chúng tôi. Nhiều chuyên gia xuất sắc sử dụng các hàng và hồ sơ thay thế cho nhau, nhưng phát triển các hệ thống tuyệt vời. Do đó, dao cạo của Occam cuối cùng sẽ loại bỏ sự khác biệt và thế hệ tiếp theo sẽ phải học một thực tế ít vô dụng hơn. Nếu, tất nhiên, SQL vẫn có liên quan tại thời điểm đó.


5

Để trích dẫn cuốn sách của CJ Date "Giới thiệu về hệ thống cơ sở dữ liệu" " Các hàng của một bảng như vậy có thể được coi là bản ghi của tệp ... "

Vì vậy, đối với cơ sở dữ liệu, nó là Row.


4

Trả lời ngắn gọn :

  • Một bản ghi là một phần của dữ liệu được lưu trữ (hoặc thu thập).
  • Một hàng là một bản ghi được lưu trữ tuyến tính.
  • Nếu có thể, sử dụng thuật ngữ cụ thể hơn.

Lưu ý: bảng lưu trữ bản ghi tuyến tính và truy vấn trả về kết quả tuyến tính

Hỗ trợ :

Các định nghĩa bổ sung từ khắp nơi trên web:

  • "Hàng" SQL ( 1 , 2 )
  • "Bản ghi" SQL ( 1 , 2 )
  • "Bản ghi" ( 1 , 2 , 3 , 4 )
  • "hàng" ( 1 , xem thêm 2 , 3 , 4 )
  • Hàng so với bản ghi trên StackOverflow ( 1 , 2 )

Đáng chú ý là các định nghĩa SQL thường tuân theo định nghĩa tiếng Anh.

Nếu bạn có một định nghĩa mà bạn nghĩ nên có ở đây, vui lòng thêm nó vào các bình luận.
Tôi đặc biệt quan tâm đến các định nghĩa từ tiêu chuẩn SQL hoặc tài liệu triển khai.

Các trích dẫn đã được đưa lên "Hàng không phải là hồ sơ." Lấy ra khỏi bối cảnh điều này dường như mâu thuẫn với các xác nhận trước đây của tôi (và của nhiều chuyên gia cơ sở dữ liệu). Nhưng, nếu bạn đọc toàn bộ bài đăng ( 1 Tìm kiếm trích dẫn) của Joe Celko (còn gọi là - CELKO--) thì rõ ràng Joe Celko đang cố gắng sửa chữa một quan niệm sai lầm về một cá nhân mà Joe Celko tin rằng phát sinh từ người đó " ... nền tảng trong xử lý dữ liệu với các hệ thống tệp truyền thống ... ". Nói tóm lại, Joe Celko đang nói các hàng SQL không hoạt động giống như các bản ghi trong các hệ thống khác. Joe Celko không yêu cầu quyền / đặc quyền của việc xác định một thuật ngữ, anh ta đang cố gắng làm sáng tỏ một sự hiểu biết sai lầm do áp dụng không đúng các nguyên tắc mô hình lưu trữ này sang mô hình lưu trữ khác.


3
Tôi đánh giá cao công việc và nghĩ rằng bạn đưa vào này. Tôi sẽ lưu ý rằng sự khác biệt của Celko nhằm mục đích rút ra sự khác biệt giữa RDBMS và các hệ thống COBOL tệp phẳng đi trước RDBMS. Ergo, anh ta nhấn mạnh "hàng" là một phần của lược đồ RDBMS và "bản ghi" là một phần cấu thành của một tệp phẳng.
swasheck
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.