【问题标题】: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?" 虽然它不是特别关于数组类型,但在元级别上,它讨论了为什么列中的值应该是原子的。数组和分隔列表一样会违反这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 2011-08-26
      • 2012-01-03
      • 2019-05-28
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多