规范化澄清

时间:2015-07-04 21:27:50

标签: normalization database-normalization

美好的一天

我在这里遇到一些问题(请记住我是新手)。我原则上正在建立一个非常小的库存系统。我试图规范我的桌子。当我到达3NF时,我会遇到一个小问题。 这是过程

UNF

Sub SetHyperlinkOnShape()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet6")

    Dim hyperLinkedShape As Shape

    Set hyperLinkedShape = ws.Shapes("Rectangle 1")

    ws.Hyperlinks.Add Anchor:=hyperLinkedShape, Address:="", _
        SubAddress:="Sheet4!C4:C8", ScreenTip:="yadda yadda"
End Sub

INF

    Product (productID, productName, productBrand, productQuantityinstock, 
            productQuantitySold, productCost, adminstaffID, adminstaffName,
             adminstaffUserName  adminstaffPassword, productcategoryID, 
            productcategoryName, { customerID, customerName,      
           customerAddress, customerContact, serviceID,
           serviceType,serviceCost, serviceStatus, 
           serviceDetails, techstaffID, tsUsername, 
           techstaffPassword } )

2NF

    Product (productID, productName, productBrand, productQuantityinstock, 
            productQuantitySold, productCost, adminstaffID, adminstaffName,
            adminstaffUserName  adminstaffPassword, productcategoryID, 
            productcategoryName)


    Product_Customer (productID, customerID, customerName, customerAddress, 
                      customerContact, serviceID, serviceType,       
                       serviceCost,serviceStatus, 
                       serviceDetails, techstaffID, tsUsername, 
                      techstaffPassword)

3NF

    Product (productID, productName, productBrand, productQuantityinstock, 
             productQuantitySold, productCost, adminstaffID, adminstaffName,
             adminstaffUserName  adminstaffPassword, productcategoryID, 
             productcategoryName)

    Product_Customer (productID*, customerID*)

    Customer (customerID, customerName, customerAddress, customerContact, 
              serviceID, serviceType, serviceCost, serviceStatus,    
              serviceDetails, techstaffID, tsUsername, 
              techstaffPassword)

以上就是我所做的但是我被告知在3NF中形成SERVICE表中的customerID和techstaffID必须进入CUSTOMER表。

系统的设计使客户可以拥有一项或多项服务,技术人员将执行一项或多项服务。所以我知道外键总是在关系的许多方面,所以如果

服务客户将是1-M,服务方面具有多种多样性

服务的Techstaff将是1-M,服务方面的多重性也是如此

我附上了我的ERD图像。任何帮助将非常感谢这两个外键应该去哪里。

link to ERD, cant post images as yet

1 个答案:

答案 0 :(得分:1)

  

我被告知在3NF中形成了customerID和techstaffID   在SERVICE表中必须进入CUSTOMER表。

不要遵循这个建议。你的3NF很好。服务调用将涉及客户和TechStaff,因此在Service表中将其ID作为外键是正确的。如果您遵循建议,则意味着客户与所有服务请求的单个技术人员相关联。

我有另一个建议:为什么不将TechStaffAdminStaff合并到一个Staff表中,如下所示:

Staff
(
    StaffID,
    StaffFullName,
    StaffUsername,
    StaffPassword,
    StaffTypeID -- use this column to determine if a staff is tech or admin
)