2009-09-22 2 views
6

Недавно я познакомился с новой функцией Access 2007, которая представляет собой многозначные поля. Мое первоначальное впечатление заключается в том, что плохая идея использовать несколько значений в одном поле. Традиционно, если вы хотите, чтобы запись имела несколько значений для поля, вы создали бы еще две таблицы и свяжете их с внешними ключами. Это позволяет легко запрашивать и обеспечивает дублирование значений для одного и того же элемента. Сохранение списков в ячейке кажется нарушением цели баз данных.Многозначные поля - хорошая идея?

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

ответ

3

Идея многозначных полей заключалась в том, чтобы поддерживать легкое создание объектов отчета/интерфейса, кроме того, можно создать форму, отображающую категории вопросов для проблемы. Вместо того, чтобы делать некоторые интенсивной работы, дай Бог соединяет, это было якобы проще хранить:

механическое, электрическое

в качестве значения в поле, а не

Механические Электрические

Personnally I не нравится и предполагает, что этот тип поля был создан для нетехнического персонала, такого как бухгалтеры :) (просто шучу). Нет серьезно, не используйте это, если вы не создаете глупый инструмент, который редко кто-нибудь будет использовать, и редко кто-нибудь когда-либо будет использовать.

Правильный способ справиться с этим - это объединение, отсутствие дубликатов и не много значений внутри столбцов (это все равно 3nf).

Другая причина, по которой это было создано, заключалась в поддержке нескольких значений внутри списка sharepoint.

Jon

+0

+1 для бухгалтеров шутка, хе. – Bratch

3

Большой сегмент рынка доступа не является разработчиком, но является техническим, пользователями. Они могут не понимать значение нормализации, но они могут заставить что-то работать. Им просто нужно что-то простое, и это лучше, чем поле свободного текста, где люди вводят, где вы надеетесь, что все они набирают одно и то же.

Поскольку они узнают больше, они могут начать использовать другие таблицы и внешние ключи. Но, иногда, многозначное поле достаточно хорошо.

+2

Так же, как 640K и 2 цифры для хранения года в;) – RedFilter

1

ПРОСТО СКАЗАТЬ НЕТ!
Если вы изучаете SQL, изучаете правильный путь и нормализуете свои таблицы. если вы знаете, что дизайн базы данных делает это правильно. Не каждая функция должна использоваться.

6

См:

Multivalued datatypes considered harmful: How dangerous can a data type be?

У меня был долгий разговор с Сураджем Poozhiyil, программа Access менеджером ... как Suraj и я согласен от всего сердца, что разработчики не должны использовать многозначные поля. Люди, которые понимают базы данных , уже имеют хороший способ , реализуя многие из многих отношений и не получат никакой пользы из многозначных полей.

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

+1

Тогда почему они их создали? Очевидно, что они используют в реальном мире, есть целая база данных, Unidata и Universe, которые построены вокруг них. – Noah

+0

@Noah: быстрый google говорит мне, что они основаны на PICK, а не на SQL. Насколько я понимаю, PICK имеет синтаксис (операторы и т. Д.), Требуемый для запроса многозначных данных, Access/Jet/ACE - нет. Не совсем мое поле, если честно (я использовал Intersystems Caché, но только через его SQL-шлюз - это отлично, а не материал MUMPS). Я счастлив с 5NF :) – onedaywhen

4

Не совсем ответа на вопрос здесь, но читатели хотели бы отметить, что существует целая ниша индустрии вокруг идеи MultValued Databases:

Эти базы данных отличаются от реляционной базы данных в том, что они имеют функции, которые поддерживают и поощряют использование атрибутов, имеющих список значений, а не все атрибуты , имеющие одно значение

Поскольку в этом случае механизм базы данных имеет расширения для языка запросов, чтобы учитывать многомерный характер его таблиц (который, как я предполагаю, Access, вероятно, не делает), то он не очень сопоставим с многозначными полями в Access. Но интересная параллель в любом случае (для тех, кто еще не слышал о базах данных MultValued).

0

Мне действительно не нравятся многозначные поля. Возможно, они сделали это, чтобы упростить взаимодействие с другими многозначными системами, такими как старая система PICK/Unidata. Готов поспорить, это забавно увеличить базу данных Access с использованием этой новой функции для SQL Server.

+0

Его единственная причина быть в ACE - совместимость с Sharepoint. Фактически данные доступны через наборы записей, и было бы довольно легко написать VBA, чтобы записать его в реальные таблицы N: N. Разумеется, вполне возможно, что SSMA для Access 4.2 понимает поля MV и оптимизирует их. Если вам интересно, я могу дать ему удар и узнать, поскольку у меня есть как A2007, так и SSMA 4.2. –

+0

@ David-W-Fenton: «Его единственная причина быть в ACE - совместимость с Sharepoint» - ... тем не менее команда Access продвигает ее общее использование в Access, например. это не упоминает SharePoint один раз: http://office.microsoft.com/en-us/access-help/use-a-list-that-stores-multiple-values-HA010031117.aspx – onedaywhen

+1

Маркетинговые материалы очень часто не показать всю правду. –

2

Многозначные поля могут легко избавить вас от необходимости создавать новую таблицу и отношения.

Сода -> Типы

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

Я желаю, чтобы они позволяют дать многозначные поля столбцов, то они были бы так же, как за стол, но с гораздо меньшим количеством работы