Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 这是在SQL数据库中存储项目列表的好方法吗?_Mysql_Sql Server_Binary Data - Fatal编程技术网

Mysql 这是在SQL数据库中存储项目列表的好方法吗?

Mysql 这是在SQL数据库中存储项目列表的好方法吗?,mysql,sql-server,binary-data,Mysql,Sql Server,Binary Data,这只是一个非常普遍的数据库管理问题。假设我有一个人员列表,我想为该表中的每一行存储第二个列表。这是我的解决办法 一个人可能拥有的物品表 具有这些项目组合的人员表 解释 John has an order of 6, which is 4 + 2, or a Cheeseburger and a Milkshake. Mary has an order of 25, which is 16 + 8 + 1, or a Soda, Hotdog, and Fries 我想知道的是,对于这种类型的列

这只是一个非常普遍的数据库管理问题。假设我有一个人员列表,我想为该表中的每一行存储第二个列表。这是我的解决办法

一个人可能拥有的物品表

具有这些项目组合的人员表

解释

John has an order of 6, which is 4 + 2, or a Cheeseburger and a Milkshake.
Mary has an order of 25, which is 16 + 8 + 1, or a Soda, Hotdog, and Fries

我想知道的是,对于这种类型的列表存储是否已经有了术语,以及与存储多个键相比,这种方式的优点/缺点是什么。我还想知道是否有任何数据库管理系统已经以类似的方式处理列表中的列表,以及我是否不必担心像这样实现我的数据库。

这是一种可怕的做法。你会得到相同的倍数。你将不断地进行翻译,这对性能不利。在进行任何数据库设计之前,请阅读有关规范化的内容。在尝试实际解决方案之前,不要考虑以任何非关系方式使用现实数据库。如果你真的有一种非关系的需要,那就可以;如果不能这样解决问题,那么关系数据库就不是满足您需要的数据存储工具。这不是其中之一。这是一个关系问题,几乎总是应该实时解决


通常,这类问题可以通过一个包含可用项列表的Items表来解决。包含客户详细信息的客户表。包含订单详细信息(如日期时间、客户等)的订单表,以及包含该订单中特定项目列表的订单详细信息表。当然,当您这样做时,您需要设置prefer外键和索引

如何知道6是4+2,而不是2+2+2?此样式仅在列表只能包含每个项目(如chmod权限)中的1或0时有效。一旦订购的人超过1人,你就100%完蛋了。你最好的选择是制作一个订单和订单项目表,将该人员与他们订购的项目联系在一起。但是如果项目是唯一的,则效果很好,对吗?就像约会网站上的兴趣列表一样?这种方法被称为比特屏蔽。你的不是真正的位屏蔽,因为你是对数字求和,所以在@TabAlleman概述的情况下,你可能会得到错误的结果。这是一种有效的技术,在*nix系统中用于存储有关权限的属性—您可以用一个数字表示多个属性及其值—这就是您尝试的方法。现在,虽然它效率高,并且减少了存储需求,但它对存储关系绝对不好。你有一个关系数据库,你有关系。创建另一个存储用户和食物关系的表。是的,我认为真正的位屏蔽就像是使用一个6位数的订单号,其中第一位数是薯条的数量,第二位数是奶昔的数量,等等。除了我不确定如何处理一个超过9个特定项目的订单。如果你在交友网站上储存兴趣,你不必担心有人不止一次拥有相同的兴趣。但是,如果您想根据两个成员的共同兴趣匹配他们,那么这种技术将无法实现。但是,如果我存储的是一个唯一的列表,并且顺序不一定重要,该怎么办?比如,约会网站上的兴趣列表?在大范围内,性能空间折衷真的不值得吗?几乎在任何时候都绝对不值得。不能在一个数字中存储多个关系。最糟糕的是,您无法使用SQL查询该数字,因为您需要先解析其含义。@Maurdekye,数据仍然是关系型的。这些利益属于一个人。数据的顺序并不重要,但能够将它们分开当然很重要。如果您想找到所有感兴趣的人,您必须首先解析整个表,然后找到具有该值的人。啊!!效率不高。对于每个用户,必须重复屏蔽整数的操作。你需要掩盖的这个整数取决于你有多少食物。每次添加食物时,需要在整数上加1位,四舍五入到下一个最大值。对于8种食物,您需要屏蔽1字节的int。很快,如果你有128种食物,你就有128种属性——因此你有128位。这很快就会失控。每次查询关系时都需要解析这个数字。我可以向你保证,这比你想象的要慢得多。只需使用适当的关系设计。您还需要考虑以后如何使用数据。我保证你会想在某个时候做报告,而这种设计让你的速度慢得可笑。停止考虑一次处理一个订单,想想当你需要解码数百万份报告时,这会慢多少。