如何在MySQL中存储数组(list)?
解决⽅法:
gcc编译器是哪个公司的
我在MySQL中有两个表。表Person具有以下列:
id | name | fruits
⽔果列可以包含空或像(‘apple’,’orange’,’banana’)或(‘strawberry’)等的字符串数组。第⼆个表是Table Fruit,有以下三列:
____________________________mysql怎么读英语
fruit_name | color  | price
____________________________
apple      | red    | 2
____________________________
orange    | orange | 3
____________________________
...,...
那么我应该如何设计第⼀个表中的fruits列,以便它可以容纳从第⼆个表中的fruit_name列获取值的字符串数组?由于MySQL中没有数组数据类型,我该怎么办呢?
最佳答案
滚动条和进度条共有的是正确的⽅法是使⽤多个表,并在查询中加⼊它们。
例如:
CREATE TABLE person (
`id` INT NOT NULL PRIMARY KEY,
`name` VARCHAR(50)
);
mvc的介绍CREATE TABLE fruits (
`fruit_name` VARCHAR(20) NOT NULL PRIMARY KEY,
`color` VARCHAR(20),
`price` INT
);
CREATE TABLE person_fruit (
`person_id` INT NOT NULL,
`fruit_name` VARCHAR(20) NOT NULL,
PRIMARY KEY(`person_id`, `fruit_name`)
);php视频教程手机
person_fruit表包含⼀个⼈与其相关联的每个⽔果的⼀⾏,并且有效地将⼈和⽔果表链接在⼀起。
1 | "banana"
1 | "apple"
1 | "orange"
2 | "straberry"
2 | "banana"
2 | "apple"
当你想检索⼀个⼈和他们的⽔果,你可以做这样的事情:
SELECT p.*, f.*
FROM person p
INNER JOIN person_fruit pf
ON p.id = pf.person_id
INNER JOIN fruits f
ON pf.fruit_name = f.fruit_name
sqlite expert professional使用方法说明⼀:
SQL中没有数组的原因是因为⼤多数⼈并不真正需要它。关系数据库(SQL就是这样)使⽤关系⼯作,并且⼤多数情况下,最好是为每
个“信息位”分配⼀⾏表。例如,你可能认为“我想要⼀个东西列表”,⽽是创建⼀个新表,将⼀个表中的⾏与另⼀个表中的⾏相关联。
[1] 这样,您可以表⽰M:N关系。另⼀个优点是这些链接不会使包含链接项的⾏混乱。数据库可以索引这些⾏。数组通常不会编⼊索引。
如果您不需要关系数据库,则可以使⽤例如键值存储。
请阅读有关。黄⾦法则是“[每个]⾮关键[属性]必须提供关于密钥,整个密钥以及密钥的事实。” 数组做得太多了。它有多个事实,它存储订单(与关系本⾝⽆关)。性能很差(见上⽂)。
想象⼀下,你有⼀张⼈桌,你有⼀张桌⼦,可以让⼈打电话。现在你可以让每个⼈都有他的电话列表。但每个⼈与许多其他事物有许多其他关系。这是否意味着我的⼈员表应该包含他连接的每⼀件事物的数组?不,这不是这个⼈本⾝的属性。
[1]:如果链接表只有两列(每个表的主键),这没关系!如果关系本⾝具有其他属性,则应在此表中将其表⽰为列。
说明⼆:
MySQL 5.7现在提供。这种新的数据类型提供了⼀种存储复杂数据的便捷新⽅法:列表,字典等。
也就是说,rrays不能很好地映射数据库,这就是对象关系映射可能⾮常复杂的原因。历史上,⼈们通过创建描述它们的表并将每个值添加为⾃⼰的记录来在MySQL中存储列表/数组。该表可能只有2或3列,或者可能包含更多列。如何存储此类数据实际上取决于数据的特征。
例如,列表是否包含静态或动态条⽬数?该列表是否会保持较⼩,或者预计会增长到数百万条记录?这张桌⼦上会有很多读物吗?很多写作?很多更新?在决定如何存储数据集合时,这些都是需要考虑的因素。
此外,密钥:价值数据存储/⽂件存储,如Cassandra,MongoDB,Redis等也提供了⼀个很好的解决⽅案。请注意数据实际存储的位置(如果存储在磁盘或内存中)。并⾮所有数据都需要位于同⼀数据库中。某些数据⽆法很好地映射到关系数据库,您可能有理由将其存储在其他位置,或者您可能希望使⽤内存中的键:值数据库作为存储在磁盘某处或作为临时存储的数据的热缓存像会话这样的东西。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。