SQL Serverの「レコード」と「行」の違いは何ですか?


56

SQL Serverに日付と時刻を追加することに関して、かなり魅力的な質問があり、かなり魅力的な分類上の議論が始まりました

それでは、これらの関連用語をどのように区別し、それらを適切に使用するのでしょうか?

記録


32
1つは工芸品を推進し、もう1つは汚いヒップスターが音楽を演奏するために使用
1

1
SO に関する関連記事は、これが重要な問題であることを明確に示しています。
dezso

PostgresとOracleでは、1つの行に複数のレコードを含めることができることに注意してください
...-a_horse_with_no_name

回答:


69

ジョー・セルコの言葉を引用すると(このリファレンスはWeb全体と彼のWikipediaエントリで見つけることができるだけでなく、いくつかの会議のTシャツでも見ることができます):

行はレコードではありません。

多くの人々は彼を謙虚で口頭で初心者を虐待することを好む退屈なジャークだと指摘し、私はそれが彼が出会う方法であることを認めます。しかし、私は彼と直接会いました-彼と食事を共有することさえしました-そして、私は彼の現実のペルソナが彼のオンラインの前とどれほど違うかあなたに話すことができません。私は彼が行レコードを呼び出すのを一度捕まえましたが、彼は非常に恥ずかしかったです(ここで完全な裏話)。

2006年にテキサス州グレープバインで開催されたPASS会議で実際にこのシャツを着ました

いずれにせよ、男のオンラインキャラクターについてあなたが何をするかを言ってください、しかし彼は標準書きました、そして、そのような権威が区別があることを指示するという事実はあなたに何かを伝えるべきです。そして、誰かが行をレコードと呼ぶとき、彼がしつこく言うのと同じくらい、私の同僚の多くもそうします-彼らはSQL Serverの世界の専門家でもあります。そして、そのキャンプの私たちの人々は彼が正しいと信じています。

たとえば、SQL Serverの第一人者であるItzik Ben-Ganです。トレーニングキットの最初のレッスン(試験70-461)からの引用:Microsoft SQL Server 2012のクエリ

T-SQLの誤った用語の例として、人々はしばしば「フィールド」と「レコード」という用語を使用して、T-SQLがそれぞれ「列」と「行」と呼ぶものを指します。フィールドとレコードは物理的です。フィールドは、クライアントアプリケーションのユーザーインターフェイスにあるものであり、レコードは、ファイルとカーソルにあるものです。テーブルは論理的であり、論理的な行と列があります。

そして、Itzikを知っていて、あなたが彼に電子メールを送るか、会議で彼を追い詰めると、彼はあなたに同じことを喜んで伝えます。行をレコードと呼ぶ場合、彼の意見では、用語を正しく使用していません。

今、あらゆる種類の人々でいっぱいの業界であるため、2つを非常に微妙に区別しているように見える素材(別の回答で投稿された技術ターゲット記事など)を見つける可能性が高く、業界では多くの人々が見つかりますそれらを同じと考えてください(Microsoftの何人かの人々、およびBrent Ozarのような他の人々を知っています。彼は常にレコードと呼んでいます)。それは彼らを正しくしません、それはそれを見るだけの方法です-彼らは論理的および物理的に同じように見ます(少なくともこの文脈では)セマンティクス。

ベンダーは「それらを{records | rows}」と呼ぶことはないので、論理的対物理的を得られない、または異なる方法で教えられた誰かが常に存在するため、この議論に永遠に対処します。 Accessやプログラミングのバックグラウンドなどから来ました。tomay-toと言う人やtomah-toと言う人がいるように、「同じ」から「完全に異なる」までさまざまな人々が常に存在します。 "-とその間の多くの色合い。繰り返しますが、だれもこれに対する究極の権威になれないので、それはそれらのどれも正しくしません。しかし、SQL Serverの分野では、間違いなく過半数があります。


つまり、表にあるデータについて話しているとき、それを行と呼びます。挿入を実行しているときは、テーブルに行を挿入しています。更新を実行すると、テーブル内の行が更新されます。また、SELECTを実行すると、テーブルから行を取得します。

アプリケーションがそれを保持したら、気軽にレコードと呼んでください。ただし、「レコードを挿入しました」と言っても怒ってはいけません。誰かがあなたを修正します。


33

マイクロソフトは、組織内の複数の場所に、テーブルエントリごとの表形式データストレージの公式名(独自の目的に役立つ分類学的定義を作成するため)を "ROW"と呼びます。私は証拠として提出しROW_NUMBERROWCOUNTROWVERSIONおよびDataTable.Rowsプロパティ、DataTableTSQL「テーブル」オブジェクトのC#の表現です。この場合、MSDNプロパティは全体としてrow、テーブル内の1つのエントリであるデータのコレクションを参照する使用を推奨します。(私はこれを定義するために「レコード」または「行」の使用を避けようとしていることに注意してください、それが問題のポイントです)

ただし、アプリケーションはユーザーの「レコード」を処理するということです。単一のストレージ行で直接表されないかもしれないレコードについてユニークなことは、レコードがサブレコードを持つことができるという事実です。確かに、テーブルには多対1のテーブルを関連付けることができますが、それらは連続して格納されるのではなく、論理的に関連付けられて格納されます。

したがって、行はテーブル内の物であり、レコードは開発者が実際に使用する際に使用するものです。


8
ROWは論理エンティティであり、RECORDは物理エンティティであると主張できます。ROWには複数のレコードが含まれる場合があります。1つはクラスター化インデックスに、複数のレコードはNCインデックスにあります。ページに収まらない行は、ページ内のレコードとSLOBストレージ内のオーバーフローレコードに分割できます。行のフィールドのBLOB値は、BLOBストレージ内の複数のTEXTレコードにまたがることができます。ヒープ内の行は、スタブレコードとフォワードレコードで構成できます。などなど
レムスルサヌ

そうすれば、アプリドメインから単語レコードの使用を完全に削除するか、水域を完全に泥だらけにして、定義可能な用語から理論データベースの設計と実装の詳細の領域に連れて行ってしまうでしょう。あなたは良い点を挙げますが、読者の80%が快適になるアプリ対データベースの慣習から、私の答えは今でも変わりません。
jcolebrand

4
私はあなたの答えと矛盾していません、たぶん私は間違って言葉を鍛えました。物理アクセスレイヤーが「レコード」と呼ぶ場合と、「行」を処理するクエリ処理(言語)レイヤーと呼ぶ場合、SQLエンジン自体によって物がどのように見えるかだけを示しました。
レムスルサヌ

そうですか。私はまだそれが水を汚しているように感じます。犯罪はありません、私はあなたを保証します。
jcolebrand

31

私は、「情報技術—データベース言語— SQLパート2:基礎(SQL / Foundation)」というドキュメントを検索しました。これは、すべての主要なRDBMSによって実装されるSQLのANSI標準を定義しています。

この単語rowは、予想通り、主にドキュメント全体で数百回使用されています。

この単語recordは、Oracle PL / SQLで使用されるレコード(特にADAレコードのデータ型を説明する)に類似したレコードを説明するためにのみ使用されました。文書内の6つの言及。

これはこの質問を解決し、両側のさまざまな議論に答えると思います。


追加情報

wiscorp.com(SQL Standardsページには、他のいくつかの古いバージョンとリビジョンがあります)にある(無料で入手可能な最新のドラフトバージョン)SQL標準のコピーから。

日付が2011-12-217IWD2-02-Foundation-2011-12.pdfを検索すると、文書内の単語が2277回表示され、単語レコードが動詞「record」として表示されるのは21回だけであることがわかります。または、最後の付録、SQLデータ型およびホスト言語型(Ada、Pascal)のデータ型対応の仕様。

さらに、同じドキュメントの57ページにあります(強調鉱山):

4.15.1テーブルの概要

この副次句は、ISO / IEC 9075-9の副次句4.10.1「Introduction to tables」によって変更されます。

テーブルは、各行が1つ以上の列値のシーケンスであるゼロ以上の行のコレクションです。の最も具体的なタイプは行タイプです。特定のテーブルのすべての行には、そのテーブルの行タイプと呼ばれる同じ行タイプがあります。テーブルのすべてののi番目のフィールドの値は、テーブルのその行の i番目の列の値です。行は、テーブルに挿入したりテーブルから削除したりできるデータの最小単位です。

テーブルの次数、および各行の次数は、そのテーブルの列の数です。テーブル内の数はそのカーディナリティです。カーディナリティが0(ゼロ)のテーブルは空であると言われます。

表は、のいずれかである、ベーステーブル派生テーブル、または一過テーブル


したがって、SQLを使用するDBMSに関する限り:

行はレコードはなく、フィールドは列ではなく、テーブルはファイルではありません!


14

リレーショナルデータベースはほとんど単独で使用されないため、システムの他の部分間の混乱を避けるために、テーブルと行と列を常に参照します。クライアントアプリケーションでは、通常、データリーダー、データセット、データ行、データテーブルなどを含む他の構成要素があります。たとえば、「フィールド」は画面上のデータ入力によく使用され、PascalにはCの構造体に似たRecordデータ型があります。

システム設計では、「レコード」という概念は、単一の行よりも広いものを意味するために使用される場合があります。それは行かもしれないし、歴史だ。削除された行について話すときと同じように、単に列で削除済みとしてマークされた行、または削除されたテーブルに「移動」された行を意味する場合があります。ピン留め)。「レコード」という用語の使用法はさらに多様です。

テーブル、行、および列は、Codd and Dateによる論文や研究など、リレーショナルデータベースでこれらのエンティティを参照するために一般に受け入れられている用語であり、データベースの専門家の大多数は、この用語がより明確であることを好んでいます。

行と列について話すとき、通常、あいまいさはありません-他の人々は、あなたが基礎となるデータベースの物理設計について話していることを理解し、物理設計前の論理設計からの他の種類のアーティファクト、または画面。


9

あなたの質問はすでに非常によく答えられていますが。私も自分のポイントを追加したいと思います。ある程度まで役立つかもしれません。また、私の答えはSQL Serverに固有のものではありません

これらの単語は同じ意味で使用されます。

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

Column =  Field   =  Attribute    =  Attribute

table  =  File    =  Relation     =  Entity Types(or Entity Set)
  • ERモジュールを学習するときに使用する4つの用語
  • 3リレーショナルモデルの使用
  • 2一般的なシーン。DataBase books start with these terminologyこれは、ファイルシステムでも実生活の人々によってよく使用されるためです。

レコードは、暗黙的な意味を持つストレージシステムの基本単位です。DBMSではrecord、章の「使用」という言葉は、データベーステーブルがディスクブロックに格納される方法を説明しています。DBMSでは、a record-oriented file-systemはファイルがレコードのコレクションとして保存されるファイルシステムです。


9

言語は進化し続けています。数十年前、文芸人はより単純な「インデックス」の代わりに「インデックス」を使用していました。「インデックス」に切り替えたため、不要な複雑さを排除し、言語をより便利にしました。「インデックス」の複数形を記憶する必要性は純粋なオーバーヘッドでした-それは私たちのコミュニケーションを助けませんでした。間違いなく、「インデックス」に切り替えた人を修正するのを楽しんでいた文法ナチスがありました。もちろん、文法のナチスは失いました。これが、Occamのカミソリが、全体の関連性が十分に長く維持される場合に、無駄な詳細を排除する方法です。

簡単に考えてみましょう。行とレコードの違いを知っていても、データベースを開発および保守する能力にはまったく何も追加されません。多くの優秀な専門家は行とレコードを同じ意味で使用していますが、素晴らしいシステムを開発しています。そのため、Occamのカミソリは最終的に区別を排除する必要があり、次世代は1つの無駄な事実を学ぶ必要があります。もちろん、その時点でまだSQLが関連している場合。


5

CJ Dateの本「データベースシステムの概要」を引用すると、「このようなテーブルの行は、ファイルのレコードと考えることができます...

したがって、データベースの場合、行です。


4

短い答え

  • レコードは、保存された(または収集された)データです。
  • 行は、線形に保存されるレコードです。
  • 可能な限り、より具体的な用語を使用してください。

注:テーブルはレコードを線形に保存し、クエリは結果を線形に返します

サポート

Web全体からの追加の定義:

  • SQL "行"(12
  • SQL "記録"(12
  • "レコード"(1234
  • "行"(1も参照234
  • StackOverflowの上のレコード対の行(12

SQL定義が一般的に英語の定義に従うことは注目に値します。

ここにあるべきだと思う定義がある場合は、コメントに追加してください。
私は特にSQL標準の定義または実装のドキュメントに興味があります。

「行はレコードではありません。」という引用が提起されました。文脈からすると、これは私の以前の主張(および多くのデータベース専門家の主張)と矛盾するように思われます。しかし、Joe Celko(別名--CELKO--)の投稿全体(1引用を検索)を読むと、Joe Celkoがその人の「 ...従来のファイルシステムでのデータ処理の背景... "。要するに、Joe Celkoは、SQL行は他のシステムのレコードと同じようには機能しないと言っています。ジョー・セルコは用語を定義する権利/特権を主張しておらず、あるストレージ・モデルを別のストレージ・モデルに誤って適用することによってもたらされる誤解を解消しようとしています。


3
私は仕事に感謝し、これにあなたが入れたと思った。Celkoの差別化は、RDBMSと、RDBMSより前のフラットファイルCOBOLシステムとの違いを明らかにすることを目的としていることに注意してください。エルゴは、RDBMSスキーマの一部として「行」を強調し、フラットファイルの構成部分として「レコード」を強調しています。
swasheck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.