在数据库中存储多个产品选项

时间:2015-09-23 23:34:32

标签: mysql sql database database-design

让我先说明我知道我在标题中使用了“产品”一词,尽管这是关于“服务”的,我觉得这个概念和我想要实现的是与产品选项的方法相同并且每个人都可以比我在标题中使用“服务选项”更容易。

我正在为我的新汽车修理业务网站建立一个数据库。我正在努力为我提供的各种服务存储选项。例如:

客户上线并要求更换前制动钳。在这种情况下,服务是“Brake Caliper Replacement”,服务选项是“Front”。我将它们存储在一个表中:

$viewContentLoaded

我有第二个表存储每个服务的所有潜在选项,并指示该选项是必需的还是可选的。我在报价过程中在网站上使用这些字段,以确保他们选择了所需的选项之一。

服务选项

myApp.run(['$rootScope', function($rootScope) {

    $rootScope.$on('$viewContentLoaded', function(){

        var waypoint = new Waypoint({
            element: document.getElementById('waypoint'),
            handler: function(direction) {
                console.log('Scrolled to waypoint!')
            }
        })
    });
}]);

现在,当他们填写剩下的报价并选择他们想要的选项时,我正在努力解决如何存储关系。

以下是我目前的设置方式:

Services

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

但并非所有服务都有必需或可选的选项。但我正在尝试确定存储所有这些数据以生成报价的最佳方法。任何人都可以提供一些帮助,如果这个设计有意义,或者可能采用不同的方式来看待我可能没有想过的事情?

1 个答案:

答案 0 :(得分: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会有两列:quoteIdserviceId