【问题标题】:Is there a data type in MySQL that is similar to a dynamic array in C or C++?MySQL 中是否存在类似于 C 或 C++ 中的动态数组的数据类型?
【发布时间】:2021-03-11 16:49:48
【问题描述】:
我想构建一个包含许多常用列的 MySQL 表,例如作为整数的索引、作为 varchar 的名称等。关于这个表的事情是我想包含一个具有未知数量的条目的列.我认为最好的方法(如果可能的话)是使其中一列成为可以更改的数组,就像数据库中的任何条目一样。假设创建记录时它有 0 个条目。然后稍后,我想添加1个或更多。也许再过一段时间,我可能想删除这些条目中的一个或多个。
我知道我可以为这些添加中的每一个创建包含单独列的表,但我可能希望一条记录多达一百个或更多。这似乎非常低效且难以维护。所以底线问题是可以将列定义为动态数组吗?如果是这样,怎么做?如何有选择地添加或删除东西?
我会在黑暗中试一试,猜想可能让一张桌子包含另一张桌子。我从来没有听说过这个,因为我对 MySQL 的体验大多是随意的。我制作数据库和动态网站是因为我想这样做。
【问题讨论】:
标签:
mysql
types
definition
【解决方案1】:
在关系数据库中执行此操作的方法是创建另一个表。该表的一列将具有指向该表的主键的外键,该主键应该具有该数组(或多列,如果主键包含多于一行)。另一列具有在数组中找到的值。如果顺序很重要,第三列将存储一些其他值来指示序数。
类似的东西:
CREATE TABLE elbat_array
(id integer,
elbat integer -- or whatever type the primary key column has
NOT NULL,
value text, -- or whatever type the values should have
ordinality integer
NOT NULL, -- optional
PRIMARY KEY (id),
FOREIGN KEY (elbat)
REFERENCES elbat -- the other table
(id) -- and its primary key column
ON DELETE CASCADE,
UNIQUE (ordinality));
要添加到“数组”,请在该表中插入行。要删除,请删除行。可以有尽可能多的零行(即“数组”元素)或尽可能多的磁盘空间(除非你之前达到了 DBMS 的任何限制,但如果这样的限制适用,它会非常大,所以通常不应该这样做是个问题)。
在这种情况下也值得一读:"Is storing a delimited list in a database column really that bad?" 虽然它不是特别关于数组类型,但在元级别上,它讨论了为什么列中的值应该是原子的。数组和分隔列表一样会违反这一点。