MySQL多维数组

MySQL多维数组,mysql,multidimensional-array,Mysql,Multidimensional Array,使用MySQL存储动态数据的最佳方式是什么?假设我有一个表,其中一项是“动态的”。对于某些条目,我需要存储一个值,但对于其他条目,它可能是一百个值。例如,假设我有以下简单的表格: CREATE TABLE manager ( name char(50), worker_1_name(50), worker_2_name(50), ... worker_N_name(50) ); 显然,这不是建立数据库的理想方式。因为我必须容纳经理可能拥有的最大团队,所以我在数据库中浪费了大量空间。我更希望有

使用MySQL存储动态数据的最佳方式是什么?假设我有一个表,其中一项是“动态的”。对于某些条目,我需要存储一个值,但对于其他条目,它可能是一百个值。例如,假设我有以下简单的表格:

CREATE TABLE manager
( 
name char(50),
worker_1_name(50),
worker_2_name(50),
...
worker_N_name(50)
);
显然,这不是建立数据库的理想方式。因为我必须容纳经理可能拥有的最大团队,所以我在数据库中浪费了大量空间。我更希望有一个表,我可以作为另一个表的成员(就像我在C++中通过继承来做的那样),可以被“管理器”表用来处理可变数量的雇员。它可能看起来像这样

CREATE TABLE manager
( 
name char(50),
underlings WORKERS 
);

CREATE TABLE WORKERS 
( 
name char(50),
);

我希望能够为每个经理增加不同数量的员工。这是可能的,还是我必须列举所有可能的员工数量,即使我很少使用完整的补充?

一般来说,您应该执行以下操作:

CREATE TABLE managers ( 
    manager_id int,
    name       char(50)
);

CREATE TABLE workers (
    name       char(50),
    manager_id int
);
manager(id, name)
managerWorkerMapping(managerId, workerId)
worker(id, name)

这就是在中表示“可变数量的工作人员”的方式。

您可以使用ID列将工作人员作为同一表中的记录进行跟踪

CREATE TABLE manager
(
name char(50),
id int
);

CREATE TABLE WORKERS
(
managerID int,
name char(50)
);

允许在worker中使用重复的managerID…当您希望将特定的worker分配给某个管理器时,只需从workers中选择名称,其中managerID=ID,它将返回该管理器的所有worker。如果需要更复杂的查找,也可以使用联接。

可以为manager分配自动增量id,并使用外键将workers链接到该id:

manager
   id
   name

worker
   id
   manager_id
   name

您可以创建一个中间映射表。如下所示:

CREATE TABLE managers ( 
    manager_id int,
    name       char(50)
);

CREATE TABLE workers (
    name       char(50),
    manager_id int
);
manager(id, name)
managerWorkerMapping(managerId, workerId)
worker(id, name)
现在,要获取特定经理的所有工作人员,可以运行以下查询:

select w.name from worker w, manager m, managerWorkerMapping mwm
where m.name = 'manager name' and
      m.id = mwm.managerid and
      mwm.workerId = w.id

需要注意的是,使用此模式,工人也可以有多个经理。

这是特别的。关系模型链接中提到了它,但找到它的页面相当大。你能提供一些解释吗?你所做的是根本不同的,为什么它是OP?@悬崖的解决方案——而查询语句是有帮助的,考虑将它添加到现有的答案中。它本身并没有回答OP提出的问题。确切的复制品。
select w.name from worker w, manager m, managerWorkerMapping mwm
where m.name = 'manager name' and
      m.id = mwm.managerid and
      w.id = mwm.workerId