Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Вниз

Концептуальный вопрос по архитектуре БД "Каталог"   Найти похожие ветки 

 
Empleado ©   (2007-02-15 12:32) [0]

Хотелось бы услышать ваши мнения по поводу следующего.
Спасибо заранее.
*************************************************

Дано:
Несколько каталогов, от разных поставщиков, обновляемых эпизодически (изменения цен, номенклатура и т.д.).
Каждый поставщик придерживается своих стандартов представления и форматов данных.
Размеры каталогов - от 1.000 итемов до 150.000. Количество каталогов - теоретически любое, практически - скажем, около 20 разных.
DB: SQL2005.

Необходимо:
Организовать один общий каталог (из множества разных), содержащий в одном месте всю необходимую информацию для работы с итемами из разных каталогов, с возможностью ссылаться только на одну таблицу из разных мест DB бизнес-приложения.

(Пример: Клиен заказывает 15 автопокрышек, 6 шил и 32 рубанка. Для всех итемов - разные поставщики; разное время зачисления товара на склад и т.д.)

Мои мысли и возможные решения:
(Опустим момент перегона данных из формата поставщика в SQL;
опустим также представление данных для пользователя)
Закусив губу и почесав мозгами затылок, рассматриваю пока два варианта.
Оба варианта представлены вот тут:
http://empleado.hotbox.ru/DBSchemas.jpg (160 kb)

I. (см. Schema 1)
Принцип заключается в объединении всех итемов разных каталогов в одной таблице с данными, более-менее общими для всех разных каталогов (например: название, вес, размеры) - см. таблицу CatalogItems1.
Все специфичные характеристики (например, %-ное содержание золота в часах, уровень радиоактивности молока, диаметр боеголовки) описаны в других таблицах - см. ItemFeatures1 и CatItemFeatures1.
Отношение CatVersionItems1 описано отдельной таблицей, чтобы не переписывать заново одни и теже итемы для новых версий каталогов.
Для сохранения универсальности, введена таблица DataTypes1, описывающая тип данных особых характеристик (галлоны, баррели, удавы и т.д.). Естественно, превращение типов должно быть реализовано программистом в приложении.

Была еще такая идея, в дополнение к вышенаписанному: добавить точную копию таблицы CatalogItems1, например UsedCatalogItems1, в которой будут содержаться только "используемые" итемы, для облегчения таблицы, на которую будут ссылаться все коммерческие предложения, контракты, гарантии, склады и т.д. Не знаю, насколько это рационально.

Мои большие сомнения по поводу I:
Размеры таблицы CatalogItems1, а особенно CatVersionItems1 (несмотря на то, что там только 2x integer).
И, соответственно, скорость производимых операций по выборке и join"ам.
Сразу отвечу - все данные сразу вытаскиваться не будут :). Предполагается организовать постраничную выборку и целенаправленный поиск.

II. (см. Schema 1)
Идея следующая. Каждый каталог рассматривается отдельно.
Поступил новый каталог, например Catalog_Supplier3 - пишем к нему новый модуль работы с ним (визуализация) и экспортные функции данных в другие таблицы.
Таблица UsedCatalogItems2 имеет все поля данных каждого каталога, т.е. новый каталог - смотрим, какие поля добавить в UsedCatalogItems2 и в соответствующую таблицу отношений полей к каталогам.
Как только использовался один из итемов каталога (например в заказе на покупку), помещаем его, если его там еще нет, в таблицу UsedCatalogItems2, и дальше используем ссылки из других таблиц (заказы, поступления и т.д.) на эту.

Мои сомнения по поводу II:
Не сложно ли будет строить запросы по данным одного заданного каталога из UsedCatalogItems2, учитывая, что нужные поля надо тоже искать в другой таблице CatFields2?

III. ... (Ваш вариант) ?...

Вопросы:
Какой вариант вам кажется наиболее приемлемым? Почему (если можно - обоснуйте)?

Спасибо за любые предложения, замечания, мысли.


 
Sergey13 ©   (2007-02-15 13:29) [1]

Сильно много букв. Всего не осилил. Но бросилось в глаза

> (Опустим момент перегона данных из формата поставщика в SQL;
Это самое интересное. ИМХО. 8-)

> Все специфичные характеристики (например, %-ное содержание
> золота в часах, уровень радиоактивности молока, диаметр
> боеголовки) описаны в других таблицах - см. ItemFeatures1
> и CatItemFeatures1.

А они ТЕБЕ нужны вообще - эти характреристики? Мне кажется надо спроектировать классификацию для себя и потом думать как туда загонять нужные тебе данные из внешних источников.


 
Empleado ©   (2007-02-15 13:38) [2]

>Сильно много букв. Всего не осилил
Буквов много, согласен.
В принципе, можно читать только до ссылки;
по ссылке http://empleado.hotbox.ru/DBSchemas.jpg - небольшие схемки, по ним понятен принцип;

остальное - мои рассуждения, пояснения, мат и тд


> Sergey13 ©   (15.02.07 13:29) [1]

Это самое простое, на мой взгляд :)

ПС. сорри, не закрыл черный тэг в первом мессаже.


 
stone ©   (2007-02-15 13:41) [3]


> (Пример: Клиен заказывает 15 автопокрышек, 6 шил и 32 рубанка.
>  Для всех итемов - разные поставщики; разное время зачисления
> товара на склад и т.д.)

Тут тебе понадобится уникальная идентификация товара. Все остальное это уже таблицы-расширения.


 
Sergey13 ©   (2007-02-15 13:51) [4]

> Это самое простое, на мой взгляд :)

Ну не знаю. Кому как видимо. Конвертация 1 источника может и вправду не так сложна, а вот многих (и наверное не всегда постоянных по формату) - уже проблема.


 
Empleado ©   (2007-02-15 14:05) [5]


> Sergey13 ©   (15.02.07 13:51) [4]
> Конвертация 1 источника может и вправду не так сложна, а
> вот многих (и наверное не всегда постоянных по формату) - уже проблема.

Совершенно.
Именно это - привидение разных отличных друг от друга форматов данных к одному общему, с последующим использованием только его - и есть моя цель :)


 
Sergey13 ©   (2007-02-15 14:09) [6]

> [5] Empleado ©   (15.02.07 14:05)

Ну так и проектируй СВОЙ справочник, кторый ТЕБЕ нужен. При этом конечно ИМЯ В ВИДУ послудующую конвертацию. Т.е. иди от своих потребностей, а не от форматов источников.


 
Игорь Шевченко ©   (2007-02-15 15:38) [7]


> Все специфичные характеристики (например, %-ное содержание
> золота в часах, уровень радиоактивности молока, диаметр
> боеголовки) описаны в других таблицах - см. ItemFeatures1
> и CatItemFeatures1.


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

create table objects (oid int pimary key, name varchar2(255));
create table attributes (attrid int primary key, attrname varchar2(255),
 datatype varchar2(25));
create table object_attributes (oid int, attrid int, value varchar2(4000),
 primary key (oid,attrid));
create table links (oid1 int, oid2 int, primary key (oid1, oid2));

Но как такая модель работает ? Простой запрос select first_name, last_name from person трансформируется в соединение трех таблиц с аггрегированием, более того, если имеются атрибуты NULLABLE - в таком случае может не быть строки в таблице object_attributes для некоторых атрибутов, - возможноЮ возникнет необходимость использовать внешнее соединение, которое может исключить оптимальные планы запросов из рассмотрения.

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

(с) Том Кайт "Эффективное проектирование приложений Oracle"


 
MsGuns ©   (2007-02-16 08:30) [8]

>"Не используется словарь данных и метаданные. Те, кто применяет универсальный подход, загоняют себя в угол."

Весьма спорное утверждение


 
Клара   (2007-02-16 09:02) [9]


> MsGuns

Я согласна с господином Шевченко. Нужно быть проще, но универсальность тоже важна. Поэтому первый вариант более правильный.
Я советую создать первую модель и протестировать, хотябы поверхностно. Возможны доработки.


 
Val ©   (2007-02-16 10:54) [10]

>Клара   (16.02.07 09:02)
С господином Кайтом. :)


 
Empleado ©   (2007-02-19 11:32) [11]

Спасибо всем принявшим участие.


 
clickmaker ©   (2007-02-19 13:42) [12]


> хорошо известно, что можно представить любой объект в базе
> данных используя только четыре таблицы:

это провокационное утверждение, лишающее программистов рабочих мест -)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.043 c
1-1173692656
Krants
2007-03-12 12:44
2007.05.06
Сортировка в ShellListView


15-1176156862
muh2
2007-04-10 02:14
2007.05.06
Trackbar


2-1176491891
Костя
2007-04-13 23:18
2007.05.06
Удаление файлов


15-1175977895
vasIZmax
2007-04-08 00:31
2007.05.06
Как правильно писать программу?!


1-1173696942
Novice
2007-03-12 13:55
2007.05.06
Файловая система, получение информации





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский