数据库设计缺陷

时间:2012-02-26 17:40:15

标签: mysql database database-design

我很难将头围绕在设计缺陷上,我真的希望社区可以帮助我。我目前的设计是:

SUBMISSIONS table

submission_ID (pk, int)
company_id (fk, int)
product_id (fk, int)
vendor_id (fk, int)
category (VARCHAR)
price (INT)
approval_status (TINYINT)
notes (MEDIUMTEXT)

VENDOR table

vendor_ID (pk, int)
vendor_name (VARCHAR)    

COMPANY table

company_id (pk, int)
company_name (VARCHAR)

PRODUCTS table

product_id (pk, int)
product_name(VARCHAR)

我的项目是向公司提交产品以供审核的供应商。这些公司的仪表板包含一个网格,可以将供应商提交的所有产品提取给他们,他们会对其进行审核,然后批准或拒绝使用这些产品。

我的问题是这个......在提取待定产品网格时,我按类别对提交内容进行分组。这样,如果一个类别中有100个产品(这是常见的),他们只需要看到类别,而不是单个产品。他们可以在从网格弹出的模态窗口中输入提交组的注释。窗口的ID是组中的第一个提交,提交是存储注释的位置。我主要担心的是,他们可以单独批准或拒绝来自该组的提交,因此当他们为该组中的第一次提交附加的组注释时会发生什么,然后他们否认首次提交。现在当他们再次登录时,该组的所有笔记似乎都已消失,因为笔记附加到第一个提交,现在位于其被拒绝的产品文件夹中。必须有一种更好的方法来跟踪小组最初的笔记,然后将这些笔记提供给以后的个人提交,但我没有用我有限的数据库设计技能看到它。此时的任何建议都是有帮助的。

2 个答案:

答案 0 :(得分:1)

我的建议是

  • CREATE TABLE类别(id int AUTO_INCREMENT PRIMARY KEY,名称VARCHAR(250)not NULL,UNIQUE INDEX(name),notes MEDIUMEXT)
  • category (VARCHAR)替换为category (fk, int)
  • 中的SUBMISSIONS
  • notes (MEDIUMTEXT)
  • 中删除SUBMISSIONS
  • 现在将附注附加到类别表

答案 1 :(得分:1)

如前所述,您应该为Categories创建一个表,Submission将存储CategoryID。

您正在执行查询以检索模式中显示的所有项目。更新组中的提交时,还必须更新所有记录。

所以基本上你的更新声明是:

UPDATE Submissions
SET notes = @notes, approval_status = @approval_status
WHERE (same criteria from your select statement)

由于您已经缩小了在模式中显示的内容,我假设您知道如何将值发送到SQL语句的参数。