Database design 保持诚信
假设我有两张桌子 第一表empDatabase design 保持诚信,database-design,Database Design,假设我有两张桌子 第一表emp EmpID | EmpName|xyz...coloums 1. | Hrishi | 2. | Nikhil | 3. | Hrishi | 第二桌部 DeptId |EmpId |Deptname....Xyz coloum 1. |1 |computer emp和部门表之间存在一对多关系 现在我想调用一个存储过程,其中 empName将作为一个输入。此存储过程将在department表中插入empId,其中em
EmpID | EmpName|xyz...coloums
1. | Hrishi |
2. | Nikhil |
3. | Hrishi |
第二桌部
DeptId |EmpId |Deptname....Xyz coloum
1. |1 |computer
emp和部门表之间存在一对多关系
现在我想调用一个存储过程,其中
empName将作为一个输入。此存储过程将在department表中插入empId,其中empName=Hrishi。当然,这是不明确的
从emp表1或表3中选择哪个hrishi
我该如何处理这个senario?这会引起问题 插入外键引用时,应始终将外键值传递给存储过程……否则数据不能保证唯一
在您的情况下,存储过程应该采用EmpId而不是EmpName。调用代码可能必须修改才能处理存储过程……但这是每次都能得到正确结果的唯一方法。这会导致问题 插入外键引用时,应始终将外键值传递给存储过程……否则数据不能保证唯一
在您的情况下,存储过程应该采用EmpId而不是EmpName。调用代码可能必须修改才能处理存储过程……但这是每次都能获得正确结果的唯一方法。返回的顺序未定义
基本上不应该有重复项,因此应该对EmpName有唯一的约束。要么这样,要么编写代码来处理您正在描述的情况。它们返回的顺序未定义
基本上不应该有重复项,因此应该对EmpName有唯一的约束。或者编写代码来处理您正在描述的情况。根据您的用例,有两个选项:
有几个选项取决于您的用例:
答案是,您应该使用一个明确的存储过程输入,比如员工id,而不是员工姓名。在UI中,您允许用户按名称选择用户,包括足够的信息(如电子邮件、办公室号码等),以允许用户选择正确的用户。但是,您的程序在调用存储过程时将使用所选员工的id。答案是,您应该使用一个明确的存储过程输入,如员工id,而不是员工姓名。在UI中,您允许用户按名称选择用户,包括足够的信息(如电子邮件、办公室号码等),以允许用户选择正确的用户。但是,在调用存储过程时,您的程序将使用所选员工的id。作为一般规则,只要您有执行此操作的查询:
select <primary key> from <table> where <other column> = <value>
从其中选择=
这意味着
是唯一的。您需要在Emp.EmpName
上创建一个唯一的约束,并清理数据以符合该约束。清理数据的方式取决于您的业务需求。一般来说,每当您有一个执行此操作的查询时:
select <primary key> from <table> where <other column> = <value>
从其中选择=
这意味着
是唯一的。您需要在Emp.EmpName
上创建一个唯一的约束,并清理数据以符合该约束。如何清理数据取决于您的业务需求。主键的(唯一)用途是唯一标识表中的一行。在数据库或应用程序中,应该只有一个生成主键的位置。最简单的方法是使用自动递增字段
如果您遵循此步骤并将此示例放入2NF,您的问题将自行解决。- 从
表中删除Department
,它不属于那里EmpID
- 将
放入DeptID
表中。Employee
- 从
表中删除Department
,它不属于那里EmpID
- 将
放入DeptID
表中。Employee