为什么数组无法在SQL中保存

时间:2018-09-07 14:44:30

标签: mysql sql arrays

我知道sql无法保存数组(如果我写错了,请纠正我)。
为什么?
我知道这是一个愚蠢的问题,但是
数组只是结构化数据。为什么sql无法保存它?

我可以重写我的mysql数据库或下载sql的Addon以便保存数组吗?

预先感谢

2 个答案:

答案 0 :(得分:1)

关系数据库管理系统(RDBMS)(例如MySQL,SQL Server,Oracle和PostgreSQL)通常将数据存储在表中。这是存储相关数据的一种很好的方法。

假设有三个实体:客户,订单和产品,并且订单包含多个产品。因此有四个表:

  • customers(customer_no,name)
  • 产品(产品编号,名称,价格)
  • 订单(order_no,customer_no,日期)
  • order_details(订单号,产品号,金额)

我们将提供索引(即搜索树)以轻松找到客户的订单或订单中的产品。现在说,我们想知道产品123的订单量是多少?

select count(distinct order_no)
from order_details
where product_no = 123;

DBMS将快速找到该产品的order_detail记录,因为查找索引就像在电话簿中按姓氏搜索(二进制搜索)一样。然后,这只是数数。因此,只有很少的记录被读取,整个查询的速度非常快。

现在与数组相同。像这样:

products(product_no, name, price)

customers
(
  customer_no,
  name, 
  array of orders
  (
    order_no, 
    date,
    array of products
    (
      product_no,
      amount
    )
  )
)

好吧,订单详细信息现在隐藏在本身位于客户对象内部的订单元素中。要获得产品123的订单数量,唯一的方法似乎是读取 all 客户记录,遍历 all 订单,看看它们是否包含产品。这可能要花很长时间。此外,在没有用于实体之间关系的外键约束的情况下,数组可能包含甚至不存在的产品编号。

好吧,也许有几种方法可以索引索引数组数据,并且有办法保证它们的数据一致性,但是事实证明,表的关系方法可以很好地解决这些问题。因此,我们将避免使用数组,而是建立与表的关系。这就是建立关系数据库的目的。

(话虽如此,数组可能不时地派上用场,例如,在递归查询中,如果您想记住已经访问了哪些记录,但是这种情况很少见。)

答案 1 :(得分:0)

要回答我自己的问题,我首先要感谢您的评论
谢谢!
回到问题:由于normalization问题,普通的sql无法保存数组,也不想保存。

您可以用另一种方式保存数组:
SQL表就像一个数组。将新表链接为数组。手动创建表,或者如果可以更改数组,则使用Code创建表。在SQL中不需要数组

如果必须这样做,可以使用Nosql或PostgreSql或使用JSON,Oracle和XML保存数据