使用查找数据进行数据库设计

时间:2016-06-07 23:16:52

标签: sql database database-design

我正在创建一个数据库,我需要一些设计方面的帮助。

我的表格如下:

id
request_employee_id
request_menu
request_submenu
request_qty
send_employee_id
notify_employee_id

每个请求都有一个添加更多选项。例如:

请求菜单

id - 1 | Desc - Pencil
id - 2 | Desc - Pen
id - 3 | Desc - Eraser
id - 4 | Desc - Marker

根据所选的“请求菜单”,将有不同的子菜单选项。

请求子菜单

id - 1 | Desc - Yellow HB
id - 1 | Desc - Black HC
id - 2 | Desc - Blue Ink
id - 2 | Desc - Black Ink
id - 2 | Desc - Red Ink
id - 3 | Desc - NULL
etc...

请求者可以从主菜单中选择Pencil,从子菜单中选择Yellow HB,然后可以在主菜单和子菜单上添加另一个橡皮擦请求,并选择更多不同的请求。

请求者可以选择发送给员工X并添加更多员工发送,例如也发送给员工Y和员工W.

请求者可以通知员工Z该请求,并向通知员工T和员工Y添加更多员工。

问题我基本上是否必须使用规范化以及如何处理。我正在考虑如何获取报告的数据。

如果用户发布带有多个菜单和子菜单的请求,则倍数发送用户和不同的通知用户,如果我有规范化,我将不得不使用大量的JOINS语句,数据将重复多少用户和菜单我会得到的。

或者使用多个单独的数据库连接来获取:来自每个请求的所有菜单,另一个连接和按请求查询所有send_employee,另一个连接是针对notify_employee的请求。最后,我将有一个7个不同的连接和SQL select语句来报告一个请求。

注意:我恢复了表格,我也有UOM的请求,将落在与员工相同的问题上。每个请求可以通过菜单具有倍数UOM。 Eaches,Bag,Cases等。

如何处理这样的场景是最好的设计。

谢谢

1 个答案:

答案 0 :(得分:0)

这可以很简单:

CREATE TABLE tbl_Request(
    Request_ID INT IDENTITY(1,1) PRIMARY KEY,
    Employee_ID INT NOT NULL,
    Request_DT DATETIME NOT NULL,
    Closed_Dt  DATETIME
);
GO
CREATE TABLE tbl_Category(
    Category_ID INT IDENTITY(1,1) PRIMARY KEY,
    Category_Name VARCHAR(32) NOT NULL
);
GO
CREATE TABLE tbl_Item(
    Item_ID INT IDENTITY(1,1) PRIMARY KEY,
    Category_ID INT NOT NULL,
    Item_Name VARCHAR(32) NOT NULL
);
GO
CREATE TABLE tbl_Request_Details(
    Request_ID INT NOT NULL,
    Item_ID INT NOT NULL,
    Quantity DECIMAL NOT NULL
);
GO