Вопросы проектирования баз данных - нужны пояснения - PullRequest
3 голосов
/ 08 июля 2010

я проектирую базу данных с использованием sql server 2005

Основная концепция нашей стороны - импортировать XML-каналы от поставщиков

разные поставщики могут иметь различное представление данных

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

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

, у одного продукта может быть свойство цвета, а у другого - нет.

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

если я создам таблицу для обязательных столбцов и других таблиц для хранения необязательного столбца.

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

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

мы будем много сравнивать продукты разных поставщиков

наша база данных будет выглядеть примерно так: www.pricerunner.co.uk

надеюсь, я хорошо объясню концепцию

Ответы [ 2 ]

1 голос
/ 08 июля 2010

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

Я быскажем, поместите ваши индексы в правильное место, оптимизируйте свои запросы, убедитесь, что у вас хорошо разделены файловые группы, и т. д. (просто обычные обычные старые вещи базы данных), и вы должны быть хорошими.

1 голос
/ 08 июля 2010

Зависит от того, как вы хотите получить к нему доступ.

Как вы говорите, скорость важна - но что вы собираетесь делать с этими дополнительными, необязательными частями информации? Вам нужно хранить их вообще? Предполагая, что вы делаете, как часто вам нужно получить к ним доступ?

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

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

Также следует помнить о компромиссе в терминах хранения и транспорта: для хранения большого количества пустых полей требуется некоторое пространство, а для отправки большого количества пустых полей требуется пропускная способность сети.

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

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

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