我正在处理一个简单的订单HTML表单,我不确定在数据库中存储它的最佳方法是什么。
假设我有一个表格,我问用户:
“你想怎么命令交付?”
使用单选按钮,他们可以选择其中一个。我的问题是,如何将其存储在数据库中? value
应该是什么?
<input type="radio" name="delivered" id="delivered" value="">
我可以使用描述性文字send
,digitally
,pickup
并将其保存为varchar
,或者我可以将其另存为int
- { {1}},1
,2
。
使用整数我删除了拼写错误的可能性,甚至可能更快(?)。下行是;我必须记住每个值的含义。 “3
取件或数字?”
答案 0 :(得分:2)
数据库首先应该关心存储数据。数据如何呈现给用户应该只是次要问题。
因此,在您的情况下,将整数与CHECK (field IN (...))
约束结合使用(或者如果在DBMS中可用,则可能使用枚举),并确保正确记录每个可能的值。这将有利于数据库级别的完整性和性能(通常更快)。最重要的是,客户端代码可以自然地使用它来区分单选按钮,而不是使用本地定义的整数/枚举值字符串,然后需要将其转换为“DB值”。
之后,您可以考虑是否还需要任何集中存储的与演示相关的数据。例如:
在这种情况下,您通常会创建一个额外的“查找”表,列出所有有效的整数值以及必要的任何其他演示数据。然后,“主”表将具有朝向查找表的FOREIGN KEY。
答案 1 :(得分:1)
一个典型的设计是有一个单独的表,DeliveryTypes说,它包含1 = send,2 = digital等的映射。然后,你将有一个从Order表到该表的数字列的外键。因此,您只需在Order表中存储数字,但您不必自己记住映射。
E.g:
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
的冲动答案 2 :(得分:0)
您可以考虑以下内容。
您可以创建一个Enum,它会提供与您的ID相对应的更具描述性的文字 您还可以使用Id(1,2,3)和Text(物理,拾取)在数据库中创建查找表。
如果您打算对Id进行数据库查询,最好使用查找表选项,因为您可以进行连接并带回有意义的选项而不仅仅是Id。