альтернатива объединения в одну таблицу БД - PullRequest
0 голосов
/ 18 марта 2012

У меня есть ситуация, когда выполняется объединение двух таблиц. Структура записи выглядит следующим образом:

<person>
 <name>person name1</name>
 <dept>dept1</dept>
 <dept>dept2</dept>
 <dept>dept3</dept>
</person>

<person>
 <name>person name2</name>
 <dept>dept4</dept>
 <dept>dept5</dept>
</person>

Здесь вы можете видеть, что человек может принадлежать более чем к одному отделу, поэтому таблица с именем person вместе с таблицей с именем dept решит задачу.

Есть ли способ управления одними и теми же данными в одной таблице?

Мне нужен способ иметь таблицу базы данных, в которой я могу иметь переменное число столбцов для хранения значений dept.

Есть ли способ с помощью RDBMS добиться этого? Буду признателен за любые нестандартные идеи.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 18 марта 2012

Вы сказали:

Здесь вы можете видеть, что человек может принадлежать более чем к одному отделу, поэтому таблица с именем person вместе с таблицей с именем dept решит задачу.

Дважды подумайте над этим комментарием. Если отношения между человеком и отделом owns или visits, то это не отношения один ко многим, а отношения многие ко многим, поскольку человек может владеть или посещать более одного отдела, и отдел может быть принадлежит или посещается более чем одним человеком. Для вашего примера это будет выглядеть так (см. dept3):

<person>
 <name>person name1</name>
 <dept>dept1</dept>
 <dept>dept2</dept>
 <dept>dept3</dept>
</person>

<person>
 <name>person name2</name>
 <dept>dept3</dept>
 <dept>dept4</dept>
 <dept>dept5</dept>
</person>

Но это, конечно, будет зависеть от требований, которые вы не упомянули.

Есть ли способ управления одними и теми же данными в одной таблице?

Я могу думать только о трех способах сделать это (один ужаснее другого):

  • Добавление столбцов до необходимого максимума (при условии, что вы знаете, что на одного человека будет не более X отделов)
  • Оставьте только два столбца, один для человека, а другой для отделов и используйте его как многозначное поле (юк!). EG: Используйте какой-нибудь символ-разделитель, чтобы определить, когда отдел заканчивает и запускает другой
  • Модель Entity-attribute-value: это много раз обсуждалось в StackOverflow. Здесь - пример того, как с ним работать

Мне нужен способ иметь таблицу базы данных, в которой я могу иметь переменное число столбцов для хранения значений dept.

То, что является переменной в любой СУБД, на самом деле не столбцы, а строки, поэтому всегда будет сложно справиться с этим.

Есть ли способ с RDBMS добиться этого?

Подойдет любой из главных.

Мое мнение? Используйте больше таблиц! Это решение принесет вам комплименты и массу хлопот!

0 голосов
/ 18 марта 2012
create table mytable(
    record_id int(11) not null auto_increment,
    ss_num   int(9) not null,
    firstname varchar(20) not null,
    lastname  varchar(20) not null,
    middlename varchar(20),
    deptid     int(11),
    deptname   varchar(5),
    primary key(record_id)
)

Возможно, вам не нужны все представленные поля.Так что редактируйте как вам нужно.

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