我多次读到NOSQL数据库中的数据存储为非规范化.例如,考虑国际象棋游戏记录.它不仅可以包含参与国际象棋游戏的玩家ID,还可以包含该玩家的名字和姓氏.我想这样做是因为在NOSQL中无法进行连接,因此如果您只是复制数据,您仍然可以在一次调用中检索所需的所有数据,而无需手动应用程序级别处理数据.
我不明白的是,现在当你想要更新国际象棋选手的名字时,你必须编写一个查询来更新该玩家参与的国际象棋游戏记录以及该玩家的玩家记录.这似乎是一个巨大的性能开销,因为数据库必须搜索该玩家参与的所有游戏,然后更新每个记录.
数据是否经常像我的例子一样存储为非规范化?
我想知道将数组存储在数据库中是否真的很好?我倾向于使用json_encode而不是serialize,但只是想知道这是不是一个好主意.如果没有,那么我可以做一些小改动,然后用逗号破坏数组.
假设我有两个集合,每个集合的值彼此独立,但每个集合彼此相关.他们是photos和users.用户和照片之间存在一对多的关系.
非规范化数据的一个例子:
users:
{
"id": "AABC",
"name": "Donna Smith"
}
photos:
{
"id": "FAD4",
"description": "cute dog",
"user_id": "AABC", // This is the relationship
"user_name": "Donna Smith" // This is the denormalized value from the "users" collection
}
Run Code Online (Sandbox Code Playgroud)
photos当用户"AABC"将名称从"Donna Smith"更改为"Donna Chang"时,如何确保与集合中的文档保持一致?
作为非交易性的,我理解一致性将是最终的.
在更改用户"AABC"以更新user_id ="AABC"的所有照片后,简单(天真)实现可能会触发后台作业.在单次更新的情况下,这将很好.但这是一个多用户环境,并且会同时在各个方向上进行更新.例如,如果在照片的背景更新中途将"Donna Smith"更改为"Donna Chang",用户"AABC"的名称将更改为"Donna Smith"?
在线搜索,我看到很多关于如何建模非规范化数据的讨论.但是关于如何维护它的任何讨论似乎都被轻视为"你还需要更新所有相关记录".在这种情况下,是否有任何NoSQL系统为您提供繁重的工作?任何框架或实用程序?
我已经阅读了Thomas Wanschik关于"物化视图"主题的精彩博客文章以及这个场景的背景更新.但我担心:
我试图在Oracle中使用SQL获取逗号分隔字符串中的第n个元素.
到目前为止我有以下内容..
SELECT regexp_substr(
'100016154,5101884LT00001,,,,,100000010892100000012655,L,SEI,5101884LT00001,1,SL,3595.03,00,2,N,N,G,N',
'[^,]+',
1,
7)
FROM dual;
Run Code Online (Sandbox Code Playgroud)
但是当元素为空时它不起作用,即任何人都可以帮忙吗?
我需要帮助解决这个问题.
在MYSQL表中我有一个字段:
Field : artist_list
Values : 1,5,3,401
Run Code Online (Sandbox Code Playgroud)
我需要找到艺术家uid 401的所有记录
我这样做
SELECT uid FROM tbl WHERE artist_list IN ('401');
Run Code Online (Sandbox Code Playgroud)
我有记录,其中artist_list字段值仅为'401',但如果我有11,401,则此查询不匹配.
任何的想法 ?
(我不能使用LIKE方法,因为如果艺术家uid是3(匹配30,33,3333)...
我想将多个复选框值存储到数据库中的一个字段中.(例如,1,26,56,100).我想知道如何实现这一点,如果我想在查询中调用变量,PHP如何从数据库中读取这些值?
基本上我正在创建一个博客应用程序(为了娱乐和体验),我希望用户能够通过复选框更改每篇博文的可见性.我知道你可能在想为什么我不为每篇博文都提供可见性字段.我理解为什么不建议这样做,但我想不出任何其他方法来做到这一点.为了解释一下:我想将这个应用程序附加到我已经构建的CMS上,基本上我有一个包含博客文章的表,然后我希望用户能够访问其站点中的不同页面并添加一个博客.那么,如果用户想要在3个不同的页面上使用相同的博客,但只希望在每个页面上显示某些帖子,该怎么办?所以这就是我现在感到困惑的原因.
我们正在尝试将带有"非规范化数据"的excel表导出到xml.表头如下:
| AssetManager Code | AssetManager Date | Portfolio Code | Portfolio Name | MarketValue | NetCashFlow | Field | Field Code | Field Name |
Run Code Online (Sandbox Code Playgroud)
AssetManager代码和AssetManager日期始终相同,其余列包含可变数据.
以下是我们想要的xml输出示例:
<AssetManager Code="PFM" Date="20130117">
<Portfolios>
<Portfolio Code="CC PSP" Name="Consilium Capital">
<MarketValue>5548056.51</MarketValue>
<NetCashFlow>0</NetCashFlow>
<UserFields>
<Field Code="AM UCGT" Name="AM daily Unrealised CG">4375</Field>
</UserFields>
</Portfolio>
<Portfolio Code="MM (FC)" Name="Money Market UT (FC)">
<MarketValue>28975149.6500735</MarketValue>
<NetCashFlow>0</NetCashFlow>
<UserFields>
<Field Code="UCGT" Name="AM daily Unrealised CG">0</Field>
</UserFields>
</Portfolio>
</Portfolios>
</AssetManager>
Run Code Online (Sandbox Code Playgroud)
我们的xsd文件包含映射:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="AssetManager">
<xs:complexType>
<xs:sequence>
<xs:element …Run Code Online (Sandbox Code Playgroud) 数据库结构如下:
id|metaKey|metaValue
--+-------+-----------------------------------
55|product|a:8:{s:3:"sku";s:0:"";s:8:"products";a:3:{i:1;a:3:{s:6:"option";s:1:"1";s:5:"price";s:5:"14.95";s:9:"saleprice";s:0:"";}i:2;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:3;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}}s:11:"description";s:124:"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";s:8:"shiprate";s:1:"A";s:8:"featured";s:2:"no";s:4:"sale";s:3:"yes";s:10:"cart_radio";s:1:"0";s:6:"optset";s:0:"";}
Run Code Online (Sandbox Code Playgroud)
这是来自wordpress网站,我需要检索第一个"价格"值14.95什么是从存储在mysql中的序列化数组中检索特定值的最佳方法?
假设TABLE-A在TABLE-B中可以有一行或多行,它们可以在TABLE-C中有一行或多行,它们可以在TABLE-D中有一行或多行......依此类推.
假设我在TABLE-Z并且需要知道有关TABLE-A的详细信息.我是否从TABLE-Z一直到TABLE-A进行SQL查询?在某些时候,如果说TABLE-Z有一个FK到TABLE-A那么也许会很好,所以查询不会那么痛苦.但是,如果我把那个FK,我想我会破坏正常化,对吧?
关于如何处理这个问题的一般建议?
mysql database-design normalization denormalization denormalized
我有(并且不拥有,所以我无法更改)具有类似于此的布局的表.
ID | CATEGORIES
---------------
1 | c1
2 | c2,c3
3 | c3,c2
4 | c3
5 | c4,c8,c5,c100
Run Code Online (Sandbox Code Playgroud)
我需要返回包含特定类别ID的行.我首先使用LIKE语句编写查询,因为值可以在字符串中的任何位置
SELECT id FROM table WHERE categories LIKE '%c2%';
将返回第2行和第3行
SELECT id FROM table WHERE categories LIKE '%c3%' and categories LIKE '%c2%'; 会再次给我第2行和第3行,但不是第4行
SELECT id FROM table WHERE categories LIKE '%c3%' or categories LIKE '%c2%'; 再次给我第2,3和4行
我不喜欢所有的LIKE陈述.我FIND_IN_SET()在Oracle文档中找到了,但它似乎不适用于10g.我收到以下错误:
ORA-00904: "FIND_IN_SET": invalid identifier
00904. 00000 - "%s: invalid identifier"
Run Code Online (Sandbox Code Playgroud)
运行此查询时:( SELECT id FROM table WHERE FIND_IN_SET('c2', categories);来自文档的示例)或此查询:( …
我正在尝试获取属于特定用户的所有鲜花数据,在本例中为simplelogin:69.
我开始从用户那里获取所有花键,如下所示:
/users/simplelogin:69/flowers/
var ref = new Firebase("https://URL.firebaseio.com/users/"+uid+"/flowers");
var sync = $firebase(ref);
Run Code Online (Sandbox Code Playgroud)
现在我很难找到一个干净的方法来获取所有花卉数据通过循环thrue每个花键来自simplelogin:69没有循环thrue每个键/ flowers /(在下面的示例我只有三个花键但在生产中我可能有10k ).
我尝试过FirebaseIndex和firebase-util,但无法让它正常工作.有没有人有任何提示或任何东西?我已经在堆栈上阅读了以前的帖子,但大多数似乎已经过时或者不适合我的目标.真的可以用AngularFire来解决任何问题.
亲切的问候,伊莱亚斯
{
"flowers" : {
"-JiU57sFAfQwYtIq-LCl" : {
"image" : "test",
"name" : "test",
"type" : "Roses",
"uid" : "simplelogin:69"
},
"-JiU9-3ajlnFLpyUmBvL" : {
"image" : "dasdasd",
"name" : "sadasdas",
"type" : "Roses",
"uid" : "simplelogin:69"
},
"-JiUF-mioK3jQCYy6ZiG" : {
"image" : "ss",
"name" : "ss",
"type" : "Lilies",
"uid" : "simplelogin:69"
}
},
"users" : {
"simplelogin:69" : {
"flowers" : { …Run Code Online (Sandbox Code Playgroud) 我使用以下声明制作产品库存并显示数据
SELECT _PRODNAME AS [Manufacture Product],
_BASEPRODNAME AS [Sub Product],
_PRDDEFQTY AS [Required Qty / Unit],
_PURQTY AS [Purchase Qty],
_PURRETQTY AS [Return Qty],
_ISSUEQTY AS [Issue Qty],
_DAMAGEQTY AS [Damage Qty],
_BALQTY AS [Balance Qty],
_MINESTIMATE AS [Estimate Qty],
_SALEQTY AS [Sale Qty],
_MANUDAMAGEQTY AS Damage,
_AVAILQTY AS [Avail Qty]
FROM dbo.VIEW_MANUFACTURING
Run Code Online (Sandbox Code Playgroud)
此查询返回此结果:
但我的预期结果是
在我的样品数据中,香草蛋糕是主要产品,黄油奶油,鸡蛋,面粉是子产品,列3,4,5,6,7,8是子产品数据,第9,10,11,12列是主要产品.
我的问题是如何单独显示这些数据,我对此没有任何想法.
编辑赏金
正如您在第一张图片中看到的,有两种制造产品1)Manu 2)Vanila Cake
在这里我们将获得vanila蛋糕示例:
Vanila蛋糕有3个子产品1)黄油奶油2)鸡蛋3)面粉
第3至第8列与子产品(所需数量/单位列平衡数量列)相关
第9至12栏与制造产品相关(估算数量列到可用数量列)
预期结果如图2所示