![](/img/trans.png)
[英]Update the primary key when a new row is inserted in a DataTable through a DataGrid
[英]Update primary key column of other rows when a row is deleted
在我的數據庫中,有一個表基本上包含問題及其選項和答案。 第一個字段是〜questionid~並且是主鍵,正如預期的那樣(我現在已經禁用了AUTOINCREMENT)。 我的客戶可能想要刪除一些問題。 這讓我有兩個選擇:
所有后續問題都向上移動,以便沒有空行。 此選項意味着這些問題將更改其問題ID
保持原樣,這樣就會有空行。 如果有一個新條目,它應該填充第一個空行。
我該如何實施其中任何一個? 實際上,我更喜歡第二種,但如果有人有不同意見,那就很受歡迎了。
我正在使用MySQL數據庫和C#。
您正在使用數據庫,因此您不必擔心這些問題。
SQL表中沒有“空”行的概念(好吧,如果所有列都為NULL,那么該行為空,但這里沒有關系)。 SQL表中的行本身並不是有序的。
行本身存儲在頁面上,這些頁面可能有或沒有額外的空間用於更多行。 當你想到一個空行時,這可能就是你想到的。
刪除行時,不會重新排列數據。 如果稍后添加新行,頁面上只有一些額外的空間。 如果在兩個現有行之間添加主鍵並且頁面已滿,則數據庫將頁面“拆分”為兩個。 另外兩頁有額外的空間。
但重要的是,這不是如何運作的。 您為應用程序使用關系數據庫的一個原因是,您可以添加和刪除行,而不必擔心它們的實際物理存儲。
如果您有一個包含大量事務的數據庫 - 刪除和插入 - 那么您可能希望定期重新排列數據,以使其更適合頁面。 但是,只有在存在大量此類交易時才需要進行此類優化。
但有一件事。 您的應用程序不應該依賴於主鍵是順序的,因此它可以正確處理刪除。
我不確定你是如何實施的。 我會這樣做的,
questions
question_id - pk
question
answers
answer_id - pk
answers
question_answer
question_id
answer_id
這將帶來更多優勢。 很多問題會有相同的答案。 如果可以刪除問題,則將其與來自question_answer表的答案一起刪除
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.