下面是一个简单的 SQL 表示例:
CREATE TABLE persons
(
id INTEGER,
name VARCHAR(255),
height DOUBLE
);
由于我没有经常使用 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 可以被认为是两个主要部分:数据操作和数据定义。我更关心首先组织我的数据,而不是查询和修改它。在那里,SQL 的区别立即显而易见。对我来说,数据如何以及应该如何在 SQL 中结构化的微妙之处似乎是一个更晦涩的话题。我自动为自己绘制的结构数组类比在哪里崩溃了?
举一个具体的例子,假设我希望我的persons
表中的每个条目(或我的每个Person
对象)都包含一个表示该人孩子姓名的字段(实际的水果孩子,而不是分层数据结构孩子)。实际上,这些可能是跨表引用(或指向对象的指针),但让我们保持简单,让该字段包含零个或多个名称。在我的 C++ 示例中,我会像这样修改声明:
vector<string> namesOfChildren;
...并做这样的事情:
persons[0].namesOfChildren.push_back("John");
persons[0].namesOfChildren.push_back("Jane");
但是,据我所知,SQL 的典型用法并不反映这种方法。如果我错了,并且有一个简单、直接的解决方案,那就太好了。如果不是这样,我敢肯定,像我这样的 SQL 新手可以从对 SQL 表的数据库如何与裸露的通用数据结构进行对比这一主题的一点思考中受益匪浅。