为什么定位查询不好?

Jas*_*ker 7 sql tuples relational-algebra database-relations relational-model

我正在阅读CJ Date的SQL和关系理论:如何编写准确的SQL代码,他认为位置查询很糟糕 - 例如,这INSERT:

INSERT INTO t VALUES (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

相反,您应该使用这样的基于属性的查询:

INSERT INTO t (one, two, three) VALUES (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

现在,我理解第一个查询与关系模型不一致,因为元组(行)是无序的属性集(列).我无法理解第一个查询中的伤害位置.谁可以给我解释一下这个?

cha*_*aos 20

每次表架构更改时,第一个查询都会中断.第二个查询适应任何架构更改,使其列保持不变,并且不添加无默认列.

由于同样的原因,进行SELECT *查询然后依靠位置符号来提取他们关心的值的人是软件维护supervillains.


Jon*_*eet 9

虽然列的顺序在模式中定义的,但通常不应该认为它很重要,因为它在概念上并不重要.

此外,这意味着阅读第一个版本的任何人都必须查阅架构,以找出值的含义.诚然,这就像在大多数编程语言中使用位置参数,但不知何故,SQL觉得在这方面略有不同 - 我当然会理解的第二个版本更容易(假设列名是明智的).


Meh*_*ari 5

我并不真正关心这方面的理论概念(在实践中,表确实有一个已定义的列顺序).我更喜欢第二个到第一个的主要原因是增加了一层抽象.您可以修改表中的列而不会搞砸您的查询.