小编DCN*_*YAM的帖子

在单个列中使用来自多个表的 ID

我的一位同事创建了一个类似于以下的架构。这是一个简化的模式,仅包括解决此问题所需的部分。

系统规则如下:

  1. 部门可以有 0 到多个部门。
  2. 一个部门必须只属于一个部门。
  3. 一篇文章可以分配给一个部门,也可以分配给该部门的一个部门。

架构是:

Department
---------- 
DepartmentID (PK) int NOT NULL
DepartmentName varchar(50) NOT NULL

Division
--------
DivisionID (PK) int NOT NULL
DepartmentID (FK) int NOT NULL
DivisonName varchar(50) NOT NULL

Article
-------
ArticleID (PK) int NOT NULL
UniqueID int NOT NULL
ArticleName varchar(50) NOT NULL
Run Code Online (Sandbox Code Playgroud)

他使用一个虚构的规则(因为没有更好的术语)定义了模式,即所有 DepartmentID 都在 1 到 100 之间,所有 DivisionID 都在 101 到 200 之间。他指出,在查询文章表时,您将知道是否UniqueID 来自 Department 表或 Division 表,具体取决于它所属的范围。

我认为这是一个糟糕的设计,并提出了以下替代方案:

Department
----------
DepartmentID (PK) int NOT NULL
ParentDepartmentID (FK) int NULL …
Run Code Online (Sandbox Code Playgroud)

normalization foreign-key database-design

6
推荐指数
1
解决办法
2285
查看次数