我有两张医院系统表格
患者
(PK) ID - int (auto increments)
Name -varchar
surname -varchar
DOB - varchar
Email- varchar
Phone -varchar
(FK)address_ID
和 地址表
Address(ID)-int (auto increment)
Line1 - varchar
Line2 - varchar
city - varchar
state - varchar
每当我尝试注册新患者时,它都不会在患者表中包含地址ID。我有它的地址表和address_id链接到患者表的数据库图中的address_ID作为其外键,它一直给我一个错误说它的空。因此,如果它没有自动进入患者表,我该如何自动递增它以使其与地址表中的address_ID保持一致?
这是我用来插入表单中的值的代码。
string query1 = "insert into patient(name,surname,dob,email,phone) values (@pname, @psurname, @pdob, @pemail, @pphone)";
string query2 = "insert into patient_address(Line1,Line2,city,state) values (@pline1, @pline2, @pcity, @pstate)";
SqlCommand cmd1 = new SqlCommand(query1, con);
cmd1.Parameters.AddWithValue("@pname", pname.Text);
cmd1.Parameters.AddWithValue("@psurname", psurname.Text);
cmd1.Parameters.AddWithValue("@pdob", dob.SelectedValue);
cmd1.Parameters.AddWithValue("@pemail", pemail.Text);
cmd1.Parameters.AddWithValue("@pphone", pphone.Text);
SqlCommand cmd2 = new SqlCommand(query2, con);
cmd2.Parameters.AddWithValue("@pline1", pline1.Text);
cmd2.Parameters.AddWithValue("@pline2", pline2.Text);
cmd2.Parameters.AddWithValue("@pcity", pcity.Text);
cmd2.Parameters.AddWithValue("@cstate", pstate.SelectedValue);
con.Open();
cmd2.ExecuteNonQuery();
cmd1.ExecuteNonQuery();
con.Close();
如果有人可以提供某种指导,那将会有所帮助!感谢。
答案 0 :(得分:0)
address_ID是一个(FK)可以是Null或Not Null(你可以检查它是否允许接受null或不接受null(无法是否为空),所以检查(FK)是否接受为null <或者
在1:N关系中:
如果某些时候(FK)被接受为空,这意味着这里的一些患者没有地址(因此不需要)。
但如果(FK)不接受为空,那么所有患者都应该有一个地址,并且它不应该为空。
而且(PK)根本不应该为空。
因此,在您的情况下,我认为添加自定义constraints
或向IsAdressExist
表添加一个额外的列(patient
)
或者只是首先在address_table中添加一个添加行(例如,地址(ID)= - 1的空地址),然后为没有{{1的地址的患者设置默认值}}
或只设置(FK)address_ID =-1
Address(ID_FK)
如果要在地址表中添加新地址,并且需要使用相同的新地址作为患者表的FK,那么您需要(最简单的方法):
1-将新地址添加到地址表中。
2-从地址表中获取MAX Address_ID(PK)
3-使用max address_ID并将其作为FK插入患者表。
OR
您需要创建一个长查询,它将执行上面提到的相同的先前步骤。