XMLSerialized объект в поле базы данных.Это хороший дизайн? - PullRequest
2 голосов
/ 08 января 2012

Предположим, у меня есть одна таблица, которая содержит блоги. Схема выглядит так:

ID (int)| Title (varchar 50) | Value (longtext) | Images (longtext)| ....

В поле Изображения я храню сериализованный список XML изображений, связанных с блогом.

Должен ли я использовать другую таблицу для этой цели?

Ответы [ 5 ]

2 голосов
/ 08 января 2012

Ну, это немного "внутренняя платформа", но это будет работать.Отдельная таблица позволит лучше запрашивать изображения, хотя на некоторых платформах СУБД это также может быть достигнуто с помощью столбца типа XML и SQL / XML.

Если эти данные должны быть только непрозрачными, то возможно.Тем не менее, имейте в виду, что вам, как правило, придется возвращать весь XML-файл на уровень приложения, чтобы делать с ним что-нибудь интересное (или: в зависимости от платформы используйте SQL / XML, но я советую против этого, поскольку БД не 't место для такой обработки в большинстве случаев).

Мой совет во всех остальных случаях: отдельная таблица.

2 голосов
/ 08 января 2012

Я бы наверняка использовал другую таблицу. Если вы используете XML, что произойдет, когда вам нужно просмотреть и обновить ссылки на все изображения? (Вы бы предпочли сделать Update blog_images Set ... или проанализировать XML для каждой строки, выполнить обновление, а затем заново сгенерировать обновленный XML для каждой?

2 голосов
/ 08 января 2012

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

Как и во всех правилах, существуют исключения, в которых имеет смысл поместить XML с несколькими значениями в одно поле в базе данных.,Первое правило таково:

Данные должны всегда считываться / записываться вместе.Нет необходимости читать или обновлять только одно из значений.

Если это выполнено, может быть несколько причин для объединения данных в одном поле:

  • Эффективность хранения, если пространство оказалось проблемой.
  • Эффективность извлечения, если производительность оказалась проблемой.
  • Гибкость схемы;где одно поле XML может исключить десятки или сотни разных таблиц.
1 голос
/ 08 января 2012

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

В противном случае оставьте все как есть.

Но помните, включайте поля в свой SELECT только тогда, когда они вам нужны.

0 голосов
/ 08 января 2012

Должен ли я использовать другую таблицу для этой цели?

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

...