我知道sql无法保存数组(如果我写错了,请纠正我)。
为什么?
我知道这是一个愚蠢的问题,但是
数组只是结构化数据。为什么sql无法保存它?
我可以重写我的mysql数据库或下载sql的Addon以便保存数组吗?
预先感谢
答案 0 :(得分:1)
关系数据库管理系统(RDBMS)(例如MySQL,SQL Server,Oracle和PostgreSQL)通常将数据存储在表中。这是存储相关数据的一种很好的方法。
假设有三个实体:客户,订单和产品,并且订单包含多个产品。因此有四个表:
我们将提供索引(即搜索树)以轻松找到客户的订单或订单中的产品。现在说,我们想知道产品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保存数据