Вы сказали:
Здесь вы можете видеть, что человек может принадлежать более чем к одному отделу, поэтому таблица с именем 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 добиться этого?
Подойдет любой из главных.
Мое мнение? Используйте больше таблиц! Это решение принесет вам комплименты и массу хлопот!