Нужен совет по структуре базы данных (MS SQL / MySQL) - PullRequest
4 голосов
/ 20 марта 2011

Предпочтительно MS SQL, я хочу переключиться с MySql.

Итак, у меня есть этот замечательный клиент, у которого есть 4 файла Excel.Каждый файл Excel представляет собой Product Range.

. В каждом файле Excel содержится от 3 до 8 листов.Каждый Sheet представляет Type из Product в этом Product Range.

Каждый лист содержит следующие столбцы:

PartNo, Description, QTY, Price1, Price2, Price3, Price4 ...

(никогда не было и не будет больше 8 столбцов цен.)

КаждыйЛист может содержать от 5 до 5000 строк.

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

То, как я в настоящее время имею нашу существующую базу данных MySQL, состоит в том, что каждый лист представляет собой таблицу.Это оно! (Это нужно было быстро «вывести», отсюда и нехватка времени на настройку правильного формата / структуры для БД.)

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

Меня совсем не волнует, как вставить все в базу данных, как в свободное время в прошлом году я написал приложение, которое анализирует эти файлы Excel, извлечениялисты и вставляет их в БД, с дополнительными настройками.Я беспокоюсь о , как я должен на самом деле настроить эту новую БД.

Как лучше всего это сделать, учитывая вышеизложенные детали?

Любая помощь вообщеочень ценится.Спасибо!

Обновление:

О столбцах цен (пример), небольшая информация о , почему содержит более одного столбца цен на каждом листе .:

Столбец 1 цены может быть оцинкованной ценой за единицу, Столбец 2 цены может быть оцинкованной коробочной ценой, Столбец 3 цены может быть ценовой коробкой из нержавеющей стали GR304, а столбец 4 может быть ценой за единицу нержавеющей стали GR316.Эти ценовые столбцы различны для каждой линейки продуктов, однако некоторые продукты в линейке продуктов могут также содержать несколько одинаковых ценовых столбцов.Вот почему так легко было представить каждый продукт в виде отдельной таблицы.

Ответы [ 3 ]

5 голосов
/ 20 марта 2011

Полагаю, вы ищете совета по проектированию базы данных, верно?

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

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

Ну, это были мои пять центов. Надеюсь, это помогло.

1 голос
/ 20 марта 2011

Простым решением было бы разделить его на 3 таблицы.ProductRange и ProductType связаны с таблицей Product через отношения внешнего ключа.

ProductRange
   Id
   RangeName
   // Plus any other columns you need. eg description, startdate etc

ProductType
   Id
   ProductTypeName

Product
   Id
   ProductRangeId
   ProductTypeId
   PartNo
   Description
   Qty
   Price1 
   // etc

Если вы хотите большей гибкости в отношении цены, вы должны создать еще одну таблицу Price с таблица объединения «многие ко многим» между таблицами Product и Price.

Price
   Id
   Description
   Price

ProductPrice
    PriceId
    ProductId

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

0 голосов
/ 20 марта 2011

Наличие нескольких столбцов для цены кажется мне немного странным, если Price1 не означает «Business Rate», а Price2 означает «Consumer Rate» или что-то подобное.Если разные цены относятся к разным характеристикам одного и того же продукта, вы можете рассмотреть возможность их разделения на другую таблицу.Например:

Таблица продуктов : KeyTable, ProductDescription ...

Таблица цен : KeyTable, KeyProduct, PriceType, Цена

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

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