我的一位同事创建了一个类似于以下的架构。这是一个简化的模式,仅包括解决此问题所需的部分。
系统规则如下:
架构是:
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)