规范化说明

Normalisation clarification

大家好

我在这里遇到了一个小问题(请记住我是新手)。我原则上正在构建一个非常非常小的库存系统。我试图使我的 table 正常化。我有一个小问题,我将在到达 3NF 时展示。 这是过程

UNF

    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 } )

INF

    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)

2NF

    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

     Product (productID, productName, productBrand, productQuantityinstock, 
              productQuantitySold, productCost, productcategoryID*,  
              adminstaffID* ,)

     Admin Staff (adminstaffID, adminstaffName, adminstaffUserName   
                  adminstaffPassword,)

     Product Category (productcategoryID, productcategoryName,)

     Product_Customer (productID*, customerID*)

     Customer ( customerID, customerName, customerAddress, customerContact) 

     Tech Staff ( techstaffID, techstaffUsername, techstaffPassword)

     Service (serviceID, serviceType, serviceCost, serviceStatus,  
              serviceDetails, customerID*, techstaffID*)

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

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

客户服务将是 1-M,服务端有很多多样性

提供服务的技术人员将有 1 - M 人,服务方面也有很多多样性

我附上了我的 ERD 图片。如果能就这两个外键的去向提供任何帮助,我们将不胜感激。

link to ERD, cant post images as yet

I was advised that the in the 3NF form the customerID and techstaffID in the SERVICE table must go into the CUSTOMER table.

不要听从这个建议。你的 3NF 没问题。服务调用将涉及客户和技术人员,因此将他们的 ID 作为 Service table 中的外键是正确的。如果您听从建议,这将意味着所有 his/her 服务请求都与一位技术人员联系。

我的另一个建议:为什么不将 TechStaffAdminStaff 合并为一个 Staff table,像这样:

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