Database design 数据库设计;我应该使用数字还是描述性文本?

Database design 数据库设计;我应该使用数字还是描述性文本?,database-design,Database Design,我正在开发一个简单的order HTML表单,我不确定将其存储在数据库中的最佳方式是什么 假设我有一个表单,其中我询问用户: 您希望如何订购 把它寄给我 以数字方式发送 到商店去拿 使用单选按钮,他们可以选择其中一个。我的问题是,如何将其存储在数据库中?价值应该是多少 我可以使用描述性文本发送、数字拾取并将其保存为varchar,也可以将其保存为int-1、2、3 使用整数,我消除了打字错误的可能性,而且可能会更快。缺点是;我必须记住每个值的含义。2是皮卡还是数码卡 典型的设计是有一个单独的表,

我正在开发一个简单的order HTML表单,我不确定将其存储在数据库中的最佳方式是什么

假设我有一个表单,其中我询问用户:

您希望如何订购

把它寄给我 以数字方式发送 到商店去拿 使用单选按钮,他们可以选择其中一个。我的问题是,如何将其存储在数据库中?价值应该是多少

我可以使用描述性文本发送、数字拾取并将其保存为varchar,也可以将其保存为int-1、2、3


使用整数,我消除了打字错误的可能性,而且可能会更快。缺点是;我必须记住每个值的含义。2是皮卡还是数码卡

典型的设计是有一个单独的表,比如DeliveryTypes,其中包含1=send、2=digital等的映射。然后,您将有一个从Order表到该表数字列的外键。因此,您只需要在Order表中存储数字,但不必自己记住映射

例如:


如果您确实这样做,请尽量避免创建

的冲动。典型的设计是有一个单独的表,DeliveryTypes表示,其中包含1=send、2=digital等的映射。然后,您将有一个从Order表到该表数字列的外键。因此,您只需要在Order表中存储数字,但不必自己记住映射

例如:


如果你沿着这条路线走下去,尽量避免产生

< P>的冲动。你可以考虑以下内容:

您可以创建一个枚举,该枚举提供与您的id相对应的更具描述性的文本。 您还可以在数据库中创建一个Id为1、2、3和文本Physical的查找表


如果你要对ID做数据库查询,最好有查找表选项,因为你可以做一个连接并带回有意义的选项而不是ID。

你可以考虑以下内容:

您可以创建一个枚举,该枚举提供与您的id相对应的更具描述性的文本。 您还可以在数据库中创建一个Id为1、2、3和文本Physical的查找表


如果要对Id执行数据库查询,最好使用“查找表”选项,因为您可以执行连接并返回有意义的选项,而不仅仅是Id。

数据库首先应该关心存储数据。数据如何呈现给用户只是次要的问题

因此,在您的情况下,请在。。。约束或枚举(如果在DBMS中可用),并确保正确记录每个可能的值。这将对完整性和性能都有好处,在数据库级别通常更小更快。除此之外,客户端代码自然可以使用它来区分单选按钮,而不是使用本地定义的整数/枚举值字符串,这些字符串随后需要转换为DB值

之后,您可以考虑是否还需要任何集中存储的呈现相关数据。例如:

您希望客户端能够自动更改单选按钮标签吗? 是否要集中实施本地化机制? 等
在这种情况下,您通常会创建一个附加的查找表,列出所有有效的整数值以及任何必要的附加表示数据。然后,主表将有一个指向查找表的外键。

数据库首先应该关心存储数据。数据如何呈现给用户只是次要的问题

因此,在您的情况下,请在。。。约束或枚举(如果在DBMS中可用),并确保正确记录每个可能的值。这将对完整性和性能都有好处,在数据库级别通常更小更快。除此之外,客户端代码自然可以使用它来区分单选按钮,而不是使用本地定义的整数/枚举值字符串,这些字符串随后需要转换为DB值

之后,您可以考虑是否还需要任何集中存储的呈现相关数据。例如:

您希望客户端能够自动更改单选按钮标签吗? 是否要集中实施本地化机制? 等
在这种情况下,您通常会创建一个附加的查找表,列出所有有效的整数值以及任何必要的附加表示数据。然后,主表将有一个指向查找表的外键。

一些数据库系统,例如MySQL,我认为支持枚举类型。您是为特定的数据库系统设计还是更抽象地设计?一些数据库系统,例如MySQ 我想我支持枚举类型。您是为特定的数据库系统设计还是更抽象地设计?
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)
)