SQL テーブルの簡単な例を次に示します。
CREATE TABLE persons
(
id INTEGER,
name VARCHAR(255),
height DOUBLE
);
私は SQL をあまり使用したことがないので、SQL の用語で考える方法をまだ学んでいません。事実上、私の脳は上記を次のように翻訳します。
struct Person
{
int id;
string name;
double height;
Person(int id_, const char* name_, double height_)
:id(id_),name(name_),height(height_)
{}
};
Person persons[64];
次に、いくつかの要素を SQL に挿入します。
INSERT INTO persons (id, name, height) VALUES (1234, 'Frank', 5.125);
INSERT INTO persons (id, name, height) VALUES (5678, 'Jesse', 6.333);
...そして私はそれをどのように考えていますか:
persons[0] = Person(1234, "Frank", 5.125);
persons[1] = Person(5678, "Jesse", 6.333);
SQL は、データ操作とデータ定義という 2 つの主要部分と見なすことができると読んだことがあります。データのクエリや変更よりも、データの整理に関心があります。そこでは、SQL の違いがすぐにわかります。私には、SQL でデータを構造化する方法と構造化する方法の微妙な点は、よりあいまいなトピックのように思えます。私が自分自身のために自動的に描いている構造体の配列のアナロジーはどこで壊れますか?
具体的な例を挙げると、persons
テーブル (または各Person
オブジェクト) の各エントリに、その人の子供 (階層データ構造の子供ではなく、実際の子供) の名前を示すフィールドを含めるとします。 )。実際には、これらはテーブル間の参照 (またはオブジェクトへのポインター) である可能性がありますが、単純にして、このフィールドに 0 個以上の名前が含まれるようにしましょう。私の C++ の例では、次のように宣言を変更します。
vector<string> namesOfChildren;
...そして、次のようにします:
persons[0].namesOfChildren.push_back("John");
persons[0].namesOfChildren.push_back("Jane");
しかし、私が知る限り、SQL の一般的な使用法はこのアプローチを反映していません。私が間違っていて、シンプルで簡単な解決策があれば、素晴らしいです。そうでない場合は、私のような SQL の初心者は、SQL テーブルのデータベースが、生の一般的なデータ構造とは対照的にどのように使用されることを意図しているかという主題について、少し考えることで大きな恩恵を受けることができると確信しています。