sách gpt4 ăn đã đi

Mysql Datatype - Enum or not to Enum, Enum 可以为空吗?

In lại Tác giả: IT Lão Cao 更新时间:2023-10-29 00:16:00 30 4
mua khóa gpt4 giày nike

我有大型数据库(数百万行),我正在尝试为 2 个字段的数据类型做出最佳选择。我制作的大部分内容都是 varchar 或 INT。但是,我想知道 Enum 是否是最好的方法的 2 个字段。

字段 1第一个字段是性别,我的数据目前是“男性”或“女性”,也可能是空白的。我最初是这样设置的:

GENDER VARCHAR(6) NOT NULL

这是最好的方法吗,还是将其设置为:

GENDER ENUM ('Male', 'Female') NOT NULL

我是否需要将其设置为 NOT NULL 以允许留空,或者我是否需要添加留空,即

GENDER ENUM ('Male', 'Female', '') NOT NULL

更不用说,我正在考虑将整个字段转换为 M 或 F。

字段 2:我有几乎相同的事情要考虑,除了州字段,它可能包含 52 个值(50 个州、DC,加上空白)。

我想最大的问题是 - 所有这些 Enum 东西都值得吗?我的数据库有数百万行,所以一切都是一个因素,但我应该只对状态使用 VARCHAR(2) 而不是 ENUM。

câu trả lời hay nhất

我通常应用于此类情况的经验法则是不使用 MySQL ENUM。使用它们会产生维护问题,尤其是在添加/删除/重命名某些值时。在 InnoDB 中,重命名和删除枚举值对大表来说很繁重。添加一个值不是(只要你不在中间添加它)。

因为您可能确实希望将此列保留在上下文中,并且不允许任何值超出此上下文,恕我直言,最好的方法是使用 INT,并将其作为外键连接到值表(列 id,值)。

您将能够轻松地在此表中添加和重命名值,并且在您删除值之前,FK 将强制处理主表中具有此值的任何现有记录。

要轻松读取数据,您只需要一个简单的 JOIN。

注意:由于性别是最终确定的,您可能希望将其保留为 VARCHAR(1) 或像 Johan 建议的那样使用 ENUM,但谁知道呢?您可能希望在未来支持变性人和双性人。不开玩笑。

关于Mysql Datatype - Enum or not to Enum, Enum 可以为空吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7667729/

30 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress