我能够将连接消除工作用于简单的情况,例如一对一的关系,但不能用于稍微复杂的场景.最后我想尝试锚建模,但首先我需要找到解决这个问题的方法.我正在使用Oracle 12c企业版第12.1.0.2.0版.
我的测试用例的DDL:
drop view product_5nf;
drop table product_color cascade constraints;
drop table product_price cascade constraints;
drop table product cascade constraints;
create table product(
product_id number not null
,constraint product_pk primary key(product_id)
);
create table product_color(
product_id number not null references product
,color varchar2(10) not null
,constraint product_color_pk primary key(product_id)
);
create table product_price(
product_id number not null references product
,from_date date not null
,price number not null
,constraint product_price_pk primary key(product_id, from_date)
);
Run Code Online (Sandbox Code Playgroud)
一些示例数据:
insert into product values(1);
insert …
Run Code Online (Sandbox Code Playgroud) 什么是存储日期时间的实用方法,以便我可以让用户查看/查询自己当地时间的数据,同时保留有关原始日期时间的信息.
基本上,用户希望能够查询(从他们自己的本地时间)从各个时区的系统收集的数据.但偶尔,他们想知道数据是在原始系统中的18:00创建的.当来自世界不同地区的用户就同一事件进行通信时,它会有所帮助.
User1: What? We don't have any data for 20:00
User2: Dude, it says 20:00 right there on my screen.
User1: Wait, what timezone are you? What's the UTC-time?
User2: What is UTC? Is that something with computers?
User1: OMFG! *click*
Run Code Online (Sandbox Code Playgroud)
我正在寻找有关如何存储数据的建议.
我正在考虑以UTC格式存储所有日期时间,并添加一个包含原始时区名称的附加列,其形式允许我使用mysql CONVERT_TZ
或Java中的对应物.然后,应用程序将用户输入的日期转换为UTC,我可以轻松查询数据库.所有日期也可以轻松转换为应用程序中的用户本地时间.使用原始时区列我也可以显示原始日期时间.
但是,这意味着对于我所拥有的每个日期时间,我需要一个额外的列...
start_time_utc datetime
start_time_tz varchar(64)
end_time_utc datetime
end_time_tz varchar(64)
Run Code Online (Sandbox Code Playgroud)
我在这里走在正确的轨道上吗?
是否有人使用这些数据分享他们的经验?
(我将使用MySQL 5.5 CE)
更新1
数据将以xml文件的形式提供,其中每个条目在某个本地时区具有日期时间.因此,只有一个插入过程,在一个地方运行.
一旦加载到数据库中,它将在一些Web应用程序中呈现给不同时区的用户.对于大多数用例,感兴趣的数据也来自与查看数据的用户相同的时区.对于一些更复杂的用例,一系列事件是互连的并跨越多个时区.因此,用户希望能够谈论事件,以便在另一个时间调查可能的原因/后果.不是UTC,不是他们当地的时间.
问候.
我有一个我觉得很贵的java方法,我试图用数学表达式替换它的一些调用.问题是,我吮吸数学.我的意思是真的很糟糕.
以下应该解释我试图利用的模式.
f(x) -> y
f(x*2) -> f(x)+1
Run Code Online (Sandbox Code Playgroud)
也就是说,每当我将x的值加倍时,y的值将比x/2的值大1.以下是一些示例输出:
f(5) -> 6
f(10) -> 7
f(20) -> 8
f(40) -> 9
f(80) -> 10
f(160) -> 11
f(320) -> 12
Run Code Online (Sandbox Code Playgroud)
我目前的做法是蛮力.我循环遍历X并测试在我达到5之前我可以将它减半的次数,最后我添加6.这样做并且比调用原始方法更快.但我一直在寻找一种更"优雅"或更便宜的解决方案.
接受的答案是那个设法帮助我但没有指出我是多么愚蠢的人:)
(标题可能很糟糕,因为我不知道我在找什么)
我正在设计一个系统,它将使用jms和一些消息传递软件(我倾向于使用ActiveMQ)作为中间件.将有少于100个代理,每个代理每天最多推送5000条消息.
每条消息的有效负载大约为100字节.我希望大约有一半(2500)的消息聚集在午夜左右,而另一半则在白天有些均匀分布.上面给出的数字都是我所期望的更高端.(是的,我可能会在不久的将来吃掉那个声明).
有一种类型的消息,其中有效载荷将相当大,例如在5-50mb的范围内.这些消息每天只会从每个代理发送几次.
我的问题是: 这会以任何方式引起我的问题,还是通过消息队列发送大量数据是完全正常的?
例如,它会在处理较大的消息时减少吞吐量(较小的消息排队)吗?
或者消息队列会阻塞更大的消息?
或者我应该以不同的方式处理这个问题,比如通过jms发送数据的位置,让终端接收器在其他地方获取数据?(我希望不会因为耦合,安全问题和额外配置而导致特殊情况).
我对jms的实用细节完全不了解,所以请告诉我是否需要提供更多详细信息.
编辑: 我接受了Andres真正棒极了的回答.继续发布建议和意见,我会保持一切有用的东西.
我有超过100万个插入查询要在Oracle SQL Developer中执行,这需要花费很多时间.有没有办法优化这个.
我试图从中提取本地时间timestamp with time zone
,但是由于我不熟悉这种数据类型,因此得到了意外的结果。
我期望22
作为下面每一行的输出。
with my_data as(
select to_timestamp_tz(ts, 'yyyy-mm-dd hh24:mi:ss tzh:tzm') as tsz
from (select '2017-12-07 22:23:24 +' || lpad(level, 2, '0') || ':00' as ts
from dual connect by level <= 10
)
)
select dbtimezone
,sessiontimezone
,tsz
,extract(hour from tsz)
from my_data;
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,我该怎么做才能从带有时区的时间戳中提取本地时间?
嗨我被困在一个oracle查询,其中我想根据当前年份检索前两年的数据,就像这是2013年所以我想要检索2011年和2012年的所有记录我已经完成了以下查询但是我被困在日期格式我是oracle的新手,这里是查询
Select
to_date(stage_end_date,'yy') Years,SUBPRODUCT Product,sum(OFFER_COUNT) SumCount
,sum(offer_amount)SumAmount
from stage_amt
and
Offer_amount !=0
and
to_date(stage_end_date,'yy')
between to_char( sysdate, -2 ) and to_char( sysdate)
group by to_date(stage_end_date,'yy'),SUBPRODUCT
order by Years asc;
Run Code Online (Sandbox Code Playgroud)
得到此错误ORA-00932:不一致的数据类型:预期DATE得到NUMBER 00932. 00000 - "不一致的数据类型:预期%s得到%s"任何人都可以帮我做什么
问候