谷歌搜索定义要么返回面向列的数据库的结果,要么给出非常模糊的定义。
我的理解是宽列存储由列族组成,列族由行和列组成。所述系列中的每一行都一起存储在磁盘上。这听起来像是面向行的数据库存储数据的方式。这让我想到了我的第一个问题:
宽列存储与常规关系数据库表有何不同?这是我的看法:
* column family -> table
* column family column -> table column
* column family row -> table row
Run Code Online (Sandbox Code Playgroud)
这张来自Database Internals 的图片看起来就像两个普通表:
我对有什么不同的猜测来自这样一个事实,即沿边宽的列商店提到了“多维地图”。所以这是我的第二个问题:
宽列存储是否从左到右排序?意思是,在上面的例子中,行是先按Row Key,然后按Timestamp,最后按Qualifier?
我有一个递归查询,它确实扩展了这个Java猴子SQL知识的限制.现在它终于凌晨1点半了,现在可能是时候开始寻求帮助了.这是谷歌失败的少数几次之一.
表格如下:
Parent_ID CHILD_ID QTY
25 26 1
25 27 2
26 28 1
26 29 1
26 30 2
27 31 1
27 32 1
27 33 2
Run Code Online (Sandbox Code Playgroud)
我正在尝试获得以下结果,其中父项列出了下面的每个子项.注意qty的级联也是如此.
BASE PARENT_ID CHILD_ID QTY
25 25 26 1
25 25 27 2
25 26 28 1
25 26 29 1
25 26 30 1
25 27 31 2
25 27 32 2
25 27 33 4
26 26 28 1
26 26 29 1
26 26 30 2
27 27 …Run Code Online (Sandbox Code Playgroud) 考虑下面的数据结构,其中用户具有少量固定设置.
[Id] INT IDENTITY NOT NULL,
[Name] NVARCHAR(MAX) NOT NULL,
[Email] VNARCHAR(2034) NOT NULL
Run Code Online (Sandbox Code Playgroud)
[SettingA],
[SettingB],
[SettingC]
Run Code Online (Sandbox Code Playgroud)
将用户的设置移动到单独的表中是否正确,从而与users表创建一对一的关系?这是否比将用户存储在与用户相同的行中提供了任何真正的优势(明显的缺点是性能).
我在本地Postgres数据库中有3个表:
[myschema].[animals]
--------------------
animal_id
animal_attrib_type_id (foreign key to [myschema].[animal_attrib_types])
animal_attrib_value_id (foreign key to [myschema].[animal_attrib_values])
[myschema].[animal_attrib_types]
--------------------------------
animal_attrib_type_id
animal_attrib_type_name
[myschema].[animal_attrib_values]
--------------------------------
animal_attrib_value_id
animal_attrib_value_name
Run Code Online (Sandbox Code Playgroud)
在运行时我会知道animal_id.我需要运行SQL来更新animal_attribute_value_name与此项关联的内容,例如:
UPDATE
animal_attribute_values aav
SET
aav.animal_attribute_value_name = 'Some new value'
WHERE
# Somehow join from the provided animal_id???
Run Code Online (Sandbox Code Playgroud)
我可能不得不做一些嵌套SELECT或INNER JOIN在WHERE子句内部,但不知道如何做到这一点.提前致谢!
编辑:
假设我有一个animal包含以下值的记录:
[myschema].[animals]
--------------------
animal_id = 458
animal_attrib_type_id = 38
animal_attrib_value_id = 23
Run Code Online (Sandbox Code Playgroud)
相应的animal_attrib_value(id = 23)具有以下值:
[myschema].[animal_attrib_values]
--------------------------------
animal_attrib_value_id = 23
animal_attrib_value_name = …Run Code Online (Sandbox Code Playgroud) 尝试在Windows 7(64位)上安装Oracle Database 11g第2版时.
遇到错误后遇到(PRVF-3929)

它声明环境变量路径太长.要访问此变量,我在Windows中搜索"envir"并选择"为您的帐户编辑变量设置".据推测,它是系统的路径,而不是必须改变的用户.

我可以自行决定删除 - 自然删除扩展名会影响不同的语言编辑.为什么Oracle要求这个限制,这是否特定于Oracle的安装,还是使用oracle dbms的永久限制?
installation environment-variables rdms oracle11g system-variable
我试图看看我的理解JOINs是否正确.
对于以下查询:
SELECT * FROM tableA
join tableB on tableA.someId = tableB.someId
join tableC on tableA.someId = tableC.someId;
Run Code Online (Sandbox Code Playgroud)
RDMS基本上执行类似的伪代码如下:
List tempResults
for each A_record in tableA
for each B_record in tableB
if (A_record.someId = B_record.someId)
tempResults.add(A_record)
List results
for each Temp_Record in tempResults
for each C_record in tableC
if (Temp_record.someId = C_record.someId)
results.add(C_record)
return results;
Run Code Online (Sandbox Code Playgroud)
所以基本上更多的记录与同someId tableA有tableB和tableC,更记录了关系数据库管理系统具有扫描?如果所有3个表都有相同的记录someId,那么基本上对所有3个表进行全表扫描?
我的理解是否正确?
是否有一般的交叉RDMS,我可以在JDBC插入上自动生成密钥?例如,如果我有一个包含主键,id和int值的表:
create table test (
id int not null,
myNum int null
)
Run Code Online (Sandbox Code Playgroud)
并插入
PreparedStatement statement = connection.prepareStatement("insert into test(myNum) values(?)", Statement.RETURN_GENERATED_KEYS);
statement.setInt(1, 555);
statement.executeUpdate();
statement.close();
Run Code Online (Sandbox Code Playgroud)
我得到一个java.sql.SQLException:无法将值NULL插入列'id'.
我有一种感觉,这完全取决于RDMS.我们使用的是SQL Server 2005,我已经设置好了
CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 1) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
在桌子上没有运气.
我正在使用PHP开发Web应用程序.我用MySQL作为我的RDMS.对于RDMS工作的许多事情,许多问题可以通过规范化等解决.但有些情况对RDMS不起作用,因此设计了其他解决方案,如NoSQL.
我不清楚的是NoSQL哪种情况更合适.一些不同的NoSQL选项有何不同,哪种情况可能比另一种更好,哪些与PHP 5.3或更高版本兼容(API明智)?
所以我正在寻找一个我可以使用的NoSQL服务器软件列表(例如MySQL作为RDMS)以及为什么我会使用其中一个(任何混合动力车?).还有使用NoSQL而不是RDMS解决的问题的具体示例.
最后,我想知道NoSQL服务器在这种情况下是否会更好地工作:
数据表,其中每行可以具有不同的列/字段.一行可能有5列,另一行可能有5列完全不同,另一行可能有10列.但是在所有这些行中,只有一个主要的自动递增数字ID.数以百万计的"行".
(正如上面我假设NoSQL是完美的,因为它是一个对象的集合,而不是表中的行.不确定AI主键).
在RDMS中,您可以创建最常用的列,然后使用PHP的serialize/unserialize来存储其他列.但是当您必须对此"序列化数组"中存在的列运行报告时,这非常低效并且使事情变得复杂,例如,在名为"birthday_pledge"的列的所有行上的SUM(每行使用该行).
在我的情况下,除主键之外的每个 "列"都是自定义和用户定义的.但我需要能够在这些"列"上运行报告(总和,过滤器,搜索).因此,如果NoSQL不是解决方案,我唯一能想到的就是为用户创建自定义表(虽然可能会变得复杂).
我还想指出可扩展性(多个数据库服务器,冗余和故障转移)非常重要.
在工作中测试我的应用程序的QA部门使用他们共享的Oracle数据库.他们的案件发生了变化,事情变得非常毛茸茸.错误报告提交+我花时间只是为了找出测试用例已经改变=浪费时间.
我想要的是dev和qa都有我们自己的Oracle在我们的机器上运行的副本,所以我们可以保护我们的数据并追逐我们的尾巴......更少.
我理解的问题是,我们没有为所有这些许可证提供资金.使用开源数据库是行不通的,因为我们有各种各样的PL/SQL包和触发器,我确信这些包与Oracle联系在一起.
有没有人知道某种方式(或者可能是开源产品)来"伪造"Oracle数据库?根本没有性能要求.我不是指模拟对象(我们确实使用它进行单元测试),而是实际的"在端口上监听请求"RDMS.这是一个远景,但我不得不问.
据我的Intro教授说.对于数据库理论,没有任何例子表明何时出现这种情况,考虑到理论的一个特定部分,这似乎有点奇怪.
我正在寻找的仅仅是第四范式中的示例关系,并且可以执行第五范式分解.或者(这可能更有可能)对此的一些见解(我的老师没有),如果它实际上不可能创建,这似乎几乎是自相矛盾的......
我有两个表,即Table1和Table2
Table1
custId--custName--custAge
c1--c1name--32
c2--c2name--41
c3--c3name--41
Run Code Online (Sandbox Code Playgroud)
表2
custId--verified--custName
c1--Y--c1FullName
c2--N--c2FullName
Run Code Online (Sandbox Code Playgroud)
我需要连接 Table1 和 Table2,这样如果表 2 中验证的列是 Y,我需要来自 Table2 而不是 Table1 的 custName。
因此,所需的输出是:(如果该 custId 验证的列是 Y,则覆盖 Table2 中的 custName 列)
custId--custName--custAge
c1--c1FullName--32
c2--c2name--41
c3--c3name--41
Run Code Online (Sandbox Code Playgroud)
我写了以下查询,但没有给出正确的结果。请帮忙。
select T1.custId, NVL(T2.custName, T1.custName),T1.custAge
from Table1 T1
left join Table2 T2 on T1.custId=T2.custId and T2.verified='Y'
Run Code Online (Sandbox Code Playgroud) 我得到了717个SKU的清单,这些清单必须将“年销售额”和“已售出单位”的总值相加。我开发了一个代码,可以按年份搜索SKU并接收总金额。我想知道是否可以循环输入更多的SKU,这样我就不必逐个SKU逐一检查。
我熟悉Loop语句,但不是执行它们的最佳人选。想知道Microsoft SQL Server Management Studio 2017中是否有办法做到这一点。
我尝试过声明并重复代码,但是效率很低。
DECLARE @SDate date
SET @SDate = '01/01/2018'
DECLARE @EDate date
SET @EDate = '12/31/2018'
DECLARE @Sku varchar(20)
SET @Sku = 'SN1580'
SELECT SUM(Amount) AS EXPR1
FROM dbo.[Threshold Enterprises$Sales Invoice Line]
WHERE ([Shipment Date] BETWEEN @SDate AND @EDate) AND (No_ = N'SN1580')
SELECT SUM(Quantity) AS EXPR1
FROM dbo.[Threshold Enterprises$Sales Invoice Line]
WHERE ([Shipment Date] BETWEEN @SDate AND @EDate) AND (No_ = N'SN1580')
SELECT SUM(Amount) AS EXPR1
FROM dbo.[Threshold Enterprises$Sales Invoice Line]
WHERE ([Shipment …Run Code Online (Sandbox Code Playgroud) rdms ×13
sql ×6
database ×3
oracle ×3
sql-server ×3
mysql ×2
inner-join ×1
installation ×1
java ×1
jdbc ×1
join ×1
nosql ×1
oracle11g ×1
php ×1
postgresql ×1
recursion ×1
sql-update ×1