2015-09-23 4 views
2

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

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

Клиент подключается к сети и просит заменить суппорты переднего тормоза. В этом случае услуга «Замена тормозного суппорта», а опция «Фронт». Я храню их в таблице:

Services 

| ID | Service Name    | 
---------------------------------- 
| 1 | Brake Caliper Replacement | 
| 2 | Oil Change    | 

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

Варианты обслуживания

| ID | Service_Id | Service Option | Required | Optional | 
---------------------------------------------------------- 
| 1 | 1   | Front   | 1  | 0  | 
| 2 | 1   | Rear   | 1  | 0  | 
| 3 | 1   | Pad Replacement| 0  | 1  | 

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

Вот как я в настоящее время его установки:

Quote 

| ID | Customer Id | Vehicle Id | 
--------------------------------- 
| 1 | 1   | 2   | 

Quote Service 

| Quote Id | Service Id | Service Option Id | 
--------------------------------------------- 
| 1  | 1   | 1     | 
| 1  | 1   | 3     | 
| 1  | 2   | null    | 

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

+0

не спасают null последний бит. На самом деле они хотят, чтобы фронт был сделан. Повторно запустите вашу первую таблицу, показанную – Drew

+0

У вас может быть опция сервиса (например, BASE) для всех необходимых услуг. – ergonaut

+0

Возможно, такой сервис будет «подъемным капотом» – Drew

ответ

1

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

create table service 
( -- services (and sub-services) self-join hierarchy 
    -- pricing naturally has no business in this table 
    -- it must be kept high-level and generic enough to handle all autos 
    -- from Hyundai to BMW 
    serviceId int auto_increment primary key, 
    description varchar(255) not null, -- the service name 
    required int not null, -- 1 means required, 0 means optional 
    parentId int not null -- 0 means no parent, otherwise serviceId of parent 
); 

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

Quote будет иметь две колонки: quoteId и serviceId

+0

Мне нравится эта идея, я думаю Я никогда не думал о необходимых вариантах, таких как Front и Rear, как о реальных услугах, которые, как я предполагаю, они технически являются. Поэтому у меня было бы 3 услуги для тормозных суппортов, «Замена тормозного суппорта», «Замена переднего тормозного суппорта», «Замена заднего тормозного суппорта», , Это то, что вы предлагаете? – user1347026

+0

есть. из-за нюанса для вашей торговли, они разные. Когда они перестают быть разными для всех типов автомобилей, закрепите их в 1 ряд – Drew

+0

, трюк состоит в том, чтобы сохранить как можно меньше строк, чтобы не было необходимости консолидировать их позже в 1 id, при этом там, где плавает старый id, Не иметь родителя для ссылки (он же сироты). Внешние ключевые ограничения обрабатывают это для вас, но оставляют беспорядок служб, которые не действуют больше – Drew

Смежные вопросы