gpt4 book ai didi

sql - SQL 表与结构数组有何不同? (就用法而言,而不是实现)

转载 作者:行者123 更新时间:2023-12-04 20:56:16 26 4
gpt4 key购买 nike

这是一个简单的 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 对象)中的每个条目都包含一个字段,表示那个人的 child (实际的 child ,而不是分层数据结构的 child )。实际上,这些可能是跨表引用(或指向对象的指针),但让我们保持简单并使该字段包含零个或多个名称。在我的 C++ 示例中,我会像这样修改声明:

vector<string> namesOfChildren;

...然后做这样的事情:

persons[0].namesOfChildren.push_back("John");
persons[0].namesOfChildren.push_back("Jane");

但是,据我所知,SQL 的典型用法并不反射(reflect)这种方法。如果我错了,并且有一个简单、直接的解决方案,那就太好了。如果没有,我敢肯定像我这样的 SQL 新手可以从关于如何使用 SQL 表的数据库与裸的通用数据结构对比这一主题的一点思考中获益匪浅。

最佳答案

To me, it seems like the subtleties of how data can and should be structured in SQL is a more obscure topic.

它被称为“数据(基础)建模”,介于工程学科和艺术之间(就像许多计算机编程一样)。如果你真的对这个话题感兴趣,看看ERwin Methods Guide .

Where does the array-of-structs analogy I'm automatically drawing for myself break down?

在持久性、并发性、一致性和可扩展性方面。

  • 持久性:表会自动保存到永久存储中。它会留在那里并在重新启动后仍然存在(并不是说真正的数据库服务器会重新启动很多次)直到您明确删除它或出现灾难性的硬件故障。 DBMS 具有运行良好的备份程序,应该有助于后一种情况。
  • 并发:表旨在被许多客户端同时访问和(需要)修改。锁定和 multi-version concurrency control 等机制被雇用来确保客户不会“踩到对方的脚趾”。
  • 一致性:您可以定义某些约束(例如唯一性、外键或检查),DBMS 将确保它们从不 splinter 的。此外,这通常可以以声明式 的方式完成,从而最大限度地减少出错的机会。最重要的是,您在数据库中所做的一切都是事务性,因此您可以获得原子性、一致性、隔离性和持久性(又名。"ACID")的好处。简而言之,数据库将保护自己免受不良数据的侵害。
  • 可扩展性:使用索引、分区、clustering 等技术,设计良好的数据库模式可以很好地扩展到可用 RAM 的限制之外,并且仍然保持良好的性能。等等...此外,SQL 是声明式的和基于集合的,这意味着 DBMS 可以自由地为手头的数据选择最佳的“查询执行计划”,自动并行化查询,缓存结果以希望它们能在不改变查询含义的情况下被重用等。

关于sql - SQL 表与结构数组有何不同? (就用法而言,而不是实现),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13301463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com