2013-08-16 66 views
0

我正在處理一個簡單的訂單HTML表單,我不確定將數據存儲在數據庫中的最佳方式是什麼。數據庫設計;我應該使用數字還是描述性文字?

可以說,我有一個表格,我問用戶:「你怎麼想訂購到交付」

  • 發送給我
  • 發送數字
  • 在商店

把它撿起來使用單選按鈕,他們可以選擇任何一個。我的問題是,如何將其存儲在數據庫中? value應該是什麼?

<input type="radio" name="delivered" id="delivered" value="">

我可以用一個描述性文字senddigitallypickup這個保存爲varchar或者我可以將其保存爲int - 123

整數我刪除了拼寫錯誤的可能性,它甚至可能更快(?)。缺點是;我必須記住每個價值的含義。 「2皮卡數碼?」

+0

某些數據庫系統(例如MySQL我認爲)支持枚舉類型。你正在設計一個特定的數據庫系統還是更抽象? –

回答

2

數據庫首先應該關心存儲數據。數據如何呈現給用戶應該只是次要的問題。

因此,在你的情況下,使用一個整數與CHECK (field IN (...))約束(或可能在您的DBMS中可用枚舉),並確保每個可能的值都正確記錄。這將在數​​據庫級別上實現完整性和性能(小一般更快)。最重要的是,這可以由客戶端代碼自然地用於區分單選按鈕,而不是使用本地定義的整數/枚舉值的字符串,然後需要將其轉換爲「DB值」。


當你這樣做,你可以考慮是否還需要任何集中存儲演示相關的數據。例如:

  • 是否希望客戶端能夠自動更改單選按鈕標籤?
  • 您是否想集中實施本地化機制?
  • 等...

在這樣的情況下,你通常會創建一個額外的「查找」表提供任何必要的額外演示數據,列出所有有效的整數值在一起。然後,「主」表將對查找表具有FOREIGN KEY。

1

一個典型的設計是將一個單獨的表,DeliveryTypes說,其中包含1 =發送,2 =數字等的映射。然後,您將有一個從訂單表的外鍵到此表的數字列。因此,您只需在Order表中存儲數字,但您不必親自記住映射。

例如爲:

CREATE TABLE DeliveryTypes (
    DeliveryTypeID int not null PRIMARY KEY, 
    Description varchar(20) not null 
) 

INSERT INTO DeliveryTypes (DeliveryTypeID,Description) VALUES 
(1,'Send'), 
(2,'Digital'), 
(3,'Pickup') 

CREATE TABLE Orders (
    /* Various columns for Orders */ 
    DeliveryTypeID int not null, 
    constraint FK_Orders_DeliveryTypes FOREIGN KEY (DeliveryTypeID) 
     references DeliveryTypes (DeliveryTypeID) 
) 

如果你沿着這條路走下去,儘量避免衝動創建One True Lookup Table

0

你可以考慮下。

您可以創建一個Enum,給出與您的id相對應的更具描述性的文本。
您還可以使用Id(1,2,3)和Text(Physical,Pickup)在數據庫中創建查找表。

如果您打算對ID進行數據庫查詢,最好有查找表選項,因爲您可以執行連接並返回有意義的選項而不僅僅是Id。

相關問題