我正在创建一个数据库,我需要一些设计方面的帮助。
我的表格如下:
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等。
如何处理这样的场景是最好的设计。
谢谢
答案 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