Zac*_*son 12 linq database schema database-design linq-to-sql
比方说,我已经得到了阿尔法的东西,可能会或可能不会是或将与布拉沃或查理的事情.
这些是一对一的关系:没有Alpha将涉及多个Bravo.并且Bravo不会涉及多个Alpha.
我有几个目标:
我有三个想法......
PK = primary key
FK = foreign key
NU = nullable
Run Code Online (Sandbox Code Playgroud)
一张桌子上有很多nullalbe字段(平面文件)......
Alphas
--------
PK AlphaId
AlphaOne
AlphaTwo
AlphaThree
NU BravoOne
NU BravoTwo
NU BravoThree
NU CharlieOne
NU CharlieTwo
NU CharlieThree
Run Code Online (Sandbox Code Playgroud)
许多表没有nullalbe字段......
Alphas
--------
PK AlphaId
AlphaOne
AlphaTwo
AlphaThree
Bravos
--------
FK PK AlphaId
BravoOne
BravoTwo
BravoThree
Charlies
--------
FK PK AlphaId
CharlieOne
CharlieTwo
CharlieThree
Run Code Online (Sandbox Code Playgroud)
两者中最好的(或最差的):许多表的nullalbe外键很多......
Alphas
--------
PK AlphaId
AlphaOne
AlphaTwo
AlphaThree
NU FK BravoId
NU FK CharlieId
Bravos
--------
PK BravoId
BravoOne
BravoTwo
BravoThree
Charlies
--------
PK CharlieId
CharlieOne
CharlieTwo
CharlieThree
Run Code Online (Sandbox Code Playgroud)
如果Alpha必须是Bravo或Charlie,而不是两者都是怎么办?
如果不仅仅是Bravos和Charlies,Alphas也可以是Deltas,Echos,Foxtrots或Golfs等......?
编辑:这是问题的一部分:哪个是我导航的最佳数据库架构?
如果您希望每个Alpha只与一个Bravo相关,我会投票使用组合FK/PK的可能性:
Bravos
--------
FK PK AlphaId
BravoOne
BravoTwo
BravoThree
Run Code Online (Sandbox Code Playgroud)
这样,只有一个Bravo可能会引用你的Alpha.
如果Bravos和Charlies必须互斥,最简单的方法可能是创建一个鉴别器字段:
Alpha
--------
PK AlphaId
PK AlphaType NOT NULL IN ("Bravo", "Charlie")
AlphaOne
AlphaTwo
AlphaThree
Bravos
--------
FK PK AlphaId
FK PK AlphaType == "Bravo"
BravoOne
BravoTwo
BravoThree
Charlies
--------
FK PK AlphaId
FK PK AlphaType == "Charlie"
CharlieOne
CharlieTwo
CharlieThree
Run Code Online (Sandbox Code Playgroud)
这样,AlphaType字段强制记录始终属于一个子类型.
归档时间: |
|
查看次数: |
10188 次 |
最近记录: |