0

我正在使用通过 Sql Server 2008 创建的数据库创建一个 asp.net 网站(通过 Expression Web 4 和 Visual Web Developer 2010 Express)。但是,我对提供给网站的数据库架构感到困惑。

正在创建的网站是为了允许创建法律案件,记录案件的类型,然后记录律师和/或辩护人和/或支持人员处理案件。

因此,名为“Kramer v Kramer”的案件将是一个离婚案件,由 2 名律师、1 名律师和 4 名支持人员共同处理此案。然而,另一个案件“人民诉拉里弗林特”可能是一个有 4 名律师、没有律师和 10 名支持人员的起诉案件。

到目前为止,我所做的是我有一个名为“案例表”的表,其中包含以下列:

Case_ID(这是表的主键);Case_Type_ID;律师_ID;Advocate_ID 和 Support_Staff_ID。案例表中的最后 4 列是外键。

Case_Type只有两列:“Case_Type_ID”(PK)和“Area_of_law”。Case_Type_ID 只是数字 (001,002...),“Area_of_law”是 char(30)(例如诉讼、离婚、财产、刑事)。到现在为止还挺好。

问题是(这适用于倡导者和支持人员),如果我创建律师表以仅包含三列:

Columns = Lawyer_ID(作为主键)| 名字 | 姓

记录 1 = 001 | 汤姆 | 汉克斯

记录 2 = 002 | 汤姆 | 巡航

记录 3 = 003 | 丹尼尔 | 克雷格

记录 4 = 004 | 妮可 | 基德曼

然后我如何为案件分配多名律师?

Case Table中,为了符合规范化规则,大概我需要如上所述向Case Table添加列,以便记录 Lawyer_ID_1 (FK)| Lawyer_ID_2 (FK)| Lawyer_ID_3 (FK) | Lawyer_ID_4 (FK)。

所以它可能是 004 | 002 | 空 | Null 显示妮可基德曼和汤姆克鲁斯正在处理此案。如果我只有一个 Lawyer_ID 列,为了显示 Nicole Kidman 和 Tom Cruise 正在处理此案,它必须是“004,002”,这是我在这个网站上读到的一个很大的禁忌。

通过将所有律师记录在一个单独的表中,我可以在visual web developer 2010 express 中创建一个数据绑定复选框列表(绑定到律师表),因为它使用律师姓名填充列表。所以我对这种方法很满意。

但是,如果在Lawyer Table中有 50 位律师,我需要在Case Table中分配 50 列仅分配给律师(如果一个案例最终有 50 位律师在处理它)。这种方法是有问题的,因为如果律师被删除或添加,因为律师列的数量受到影响,案例表可能会出现偏差。显然这是一个不好的方法,所以有人可以帮忙吗?

是否有一种数据库模式允许一个“案例”记录与多个“律师”记录相关,而不需要很多列?(希望该模式也可以应用于Support Staff TableAdvocate Table)。

您的帮助将不胜感激。我是 web 开发和 sql 数据库工作的新手,我试图查找解决方案,但我可能不知道我的问题的关键字。

4

1 回答 1

0

这可能是一个多对多的关系。请允许我在您的情况下稍微解释一下这 3 种关系:

如果每个案件只有一名律师,并且每个律师只能处理一个案件,那么您就有一对一的关系。

如果每个案件只有一名律师,但每个律师可以处理多个案件,那么您就有一对多的关系。同样,如果每个案件可以有多个律师,但每个律师只能处理一个案件,那么您仍然是一对多的关系。

如果每个案件可以有多个律师,并且每个律师可以处理多个案件,那么您就有了多对多的关系。

多对多关系的典型解决方案是使用第三个表来描述关系:

create table casesALawyerWorksOn (case_id, lawyer_id)

如果@albert、@brad 和@christine 处理@peopleVflynt 案例,那么:

insert into casesALawyerWorksOn (case_id, lawyer_id) values
    (@albert, @peopleVflynt)
    (@brad, @peopleVflynt)
    (@christine, @peopleVflynt)

因此,@fred 律师处理的所有案件都是:

select case_id from casesALawyerWorksOn where lawyer_id = @fred

处理案件的所有律师@kramerVkramer 是:

select lawyer_id from casesALawyerWorksOn where case_id = @kramerVkramer
于 2013-08-15T03:28:40.500 回答