我一直在关注NoSql运动的兴起以及随之而来的mongodb,ravendb等文档数据库的普及.虽然我喜欢这些有很多相关的东西,但我觉得我并不理解一些重要的东西.
假设您正在实现商店应用程序,并且您希望存储在数据库产品中,所有这些产品都有一个唯一的类别.在关系数据库中,这可以通过具有两个表,产品和类别表来完成,并且产品表将具有一个字段(可能称为"category_id"),该字段将引用具有正确类别条目的类别表中的行.这有几个好处,包括不重复数据.
这也意味着,如果拼错了类别名称,例如,您可以更新类别表,然后将其修复,因为这是唯一存在值的地方.
但是,在文档数据库中,这不是它的工作原理.你完全非规范化,意味着在"产品"文档中,你实际上会有一个保存实际类别字符串的值,导致大量重复数据,并且错误更难以纠正.更多地考虑这个问题,是否也意味着运行诸如"给我这个类别的所有产品"之类的查询可能导致没有完整性的结果.
当然,解决这个问题的方法是在文档数据库中重新实现整个"category_id"事物,但是当我想到这一点时,我意识到我应该继续使用关系数据库而不是重新实现它们.
这让我相信我错过了关于文档数据库的一些关键点,这些关键点导致我走上了这条不正确的道路.所以我想把它放到堆栈溢出,我错过了什么?
我正在开始研究一个新项目,如果有一些方法可以使不同的数据模型具有多态性,那么这个项目会更容易.我正在考虑使用Entity Framework 4.0(当它发布时),但是无法确定它是否真的能够正常工作.
这是基本情景.我实现了一个评论系统,并希望能够将它连接到许多不同类型的模型.也许我想对一个人的个人资料发表评论,并对网页发表评论.我过去这样做的方法是在人员表和评论表之间创建关系,与网页表和评论表之间的关系分开.但是,我认为这会导致数据库中的表结构过于复杂.
如果我能够在我想要注释的对象上添加接口,然后将数据库中的表结构简化为单个关系,那将是最好的.
我遇到的问题是,我似乎不知道正确的术语,以便找到有关如何做这类事情的信息.任何人都可以提供任何帮助将不胜感激.
目前,通过SQL Server Management程序对数据库进行了更改.如果表更改,则运行sqlmetal以重新生成linqtosql类并继续开发.但是,这会使部署变得困难,因为您必须通过并手动更新部署数据库(以及开发周期中使用的任何其他数据库).如果我们可以使用C#来生成这些更改将会很好,因为它有助于消除人为错误,并具有能够将数据库结构保留在git中的额外好处.现在,数据库的唯一表示形式是生成的linqtosql类.
我一直在寻找一个可以处理这类事情的好库,但主要的解决方案似乎是:保留一个sql生成脚本,或者在可以运行的C#类中嵌入sql以对数据库进行更改.这两种情况似乎都是非常不理想的情况,因为你失去了C#提供的优秀强类型.似乎应该有一种方法来使用纯C#来做到这一点.
我已经看到了使用实体框架和linqtosql从POCO生成数据库这样的事情的暗示,但我很难找到使用它的具体示例.另外,我还没有发现它们是否具有优雅(即数据保留)方式来处理初始表生成后对数据库的更改.
有没有解决这个问题的项目?
显然db2o网站最近重做了,现在旧网址给出了404错误.每当我想我找到答案时,我就会收到404错误.
我有一个简单的db4o数据库,我已经设置了存储人员.
public class Person
{
public string Firstname { get; set;}
public string Lastname {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我已经能够在数据库上运行Linq查询,一切都运行得非常好.我正在网络环境中编程,所以我需要有人从数据库中识别和获取唯一对象,所以我只是将数据库配置为使用UUID.现在问题已经出现了,如何从Linq查询中获取的对象获取UUID信息?
例如,假设我让所有人都存储在数据库中,我需要为每个人生成唯一的URL.我将使用UUID这样做.所以我会运行这个:
var people = (from Person p in db select p).ToList();
Run Code Online (Sandbox Code Playgroud)
然后我将遍历列表
foreach( Person person in people)
{
DoSomething(person);
}
Run Code Online (Sandbox Code Playgroud)
最好的解决方案是将UUID作为Person类的属性,这样我就可以:
var uuid = person.UUID;
Run Code Online (Sandbox Code Playgroud)
但是,我没有看到这样做的机制.我错过了什么吗?
我有一个mvc应用程序,我在TypeScript中编写客户端代码,以及使用几个众所周知的javascript库,包括knockout,amplifyjs和requirejs.我遇到了预期行为不会发生的情况.
export class OrganizationOverviewViewModel{
openedAssessments = ko.observableArray();
availableSurveys = ko.observableArray();
organizationAgentId = ko.observable();
organizationName = ko.observable();
selectedSurvey = ko.observable();
public addSurvey() {
if (this.selectedSurvey() === undefined) {
mh.MessageHub.showError("Please Select a Survey", "what");
}
else {
// we can do the post.
// get the selected survey
var surveyId = this.selectedSurvey();
// call the server to add the survey
amplify.request("addSurveyToOrganization", {
"surveyId": surveyId,
"organizationAgentId": this.organizationAgentId()
},
function (data) {
var context = ko.contextFor($('#mainContent')[0]).$data;
context.openedAssessments.push({ surveyId: data.SurveyId, SurveyName: data.SurveyName, NumberOfResponses: data.ResponseCount }); …Run Code Online (Sandbox Code Playgroud) .net ×2
c# ×2
ado.net ×1
amplifyjs ×1
database ×1
db4o ×1
knockout.js ×1
linq ×1
nosql ×1
polymorphism ×1
sql-server ×1
this ×1
typescript ×1
uuid ×1