2013-04-21 3 views
0

Каков наилучший способ проектирования табличных схем для записей, которые могут иметь несколько значений для определенного поля?SQL-записи с несколькими значениями для поля

Например, документ может иметь несколько связанных с ним понятий. У каждого документа может быть и другое количество понятий. Я пытаюсь создать таблицу, в которой каждая запись является документом вместе с его метаданными, но у меня возникают проблемы с полем понятий. Должен ли я вкладывать все концепции в одно поле под названием «Концепции»? Или создайте разные поля для Concept 1, Concept 2 и т. Д. Проблема в том, что я не знаю, сколько концепций может иметь каждый документ. Я пытаюсь создать это с помощью реляционных баз данных SQL, хотя я знаю, что существуют объектно-ориентированные базы данных, которые, вероятно, лучше подходят для моей проблемы.

ответ

2

Должен ли я использовать все концепции в одном поле под названием «Концепции»?

Нет. Это нарушит принцип atomicity и, следовательно, 1NF, и вызовет проблемы в обеспечении целостности и запросов.

Или создавать различные поля для концепции 1 Concept 2, и т.д.

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

Каков наилучший способ проектирования схем таблиц для записей, которые могут иметь несколько значений для определенного поля?

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

  • Если нет, то это один-ко-многим, которые могут быть представлены подобным образом:

    enter image description here

  • Если да, то это отношения «многие-ко-многим», для чего требуется дополнительная таблица «соединения» (ака. «ссылка»), аналогичная этому:

    enter image description here

+0

Yay, спасибо за картинки. – rottentomato56

1

Это зависит от того, что здесь представляет собой понятие. Означает ли это что-нибудь? С ним что-то связано?
Если значение полей имеет смысл само по себе, я бы придерживался одного поля и значения «enumeration» для него.
В случае, если могут быть дополнительные атрибуты, специфичные для каждой «концепции», вам лучше подумать о наличии таблицы с «понятиями» и отношениями «многие-ко-многим» между этими двумя. Надеюсь, это вам поможет.

1

Если понятия важны, тогда вы должны иметь таблицу concepts. Это будет справочная таблица, в которой будет conceptId и информация о концепции.

Затем вы можете получить таблицу под названием DocumentConcepts. Это будет иметь такие поля, как:

  • DocumentConceptId (уникальный идентификатор для этой таблицы)
  • DecumentId
  • ConceptId

Это может иметь другую информацию, а также, например, в качестве приоритета (который является первым?, который является вторым?), когда концепция была добавлена ​​в документ и другая такая информация.

+0

Спасибо! Кстати, у меня действительно есть твоя книга, я думал, что узнал твое имя откуда-то .... – rottentomato56

Смежные вопросы