假设我有一个包含id
,username
,password
,type
和linked_id
type
列指定该登录属于员工还是客户。
如果他们是员工,linked_id
是他们在员工表中的ID。
如果他们是客户,linked_id
是客户表中的ID。
直观地说,这似乎是一个坏主意,但除了处理外键约束外,我无法思考或不理由。
这也提出了另一个问题:在这样的情况下,FK约束总是很重要吗?
思想?
答案 0 :(得分:2)
最简单的解决方案是在数据库中添加一个额外的列,并使EmployeeId
和ClientId
更容易理解表格结构。
您还可能认为您在数据库设计中缺少实体。举个例子,如果员工也是客户呢?在这种情况下,现行制度将如何处理?
您可以拥有一个中间表来管理它并确定该人员的状态。
即。有表Login
。
字段:ID, username, password, type, PersonId
然后使用Person
和EmployeeId
的另一个表ClientId
,虽然我认为这会导致很多NULL
值,但它会支持上述情况描述。
作为补充说明,我不想查看现有的Login
表,识别linked_id字段,然后必须决定此列与哪个表相关,Employee
或{{1} }?
您也可以像@ randyh22建议的那样将其拆分,并完全删除Client
字段,并在子表(linked_id
和Login
中设置Employees
个标识符
重构:
登录表:LoginId,用户名,密码(确保经过哈希处理)
员工表:EmployeeId,Forename,Surname,LoginId
客户端表:ClientId,Forename,Surname,LoginId
答案 1 :(得分:2)
我认为你错误地考虑了你的桌面设计。我将登录信息放在一个表中,然后从相应的表中指向登录记录。换句话说,从employee表和clients表指向您的登录记录,而不是从登录记录指向客户或员工记录。这允许您拥有外键约束,并且不需要额外的“type”字段
举个例子:
然后,您固有地知道每个登录的“类型”是什么表存储数据。