![](/img/trans.png)
[英]Bad practice to create a foreign key constraint on primary key of the same table?
[英]Is it bad practice not to use foreign key
我有一對多關系的父子表。 我所做的就是創建了一個搜索方法,用戶可以從父表中找到ID,結果顯示在A label97上。 然后,他們將插入一個子記錄,並使用標簽中顯示的結果將兩個表鏈接起來。 所以我還沒有使用@@ identity做外鍵。 所以我的問題是我做的方法不好嗎? 因為結果在數據庫中看起來不錯。 這是我的代碼。 謝謝。
Main.cs
private void btnSearch2_Click(object sender, EventArgs e)
{
myCon.Open();
cmd = new OleDbCommand("SELECT * FROM EmployMainDetails WHERE EID = @EID", myCon);
cmd.Parameters.AddWithValue("EID", textBox2.Text);
try
{
dreader = cmd.ExecuteReader();
if (dreader.Read())
{
label97.Text = dreader["EID"].ToString();
}
else MessageBox.Show("No record found");
}
catch (Exception)
{
MessageBox.Show(" No Record");
}
finally
{
myCon.Close();
}
}
private void btnJNew_Click(object sender, EventArgs e)
{
EEmployDetails.JInsert(txtJobID.Text, label97.Text, cBEmpStatus.Text, ...);
}
EmployDetails.cs
這是我的插入方法
public static void JInsert(string ejobid, string eid, string employst,... )
{
var con = GetConnection();
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = (@"INSERT INTO EmploymentDetails (EJobID, EID, EmploymentStatus,...)
VALUES(@EJobID, @EID, @EmploymentStatus, ...)");
cmd.Parameters.AddWithValue("@EJobID", ejobid);
cmd.Parameters.AddWithValue("@EID", eid);
cmd.Parameters.AddWithValue("@EmploymentStatus", employst);
....
...
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
您的術語似乎很混亂。 您說您“尚未使用@@ identity完成外鍵”,但是您正在使用外鍵,否則父表和子表之間將沒有鏈接。
在您的情況下, EID
似乎是子表中的外鍵 ,與父表中的對應主鍵匹配。 每個子表也可以定義自己的主鍵 ,並且該主鍵可以是一個標識列 (Access稱為“ AutoNumber”字段),但這是另一回事。
因此,您已經在使用外鍵。 達倫在上面的評論中提到了“參照完整性”,這是一種確保子記錄始終具有相應的父記錄的機制。 這通常稱為“外鍵約束”,在Access中,可以通過在兩個表之間創建“關系”,然后選擇“強制引用完整性”選項來實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.