Database design 设计审查——你认为我';我这样做对吗?我的第一个商业项目!

Database design 设计审查——你认为我';我这样做对吗?我的第一个商业项目!,database-design,Database Design,我的任务是设计一个应用程序,允许人们扫描一份法律文件,保存与名字相关的文件,并将其保存到数据库中 现在,在组织内部,有许多部门,每个部门可以有许多子部门 问题在于,一些较大的组织将有许多部门,而较小的组织将只有一两个 我考虑过创建一个Department表和一个Supdepartment表来创建关联,等等。这样,它是可扩展的,用户可以动态创建部门,以使我的程序适合他们的组织方案 我这样做对吗?正如我所说的,这是我的第一个商业应用程序,所以我想把它做好,为自己树立一个按时交付东西的名字,并为其他人

我的任务是设计一个应用程序,允许人们扫描一份法律文件,保存与名字相关的文件,并将其保存到数据库中

现在,在组织内部,有许多部门,每个部门可以有许多子部门

问题在于,一些较大的组织将有许多部门,而较小的组织将只有一两个

我考虑过创建一个Department表和一个Supdepartment表来创建关联,等等。这样,它是可扩展的,用户可以动态创建部门,以使我的程序适合他们的组织方案

我这样做对吗?正如我所说的,这是我的第一个商业应用程序,所以我想把它做好,为自己树立一个按时交付东西的名字,并为其他人扩展好的代码

编辑:你觉得这样更好吗

Department
ID Name Description ParentDepartment
如果ParentDepartment为空,则该部门为根部门,对吗?这是最佳解决方案吗?这个设计就是这样设计的,因为我想根据根部门的数量在表单上加载按钮


如果不是这样设置的,我必须扫描Department表中的每个条目,以验证它的“rootiness”?:P

在我看来,您最好只拥有一个部门表,然后拥有一个自引用的parentId列,这样顶级部门将有空的父部门,任何子部门都将有一个父部门。通过这种方式,您可以嵌套任意深度。

在我看来,您最好只拥有一个部门表,然后拥有一个自引用的parentId列,这样顶级部门将具有空父部门,任何子部门都将具有父部门。通过这种方式,您可以嵌套任意深度。

有一个部门表和自引用。如果A是一个部门,它有两个子部门x和y

DeptNo DeptName ParentDeptID 1无效 2 x 1 3 y 1


这样,您就不会将此层次结构中的级别数绑定到只有2个,即只有一个部门表和自引用。如果A是一个部门,它有两个子部门x和y

DeptNo DeptName ParentDeptID 1无效 2 x 1 3 y 1


这样,您就不会将此层次结构中的级别数仅与2个绑定起来。我过去曾这样做过,我觉得有义务警告您,我认为您最好不要将文档标识为属于部门。正如你所说,它们会随着时间的推移而变化和增长(我想会缩小),所以你必须不断地改变你的列表。我想你会有更多的运气标记文件。例如,该单据的customerid=12345,invoiceid=asdasdasd。另一个单据没有客户id,而是paymentid=1234567890。然后,每个部门都可以决定自己感兴趣的内容,而更改不需要更改扫描的文档——只需要更改检索机制


编辑:我还应该注意到,一些组织有临时工或较低级别的人员进行扫描。如果您必须依靠它们对文档进行正确分类,那么您可能会丢失或错误地归档数字文档,就像纸质文档一样。同样,也许是另一个不将文档严格链接到部门的原因。此外,具有标签允许单个文档链接到2个部门或子部门;仅此一点就足以说明不按您的方式进行操作的原因。

我过去曾这样做过,我觉得有义务提醒您,我认为您最好不要将文档标识为属于部门。正如你所说,它们会随着时间的推移而变化和增长(我想会缩小),所以你必须不断地改变你的列表。我想你会有更多的运气标记文件。例如,该单据的customerid=12345,invoiceid=asdasdasd。另一个单据没有客户id,而是paymentid=1234567890。然后,每个部门都可以决定自己感兴趣的内容,而更改不需要更改扫描的文档——只需要更改检索机制


编辑:我还应该注意到,一些组织有临时工或较低级别的人员进行扫描。如果您必须依靠它们对文档进行正确分类,那么您可能会丢失或错误地归档数字文档,就像纸质文档一样。同样,也许是另一个不将文档严格链接到部门的原因。此外,具有标签允许单个文档链接到2个部门或子部门;仅此一点就足以成为不按您的方式进行设计的理由。

您所说的是灵活设计(即易于扩展):

有两个家长的部门呢?有些情况下,部门不容易分类:因此,将它们添加到两个父级中可以很容易地找到它们(想想这种情况:红色-绿色-黄色。黄色有两个父级;红色和绿色,通过浏览红色或绿色可以很容易地找到它们。“冗余”我相信,这将有助于更好地对部门进行正确分类。)

我认为最好将部门之间的关系放在不同的表格中:

Department
 Id Name Description

DepartmentRelation
 ParentId ChildId

这也符合1NF:

您所说的灵活设计(即易于扩展):

有两个家长的部门呢?有些情况下,部门不容易分类:因此,将它们添加到两个父级中可以很容易地找到它们(想想这种情况:红色-绿色-黄色。黄色有两个父级;红色和绿色,通过浏览红色或绿色可以很容易地找到它们。“冗余”我相信,这将有助于更好地对部门进行正确分类。)

我认为最好将部门之间的关系放在不同的表格中:

Department
 Id Name Description

DepartmentRelation
 ParentId ChildId

如果您正在处理分层数据并使用SQL,则这也符合1NF: