mysql - 每周表的正确结构和索引

标签 mysql composite-primary-key primary-key-design

我需要一个表来存储每个用户每周的文本。
所以我想到了两种选择:
1)使用复合主键:

CREATE TABLE `WeeklyTxt` ( 
`Year` YEAR(4) NOT NULL , 
`Week` ENUM('1','2','3','4', ... ,'51','52','53') NOT NULL ,
`UserId` BIGINT NOT NULL ,
`WeekTxt` TEXT NOT NULL,
PRIMARY KEY (`Year`, `Week`, `UserId`)
) ENGINE = InnoDB;

2) 使用自增主键

CREATE TABLE `WeeklyTxt_2` ( 
`WeekTxtId` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`Year` YEAR(4) NOT NULL , 
`Week` ENUM('1','2','3','4', ... ,'51','52','53') NOT NULL ,
`UserId` BIGINT NOT NULL ,
`WeekTxt` TEXT NOT NULL
) ENGINE = InnoDB;

我不知道什么是更好的选择(以及为什么)

最佳答案

这取决于您通常会在表中进行的搜索!

通常我会使用一个简单的 PRIMARY KEY,然后我会添加另一个 KEY,就像您的 KEY 一样:(Year, Week, UserId)

关于mysql - 每周表的正确结构和索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36932687/

相关文章:

c# - 具有外键错误复合键的 Entity Framework

c# - Web 应用程序中基于混合字符和整数的标识符最佳实践

sql - 用于行版本控制的 RDBMS 主键设计

php - 数据库不会使用 php 表单更新值

language-agnostic - 如何设置mysql的语言环境?

python - 将 pandas 数据帧转换为具有复合键的稀疏键项矩阵

mysql - 在 Grails 中使用复合主键搭建 MySQL 表

mysql - 删除该键的记录后,自动重新分配 MySql 表中主键的值

mysql - 使用 MySQL 在 Apache2 中配置身份验证和授权

Mysql存储过程