[英]How do I relate a username table to equipment and employee tables?
我有一个包含多个表和关系的数据库。 我正在使用 Microsoft Access,但我的想法是使用 MySQL 迁移到我们的 Linux 服务器。
我有一张设备表(或任何具有 IP 地址的设备,例如笔记本电脑、服务器、交换机等)和另一张员工表(我的设计比这更复杂一些,但我简化了解释问题目的)。 我有另一个表用于存储用户名、密码、用户名角色和范围(本地、域、WordPress、电子邮件等)。
我在 SQL 中的问题的简化版本(忽略了不相关的字段):
CREATE TABLE employees (
IdEmployee INT NOT NULL,
EmployeeName VARCHAR(50),
EmployeeDepartment INT,
PRIMARY KEY (IdEmployee)
);
CREATE TABLE devices (
IdDevice INT NOT NULL,
DeviceType INT,
Brand INT,
Model VARCHAR(30),
PRIMARY KEY (IdDevice)
)
CREATE TABLE usernames (
IdUsername INT NOT NULL,
Username VARCHAR(20),
Password VARCHAR(20),
UserRole INT,
UserScope INT,
PRIMARY KEY (IdUsername)
)
Username
和Password
字段用于存储我们所有路由器、交换机和服务器和数据库的多个 root 用户的凭据。 我的设计问题是:员工有登录我们公司域的凭据,设备也有凭据。 但是设备和员工没有任何共同的字段,因此它们必须在单独的表中。 考虑到以下情况,我如何将usernames
名表与employees
和devices
相关联:
数据库本身比较复杂; 它涵盖了我们网络中所有用户和静态 IP 地址的完整资产清单和列表。
选项1:
创建两个相似的表,EmployeeUsernames 和 DeviceUsernames:
CREATE TABLE EmployeeUsernames (
IdUsername INT NOT NULL,
IdEmployee INT,
PRIMARY KEY (IdUsername),
FOREIGN KEY (IdEmployee) REFERENCES employees (IdEmployee),
FOREIGN KEY (IdUsername) REFERENCES usernames (IdUsername)
);
CREATE TABLE DeviceUsernames (
IdUsername INT NOT NULL,
IdDevice INT,
PRIMARY KEY (IdUsername),
FOREIGN KEY (IdDevice) REFERENCES devices (IdDevice),
FOREIGN KEY (IdUsername) REFERENCES usernames (IdUsername)
);
这允许没有用户名的情况以及您有多个用户名的情况。 如果需要,您可以添加检查约束或触发器,以在不同情况下强制执行有关用户名数量的任何特定规则。
选项 2:
您可以将两列放入用户名 - IdEmployee 和 IdDevice。 允许它们为空,然后使用检查约束或触发器来确保插入数据时填充一列或另一列,并且插入的值有效(即确保员工或设备存在)。
选项 3:
在用户名中添加两列 - UsernameOwner 和 UsernameOwnerType。 将 IdEmployee 或 IdUsername 值放入第一列,并使用第二列指示特定行链接到哪个表。 如上所述,使用检查约束或触发器来确保数据保持有效。
就我个人而言,我会选择选项 1 - 它是标准化的,对于其他人拿起数据库并试图了解它是如何结合在一起的来说就不那么奇怪了,但有些人真的很喜欢其他选项之一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.