Mysql

具有多個 NULL 列的單個表與多個表

  • March 24, 2020

我讀過這個。但我不確定我是否理解正確或我的情況略有不同。

所以,這是我的情況:我有一個包含客戶送貨地址的表格,並且有兩種類型的送貨地址 - 主要送貨地址(每列都是必需的)和備用送貨地址(可選)。

這是我的delivery_info桌子:

id(PK) 
city_id(FK) 
area_id(FK)
recipient_name(NULL)
street_address(NULL)
contact_no(NULL)  

我的orders桌子:

id(PK)
delivery_info_id(FK)
alt_delivery_info_id(FK)
status
...

兩個地址的城市 ( city_id) 和地區 ( area_id) 將始終可用且必須相同,這意味著備用收貨地址必須與主要收貨地址位於同一城市和同一地區。但是其他 3 列 - recipient_name, street_address,contact_no是主要收貨地址所必需的,但對於替代收貨地址是可選的。

所以我的問題是我應該將這兩種類型的送貨地址分開在兩個不同的表中delivery_info,例如一個alt_delivery_infoOR 保持原樣???

沒有硬性規定。這是我在做出決定時使用的邏輯。

通常,將一系列東西(送貨地址)分佈在多個列中是很笨拙的。

我會拉出整個“傳遞”列集並為它們製作一個表格。這個新表中會有一兩行。

然後,我會採用以下方法之一:

計劃 A:在主表中,有兩列:

delivery INT UNSIGNED NOT NULL,
alt_delivery INT UNSIGNED  NULL, -- note Nullable

計劃 B:該delivery表將有一列包含 1 或 2,表示 1=preferred。(或類似的一些變體)。將該列包含在JOIN.

計劃 B 特別適用於電話號碼之類的東西,因為可以有任意數量的此類(手機、家庭、工作、傳真等)。另一方面,因為您今天delivery可能有一個相當強的限制,恰好是 1或 2 個地址。

在這兩種情況下,對位置或電話進行任何類型的重複數據刪除可能都不明智。那麼如果偶爾出現重複怎麼辦?畢竟同居是常事。

在稍微不同的案例中,賬單 UI 可能會詢問使用者“送貨地址是否與賬單地址相同?” 這使使用者可以選擇將兩者聯繫在一起。在這種情況下,主表有兩個非空列bill_tosend_to,它們可能連結到同一個 ,也可能不連結address

在“位置”表中,對城市、國家等進行“規範化”是很笨拙的。無論出於何種原因進行規範化都是不合理的:它不會節省太多空間,而且您不太可能需要更改拼寫在某個中心位置的城市/國家。(儘管捷克斯洛伐克)

引用自:https://dba.stackexchange.com/questions/261868