数据库设计采用1对多方法

时间:2010-09-07 15:23:30

标签: database-design

我正在学习数据库设计,具有以下业务要求。我应该选择哪种设计方法?

  1. 每位客户都可以申请许多申请。
  2. 每家公司都可以申请许多申请。
  3. 每个组织都可以申请许多申请。
  4. 每一种方法,我都想到了退缩。如果你选择哪个是正确的设计?

    A)方法1

    应用

    Application_PK
    Application_Date
    Application_Detail
    Customer_PK
    Company_PK
    Organisation_PK

    B)方法2

    应用

    Application_PK
    Application_Date
    Application_Detail

    ApplicationToCustomer

    Application_PK
    Customer_PK

    ApplicationToCompany

    Application_PK
    Customer_PK

    ApplicationToOrganisation

    Application_PK
    Organisation_PK

3 个答案:

答案 0 :(得分:2)

一对多关系中的外键通常位于“many”表中,指向“one”表。所以它应该是“接近2”。

您没有说出反向关系是什么。一个应用程序可以由多个客户拥有吗?不止一个组织?如果是,那些是“多对多”的关系。在这种情况下,您必须在两者之间添加连接表:

CUSTOMER -------- CUSTOMER_APPLICATION ------------ APPLICATION
(CUSTOMER_ID)     (CUSTOMER_ID, APPLICATION_ID)     (APPLICATION_ID)

答案 1 :(得分:2)

alt text

修改

-- All users of the application with ApplicationID = 7
select
      a.ApplicationID
    , u.UserId
    , u.UserType
from User_Application  as x
join Application       as a on a.ApplicationID = x.ApplicationID
join User              as u on u.UserId        = x.UserID
left join Customer     as c on c.UserID        = u.UserID
left join Company      as m on m.UserID        = u.UserID
left join Organization as r on r.UserID        = u.UserID
where  a.ApplicationID = 7 ;

答案 2 :(得分:0)

规范隐含地说你有多对多的关系(CMIIW)。使用这种“桥牌桌”很好。

那么,选择哪种设计是正确的很容易。第二种方法是正确的。但是选择哪种设计更好更难。这取决于你的另一个“隐含”规范。性能

我猜,你的第一种方法是“不那么正常”。我(再次)猜测它会比第二种方法表现更快,这种方式更“正常”。但是,除非证明第二种方法明显变慢,否则不应使用这种方法。