Многомерные массивы MySQL - PullRequest
       12

Многомерные массивы MySQL

3 голосов
/ 12 марта 2010

Каков наилучший способ хранения данных, которые являются динамическими по своей природе, используя MySQL? Допустим, у меня есть таблица, в которой один элемент является «динамическим». Для некоторых записей мне нужно хранить одно значение, но для других это может быть сто значений. Например, допустим, у меня есть следующая простая таблица:

CREATE TABLE manager
( 
name char(50),
worker_1_name(50),
worker_2_name(50),
...
worker_N_name(50)
);

Очевидно, что это не идеальный способ создания базы данных. Поскольку я должен разместить самую большую группу, которую может иметь менеджер, я трачу много места в базе данных. Я предпочел бы иметь таблицу, которую я мог бы использовать в качестве члена другой таблицы (как я это сделал бы в C ++ посредством наследования), которая может использоваться таблицей «manager» для обработки переменного числа сотрудников. Это может выглядеть примерно так.

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

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

Я хотел бы иметь возможность добавлять переменное число работников для каждого менеджера. Возможно ли это, или я вынужден перечислить все возможное количество сотрудников, хотя я буду использовать полный комплект только изредка?

Ответы [ 5 ]

1 голос
/ 12 марта 2010

В общем, вы должны делать что-то вроде следующего:

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

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

Вот как вы должны представлять «переменное число работников» в модели отношений .

0 голосов
/ 21 февраля 2011
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
0 голосов
/ 12 марта 2010

Вы можете создать промежуточную таблицу сопоставления. Примерно так:

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

Важно отметить, что с помощью этой схемы работники могут иметь несколько менеджеров.

0 голосов
/ 12 марта 2010

Вы можете назначить автоинкрементный идентификатор менеджеру и связать с ним рабочих с помощью внешнего ключа:

manager
   id
   name

worker
   id
   manager_id
   name
0 голосов
/ 12 марта 2010

Вы можете использовать столбец ID, чтобы отслеживать работников в виде записей в той же таблице.

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

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

Разрешить повторяющиеся идентификаторы managerID в работнике ... если вы хотите, чтобы менеджеры выбирали конкретных работников, просто ВЫБЕРИТЕ Имя ОТ РАБОТНИКОВ, где managerID = ID, и он вернет всех работников для этого менеджера. Если вам нужны более сложные поиски, вы также можете использовать Joins.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...