小编Sea*_*een的帖子

Oracle:如何查询分层表?

背景

这是为了构建我们将用于报告的一些视图。

我有一个位置表,关键字段是 "location" 和 "parent"

这两个字段创建的结构在级别上是沿着公司名称 --> 校园名称 --> 建筑物名称 --> 楼层名称 --> 房间名称。在这种情况下,公司名称保持不变,校园名称保持不变。

位置的结构通常如下所示:

                                 +-----------+
                                 | Org. Name |
                                 +-----+-----+
                                       |
                                 +-----v-----+
           +--------------------+|Campus Name|+---+--+-------------+
           |                     +--+--------+    |                |
           |                        |             |                |
           |                        |             |                |
        +--+-----+           +------+-+        +--+----+       +---+---+
    +--+| BLDG-01|+--+       | BLDG-02|        |BLDG-03|       |Grounds|
    |   +--------+   |       +--------+        +-------+       +-------+
  +-+------+   +-----+--+
  |Floor-01|   |Basement+-------+
  +-+------+   +--------+       |
    |                           |
    |                           |
    | +----------+      +-------+--+
    +-+Room 1-001|      |Room B-002|
      +----------+      +----------+
Run Code Online (Sandbox Code Playgroud)

每个位置都链接回其父位置,最终是组织名称。目前,只有一个组织和一个校区。

目标

  • 我希望能够在“建筑物”级别查询任何给定位置下的所有位置。这样我就可以返回诸如在给定建筑物内的任何位置执行了多少工单之类的信息。 …

oracle query hierarchy view

10
推荐指数
2
解决办法
7335
查看次数

对于这个特定的设计(调查),我应该使用 SQL 还是 NoSQL?

构建一个小型 Web 应用程序以创建带有默认问题和响应列表的满意度调查。该应用程序适用于一小部分人(最多 5,000 人),并在工作订单完成后发送调查问卷。

鉴于小尺寸和相对简单的要求,我想我可以使用 SQL 或 NoSQL 解决方案(我可以轻松访问两者)。

实体类型

  • 调查模板(可能是其中的 3 个)
  • 问题(每个调查模板多个问题)
  • 问题类型(自由形式、特定选择答案等)
  • 调查回复(对特定调查模板上的问题的回复)

查询/报告需求

  • 显示个别调查的答复
  • 按某些方面显示一系列调查的汇总答复
    • 工单#(每个工单进行多项调查)
    • 工单的日期范围
    • 执行工作的组

变化/增长需求

  • 调查模板、模板问题和可能的响应可能会在任何给定时间发生变化(由客户决定并不断发展)
    • 可以想象在必要时创建一个新模板,但在适用的情况下不必这样做会很棒。
  • 无需担心存储方面的增长。这是目前正在使用(设计糟糕的)Access DB 完成的,因此我们在这里不讨论任何主要内容。

其他需求

  • 如果响应低于某个阈值(例如 3 分或低于 5 分),结构应该能够满足需要更多信息/注释的要求

堆栈注意事项

  • 这是在 Microsoft ASP.NET 堆栈(MVC4、WebAPI 等)上构建的

个人喜好/想法

  • 一段时间以来,我一直想更多地使用 NoSQL 数据库
  • 我更熟悉 SQL 数据库,但对于这样的事情,它似乎有很多架构和服务器开销
  • RavenDB 和 CouchDB 都因此吸引了我
    • Raven 更是如此,因为它构建得非常好,可以与 .NET 和通过 HTTP 一起使用,但我不确定许可是否可行。
    • 也会考虑 MongoDB,但我认为直接的 JSON 文档可能比 BSON 更容易使用
  • 使用 NoSQL 解决方案(尤其是 RavenDB),在某种程度上,我的对象成为我的模式,因为我将它们持久化到数据存储中。我必须首先在 SQL Server 中构建该结构(除非我使用实体框架)。这是否为 NoSQL 带来了优势,还是考虑到了 EF 之类的东西?

对您的想法感兴趣并提供任何有助于某人做出客观决定的信息。

nosql oracle database-design

5
推荐指数
1
解决办法
2576
查看次数

SQL Server 视图是否根据提供给它们的表自动更新其数据类型?

有人错误地在数据库表中创建了一堆 nchar 字段。我注意到了这一点,在检查了这个问题之后,我们将这些字段移动到 nvarchar 类型并修剪里面的值。

在我的脚本中,我目前仅限于拉取具有 nchar 类型的表,假设由表提供的视图知道更新它们的值。这个假设是否正确,或者我也应该在这个列表中包含视图?

作为参考,当前形式的脚本如下(主要取自这个伟大的 SO 答案):

declare @tn nvarchar(128)
declare @cn nvarchar(128)
declare @ln int

declare @sql as nvarchar(1000)

declare c cursor for 
    select cols.table_name,cols.column_name,cols.character_maximum_length 
    from information_schema.columns cols
        inner join information_schema.tables tabs 
            on (cols.TABLE_SCHEMA = tabs.TABLE_SCHEMA and cols.TABLE_NAME = tabs.TABLE_NAME)
    where cols.data_type ='nchar' and tabs.TABLE_TYPE = 'BASE TABLE' 

open c
fetch next from c into @tn, @cn, @ln

while @@FETCH_STATUS = 0
begin

    set @sql = 'alter table ' + @tn + …
Run Code Online (Sandbox Code Playgroud)

sql-server datatypes view

4
推荐指数
1
解决办法
6032
查看次数

查询缺少一个日期;只发生在今天

我希望这应该是可重现的。

我在 Oracle 11g 上。我作为另一个查询的一部分使用的这个查询的行为很奇怪:

SELECT TRUNC(SYSDATE - ROWNUM) DATEITEM
                         FROM   DUAL
                         CONNECT BY ROWNUM <= 32
                         UNION
                         SELECT TRUNC(SYSDATE + ROWNUM) DATEITEM
                         FROM   DUAL
                         CONNECT BY ROWNUM <= 32
order by dateitem desc;
Run Code Online (Sandbox Code Playgroud)

这应该以降序返回今天日期前后 32 天。

它一直有效,一直有效,直到今天。

出于某种原因,这不会返回 9 月 26th。它从 25 号跳到 27 号。

我想不出这其中的韵律或原因。例如,这个查询确实在 25 日返回了 25 日(所以我没有证据表明它只遗漏了 sysdate,因为它昨天有效)。

我到底做错了什么?

oracle query oracle-11g

1
推荐指数
1
解决办法
185
查看次数