我记得听过Joel Spolsky在播客014中提到他几乎没用过外键(如果我没记错的话).但是,对我而言,在整个数据库中避免重复和后续数据完整性问题似乎非常重要.
人们有一些坚实的理由为什么(避免与Stack Overflow原则一致的讨论)?
database database-design referential-integrity foreign-keys data-integrity
是否可以创建一个包含自己的校验和(MD5,SHA1,无论如何)的文件?而对于沮丧的笑话,我的意思是普通的校验和,而不是计算它的函数.
我只是想快点检查一下.假设我在数据模型中有两个实体:Catalog和Product.它们之间具有多对多关系,并且都是必需的(目录必须至少有一个产品,并且所有产品必须各自属于至少一个目录).因此,如果我要删除一个产品,它的删除当然应该是Nullify.
但是删除政策对于目录应该是什么?如果删除目录,则并非其所有产品都必须完全属于它.产品可能属于多个目录.所以我绝对不应该使用Cascade.但是,Nullify是否足够?如果我最终得到不属于目录的悬挂产品怎么办?Core Data内置了什么可以用多对多模式解决这个问题?我需要修改我的架构吗?
尝试使用git-1.7.4.1确定用户在对象数据库中被警告腐败的速度有多快,我拉了一个一位切换器:
$ git init repo
Initialized empty Git repository in /tmp/repo/.git/
$ cd repo
$ echo 'very important info' >critical
$ git add critical
$ git commit -m critical
[master (root-commit) c4d6d90] critical
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 critical
$ git ls-tree HEAD
100644 blob 82d423c32c4bb2c52938088e0234db041bf4eaaf critical
$ git show 82d423c32c4bb2c52938088e0234db041bf4eaaf
very important info
$ echo 'Very important info' | git hash-object --stdin -w
81a3797afe76d339db25c0f9c705a6caa47279c2
$ mv .git/objects/81/a3797afe76d339db25c0f9c705a6caa47279c2 \
.git/objects/82/d423c32c4bb2c52938088e0234db041bf4eaaf
当然,git-fsck通知
$ git …
当我在大学学习时,他们教我们数据库的基础知识,基础知识和规则,其中一个最重要的规则是约束(主键,外键),以及如何建立1-m,1-1,mn关系.
现在,当我转向真实的商业环境时,他们告诉我:你应该忘记你所教过的一切; 没有约束,所有这些关系都是逻辑的,没有主键,没有外键,你可以通过代码制定约束.
我不知道谁是对的:我在学术生活中学到了什么,或者在新的现实生活中学到了什么.你怎么看?
我private在C++中尝试访问说明符的有效性.开始:
接口:
// class_A.h
class A
{
public:
void printX();
private:
void actualPrintX();
int x;
};
Run Code Online (Sandbox Code Playgroud)
执行:
// class_A.cpp
void A::printX()
{
actualPrintX();
}
void A::actualPrintX()
{
std::cout << x:
}
Run Code Online (Sandbox Code Playgroud)
我将其构建到静态库(.a/.lib)中.我们现在有一个class_A.h和classA.a(或classA.lib)对.我编辑了class_A.h并从中删除了private:它.
现在在另一个classTester.cpp中:
#include "class_A.h" // the newly edited header
int main()
{
A a;
a.x = 12; // both G++ and VC++ allowed this!
a.printX(); // allowed, as expected
a.actualPrintX(); // allowed by G++, VC++ gave a unresolved linker error
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道在篡改了一个库的标题之后所有的赌注都没有了(我的意思是,系统完整性等等)虽然方法很黑,但这真的允许吗?有办法阻止这个吗?或者我在这里做错了什么?
我的四人开发团队已经面临这个问题一段时间了:
有时我们需要处理同一组数据.因此,当我们在本地计算机上进行开发时,dev数据库将远程连接.
但是,有时我们需要在db上运行操作,这些操作将依赖于其他开发人员的数据,即我们破坏关联.为此,本地数据库会很好.
是否有解决这种困境的最佳做法?有没有像"数据SCM"工具?
以一种奇怪的方式,在git repo中保留SQL插入/删除/更新查询的文本文件会很有用,但我认为这可能非常快速地变慢.
你们怎么处理这个?
我正在尝试将一个ram驻留图像放到校验和本身,这说起来容易做起来难.
代码首先在交叉开发平台上编译,生成.elf输出.实用程序用于去除二进制图像,并将该图像与图像大小一起刻录到目标平台上的闪存.当目标启动时,它会将二进制文件复制到ram的正确区域,并跳转到它.该实用程序还会计算精灵中所有用于ram的单词的校验和,并且这些单词也会被刻录到闪存中.所以我的图像理论上可以使用先验的起始地址和闪存中保存的大小来校验自己的ram驻留图像,并与闪存中保存的总和进行比较.
无论如何,这就是理论.问题是图像开始执行后,.data随着变量的修改,部分会发生变化.到总和时,已经求和的图像不再是效用计算总和的图像.
我已经消除了由于我的应用程序定义的变量导致的更改,通过在应用程序中的所有其他初始化之前移动校验和例程(这有意义b/c为什么在完整性检查失败时运行任何一个,对吧?),但是杀手是C运行时间本身.似乎有一些与之相关的项目malloc和指针转换以及main()甚至在输入之前被改变的其他事物.
自我校验和C代码的整个想法是蹩脚的吗?如果有办法强制app和CRT .data进入不同的部分,我可以避免CRT捶打,但有人可能会争辩说,如果目标是在执行(大部分)之前检查图像,那么初始化的CRT数据应该成为其中的一部分.有没有办法像这样在RAM中进行代码校验和?
FWIW,我似乎坚持要求.就个人而言,我认为要走的路是在转移到ram之前校验闪存中的二进制文件,并信任加载器和ram.偏执狂必须在某个地方结束吧?
其他细节:工具链是GNU,图像包含.text,.rodata并.data作为一个连续加载的块.没有操作系统,这是裸机嵌入式.主加载器本质上memcpy是我的二进制文件,在预定的地址.没有重新安置.VM未使用.校验和仅需要在init初始化一次.
更新 通过这样做发现..
__attribute__((constructor)) void sumItUp(void) {
// sum it up
// leave result where it can be found
}
Run Code Online (Sandbox Code Playgroud)
..除了CRT init 初始化malloc/ sbrkvars以及"impure.o"和"locale.o"拥有的一些变量之外,我几乎可以完成所有操作.现在,malloc/ sbrkvalue是我从项目链接器脚本中知道的.如果impure.o和locale.o可以减轻,可能会有业务.
更新 因为我可以控制入口点(通过闪存中为主加载器说明的内容),现在似乎最好的攻击角度是使用一段自定义汇编程序代码来设置堆栈和sdata指针,调用校验和例程,然后分支到"正常"_start代码.
在C++中,从性能和数据完整性的角度来看,我有哪些替代方案来展示集合?
我的问题是我想将一个内部数据列表返回给调用者,但我不想生成一个副本.Thant让我返回对列表的引用,或指向列表的指针.但是,我并不想让调用者更改数据,我只是想让它读取数据.
什么是用于检测损坏的文件完整性检查(校验和)的最合适的哈希函数?
我需要考虑以下几点:
广泛的文件大小(1 kb到10GB +)
许多不同的文件类型
大量文件(+/- 100 TB和不断增长)
较大的文件是否需要更高的摘要大小(SHA-1与SHA 512)?
我看到SHA系列被称为加密哈希函数.它们是否不适合"通用"用途,例如检测文件损坏?像MD5或Tiger这样的东西会更好吗?
如果恶意篡改也是一个问题,你的答案会改变最合适的哈希函数吗?
外部库不是一个选项,只有Win XP SP3 +上可用.
当然,性能也值得关注.
(请原谅我的术语,如果不正确,我对这个问题的了解非常有限).
data-integrity ×10
database ×3
c++ ×2
checksum ×2
c ×1
cascade ×1
collections ×1
core-data ×1
corruption ×1
embedded ×1
file ×1
foreign-keys ×1
git ×1
hash ×1
load ×1
many-to-many ×1
performance ×1
private ×1
security ×1
sha1 ×1