簡體   English   中英

布爾字段作為唯一索引

[英]Bool field as a unique index

Bool字段可以成為唯一索引並與另一個表的索引一起用於外鍵關系嗎?

我認為它不能成為主鍵,但是唯一索引又如何呢? 每次我嘗試使其成為唯一索引時,都會將其轉換為tinyint。

編輯

所以我有一個SQL關系問題。 可以說,我有一個數據庫,希望保留有關個人信息的記錄。 現在,我已經建立了一個表格來處理這些信息。 好的,到目前為止很好。

通常,可以在表中發現重復信息,並將其刪除。 如果特定字段與另一行中的另一個字段具有相同的值,則該記錄被視為重復記錄。 示例:重復的電子郵件。

現在,我想在數據庫中創建另一個表,以跟蹤發現和刪除的每個重復項。 我對此的第一個想法是創建外鍵關系。 因此,我創建了一個dupes表並將其連接到person表。 該關系是具有“刪除”約束的簡單外鍵到主鍵關系。

現在雖然這可能起初是可行的,但出現了一個問題,即dupes表正在接收已刪除的記錄,即使由於它們是dupes而未刪除它們。 這是一個問題,因為即使我只是因為我不喜歡他們而決定從人員表中刪除該人員,他們仍然會存儲在dupes表中。

然后我想,為什么不在人員表中創建一個處置字段,並將其作為唯一或主鍵連接到我的dupes表的索引外鍵。 好吧,問題是唯一鍵必須具有唯一值,所以要對重復項進行多次處置,否則我不希望您無法使用。 另一種選擇是使處置字段成為主鍵。 但是,這有同樣的問題。

解決這個問題的正確關系是什么?

本質上,sql中的布爾值(或mssql中的位)是一個非常短的整數。 因此,基本上沒有理由不將其作為外鍵。 但是從設計角度來看,這沒有任何意義。

是的,BOOL字段可以是主鍵或唯一鍵。 在唯一鍵的情況下,可以將NULL設置為值。

關於TINYINT:MySQL不支持BOOL數據類型,它改用TINYINT。

從參考-BOOL,BOOLEAN:這些類型是TINYINT(1)的同義詞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM