我正在构建一个系统,我们应该拥有一个包含组织,位置,部门和用户的数据库。它们按照您的预期连接:
但是:一个部门可以跨越多个地点。
直观地说,我会按如下方式创建数据库: 您在上面看到的结构问题是BUT;不可能有一个跨越两个地点的部门。我认为这不是一个真正的问题,因为我可以简单地为两个位置创建相同的部门。如果有这个部门的管理员,我可以简单地让他在两个地方管理。
一位程序员提出了不同的结构:
他是这种结构的忠实粉丝,因为他说跨越任何事物的方式更灵活。我的问题在于,在手动读取数据库时它的可读性较差,而且在处理代码时我会更加困惑。
我的问题是;你更喜欢哪种结构?这最后一个结构的最大优点是什么?这种情况经常使用吗?欢迎所有提示!
答案 0 :(得分:0)
假设:组织有多个部门,部门有多个位置,用户在该部门的一个位置为一个部门工作。
这是我的快速草图:
CREATE TABLE Users
( user_id INTEGER NOT NULL UNIQUE );
CREATE TABLE Organizations
( org_id INTEGER NOT NULL UNIQUE );
CREATE TABLE Departments
( dep_id INTEGER NOT NULL UNIQUE );
CREATE TABLE Locations
( loc_id INTEGER NOT NULL UNIQUE );
CREATE TABLE OrgDepartments
( org_id INTEGER NOT NULL UNIQUE
REFERENCES Organizations ( org_id ),
dep_id INTEGER NOT NULL UNIQUE
REFERENCES Departments ( dep_id ) );
CREATE TABLE DepartmentLocations
( dep_id INTEGER NOT NULL UNIQUE
REFERENCES OrgDepartments( dep_id ),
loc_id INTEGER NOT NULL
REFERENCES Locations ( loc_id ),
UNIQUE ( loc_id, dep_id ) );
CREATE TABLE UserLocations
( user_id INTEGER NOT NULL UNIQUE
REFERENCES Users ( user_id ),
dep_id INTEGER NOT NULL,
loc_id INTEGER NOT NULL,
FOREIGN KEY ( loc_id, dep_id )
REFERENCES DepartmentLocations ( loc_id, dep_id ) );