Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 在RDBMS中以字节码存储数据_Database Design_Rdbms - Fatal编程技术网

Database design 在RDBMS中以字节码存储数据

Database 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) ); 该表表示在开始日期和结束日期之间

我有以下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)
);
该表表示在开始日期和结束日期之间的工作日重复的一组类。我想在此表的一列中存储组重复的日期

我提出了三个解决方案:

  • 为每个工作日制作7列,并存储一个标记,将其命名为“重复性工作日”。这将创建大量空值

  • 制作一个单独的表,并将其作为一对多关系进行关联

  • 将日期存储在某些代码(例如字节码)中,如下所示: 列名:
    recusing\u days char(7)
    。这将存储一个7个字符的字符串,如
    0000010
    。此代码表示课程将在每个星期六的
    开始日期
    结束日期
    之间重复

  • 我想问哪种解决方案是最有效的,考虑到第三种解决方案需要计算。此外,如果有任何其他有效的解决方案


    谢谢。

    这取决于您所说的“高效”是什么意思,以及您的数据将如何使用

    如果你的目标是可读性,我每周每天都会有一个专栏。一个试图确定课程是否在周一开课的开发人员只需查看“周一”专栏;所有的查询都将是非常描述性和易于理解的。然而,事实上,您的day列将具有稀疏的数据,并且基数较低,这意味着它们不利于索引;如果要存储数百万行,这可能是个问题

    如果你的目标是绝对速度,我会使用整数来存储天数,并使用位运算;大多数RDBMS引擎都非常擅长这一点,整数字段可能更“索引友好”,因为您可能有一个合适的值分布。但是,查询不太清晰,您可能会遇到愚蠢的错误(这一周是从周日还是周一开始?)

    这是非常快的,因为每个日期组合都相当于一个不同的唯一整数,这反过来又允许对列进行有效的索引。初始计算(将“星期一和星期二而不是星期三和(星期四或星期五)转换为整数”)只发生一次,而且速度非常快。然而,将这个整数与“classes”表中的数百万条记录进行比较(我从您的评论中得到了数百万条记录,但这似乎是一个非常大的数字…)是一个非常耗时的部分

    我当然不会将您的位标志存储在字符串中,这样您就失去了内置位逻辑的好处


    单独的表可能很容易阅读,但可能会导致尴尬的查询-查找所有周一和周二运行的课程,而不是周三运行的课程需要几个join/in子句。这可能更难粘合到前端(尤其是在使用ORM的情况下).

    由于每天有这么多的类,因此将有数百万行。因此,位逻辑是解决方案。但不是存储和int(7),就像在7个代表每天的位置一样,我能用更少的数字来做吗?比如应用一个算法,任何类似的事情都已经实现了?另外,存储或检索都需要计算。这会不会太大的开销?比如UI选择日期的名称并将它们存储为整数。我要寻找的是性能点当然可以。所谓高效,我的意思是存储和检索应该是快速的。那么,哪一种速度最快。你希望通过一种“使用更少位置的算法”实现什么"? 位图直接转换为整数,逻辑非常清晰,搜索性能非常好。将一周中的几天转换为位图的逻辑并不复杂或缓慢。。。