我对正确的桌面设计有疑问。想象一下情况:
表格中有两个实体(公司和演员)。 演员可以有几种类型(即商店,PoS,个人等)
为了概述这种关系,我可以创建一个名为“C2A”的链接表。所以,我们最终会得到这样的结构:
|公司1 | Actor1(店铺)
|公司1 | Actor2(POS)
|公司2 | Actor1(POS)
等
这种方法在需求变更之前就可以正常工作。现在我们需要有可能将Actor分配给Actor来构建另一种层次结构,即一个Actor(Shop)可能有多个其他Actors(PoS)分配给它,而所有这些都属于某个公司。所以,我们最终会得到这样的结构:
|公司1 |演员1(商店)| NULL
| NULL |演员1(商店)| Actor1(POS)
| NULL |演员1(商店)| Actor2(POS)
等
我需要能够表达关系(公司(C)和演员(A)之间),如下所示:C - A - A; A - C - A; A - A - C
在一个表中有两个相似的字段并不是最好的主意。这种关系通常如何设计?
答案 0 :(得分:2)
为实体Company和Actors创建两个单独的表。
Company( Id (PK), Name)
Actor(Id (PK), Name)
现在,如果你确定很多人。您可以继续为此创建单独的表。
CompanyActorMap( MapId (PK), CompanyId (FK), ActorId (FK))
对于演员Heirarchy,使用单独的表,因为它与层次结构与公司的关系无关,它与Actors如何相互关联。多级无限层次结构的最佳方法是创建一个新表,其中两列用于作为外键的Actor Id
ActorHierarchy( HierarchyId (PK), ChildActorId (FK), ParentActorId(FK))
对于层次结构中没有父级的Actor,在CompanyActorMap表中可以有一个表示层次结构头的条目,并且可以通过检查PArentActorId列及其childActorId从ActorHierarchy表派生剩余的链。
这显然是草稿。希望这可以帮助。