我正在学习数据库设计,具有以下业务要求。我应该选择哪种设计方法?
每一种方法,我都想到了退缩。如果你选择哪个是正确的设计?
A)方法1
Application_PK
Application_Date
Application_Detail
Customer_PK
Company_PK
Organisation_PK
B)方法2
Application_PK
Application_Date
Application_Detail
Application_PK
Customer_PK
Application_PK
Customer_PK
Application_PK
Organisation_PK
答案 0 :(得分:2)
一对多关系中的外键通常位于“many”表中,指向“one”表。所以它应该是“接近2”。
您没有说出反向关系是什么。一个应用程序可以由多个客户拥有吗?不止一个组织?如果是,那些是“多对多”的关系。在这种情况下,您必须在两者之间添加连接表:
CUSTOMER -------- CUSTOMER_APPLICATION ------------ APPLICATION
(CUSTOMER_ID) (CUSTOMER_ID, APPLICATION_ID) (APPLICATION_ID)
答案 1 :(得分:2)
修改强>
-- 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)。使用这种“桥牌桌”很好。
那么,选择哪种设计是正确的很容易。第二种方法是正确的。但是选择哪种设计更好更难。这取决于你的另一个“隐含”规范。性能
我猜,你的第一种方法是“不那么正常”。我(再次)猜测它会比第二种方法表现更快,这种方式更“正常”。但是,除非证明第二种方法明显变慢,否则不应使用这种方法。