Mysql 在相关表上设置主键以节省存储空间的方法
我有一个关于关系数据库中主键的问题。假设我有以下表格: 盒子Mysql 在相关表上设置主键以节省存储空间的方法,mysql,sql,primary-key,Mysql,Sql,Primary Key,我有一个关于关系数据库中主键的问题。假设我有以下表格: 盒子 身份证 箱名 箱形物品 身份证 项目名称 属于\u框\u id(外键) 我们还假设我打算每天储存数百万件物品。我可能会对BoxItems.Id使用bigint或guid 我所想的,我需要你的建议,是用顺序的TinyInt编号代替盒子项目的Bigint Id,每个项目识别的是所属盒子Id和TinyInt行的组合(例如,项目编号) 因此,现在我们得到的不是上面提到的: 箱形物品 属于\u盒\u id 项目序列号[TINYINT]
- 身份证
- 箱名
- 身份证
- 项目名称
- 属于\u框\u id(外键)
bigint
或guid
我所想的,我需要你的建议,是用顺序的TinyInt
编号代替盒子项目的Bigint Id,每个项目识别的是所属盒子Id和TinyInt行的组合(例如,项目编号)
因此,现在我们得到的不是上面提到的:
箱形物品
- 属于\u盒\u id
- 项目序列号[TINYINT]
- 项目名称
Items.Insert(1,1, "my item 1");
Items.Insert(1,2, "my item 2");
因此,我可以使用tinyint并节省大量磁盘空间,而不是使用bigint或GUID
我想知道这种方法的利弊。我正在使用MySQL和ASP.NET 4.5开发我的应用程序,我建议为这两种方法编写一个简单的测试,比较性能、磁盘空间和易实现性,并做出判断。你的两个建议都是合理的,我怀疑在性能上会有很大的差异,但最好的办法是尝试一下,然后你就会确定。仔细想想,“盒子/内容”问题和“订单/商品”问题之间其实没有太大的区别 对于MySQL,您可能会使用无符号整数和无符号tinyint。没有令人信服的理由让数据库避免负数,但开发人员应该依赖于
确保256个值足够。在一个每天有数百万行的表中,纠正错误可能需要花费高昂的代价。您需要解释如何处理数据。物理数据结构由应用程序需求驱动。毕竟,如果你想节省大量空间,根本不要存储任何东西。我从你的答案中删除了签名,它们不应该包含在答案中,但请随意将其放在你的个人资料页上。
create table boxes (
box_id integer primary key,
box_name varchar(35) not null
);
create table boxed_items (
box_id integer not null references boxes (box_id),
box_item_num tinyint not null,
item_name varchar(35) not null
);