Database design 在RDBMS中以字节码存储数据
我有以下DDLDatabase design 在RDBMS中以字节码存储数据,database-design,rdbms,Database Design,Rdbms,我有以下DDL create table repeat_group( id int, start_date date. end_date date, createby int, createdon timestamp not null default current_timestamp, updatedby int, updatedon timestamp, primary key(id) ); 该表表示在开始日期和结束日期之间
create table repeat_group(
id int,
start_date date.
end_date date,
createby int,
createdon timestamp not null default current_timestamp,
updatedby int,
updatedon timestamp,
primary key(id)
);
该表表示在开始日期和结束日期之间的工作日重复的一组类。我想在此表的一列中存储组重复的日期
我提出了三个解决方案:
recusing\u days char(7)
。这将存储一个7个字符的字符串,如0000010
。此代码表示课程将在每个星期六的开始日期
和结束日期
之间重复谢谢。这取决于您所说的“高效”是什么意思,以及您的数据将如何使用 如果你的目标是可读性,我每周每天都会有一个专栏。一个试图确定课程是否在周一开课的开发人员只需查看“周一”专栏;所有的查询都将是非常描述性和易于理解的。然而,事实上,您的day列将具有稀疏的数据,并且基数较低,这意味着它们不利于索引;如果要存储数百万行,这可能是个问题 如果你的目标是绝对速度,我会使用整数来存储天数,并使用位运算;大多数RDBMS引擎都非常擅长这一点,整数字段可能更“索引友好”,因为您可能有一个合适的值分布。但是,查询不太清晰,您可能会遇到愚蠢的错误(这一周是从周日还是周一开始?) 这是非常快的,因为每个日期组合都相当于一个不同的唯一整数,这反过来又允许对列进行有效的索引。初始计算(将“星期一和星期二而不是星期三和(星期四或星期五)转换为整数”)只发生一次,而且速度非常快。然而,将这个整数与“classes”表中的数百万条记录进行比较(我从您的评论中得到了数百万条记录,但这似乎是一个非常大的数字…)是一个非常耗时的部分 我当然不会将您的位标志存储在字符串中,这样您就失去了内置位逻辑的好处
单独的表可能很容易阅读,但可能会导致尴尬的查询-查找所有周一和周二运行的课程,而不是周三运行的课程需要几个join/in子句。这可能更难粘合到前端(尤其是在使用ORM的情况下).由于每天有这么多的类,因此将有数百万行。因此,位逻辑是解决方案。但不是存储和int(7),就像在7个代表每天的位置一样,我能用更少的数字来做吗?比如应用一个算法,任何类似的事情都已经实现了?另外,存储或检索都需要计算。这会不会太大的开销?比如UI选择日期的名称并将它们存储为整数。我要寻找的是性能点当然可以。所谓高效,我的意思是存储和检索应该是快速的。那么,哪一种速度最快。你希望通过一种“使用更少位置的算法”实现什么"? 位图直接转换为整数,逻辑非常清晰,搜索性能非常好。将一周中的几天转换为位图的逻辑并不复杂或缓慢。。。