标签: database-schema

数据建模:逻辑建模练习

在尝试学习数据存储的艺术时,我一直在尝试尽可能多地获取可靠的信息.PerformanceDBA在以下帖子中发布了一些非常有用的教程/示例:我的数据是否已标准化?关系表命名约定.我已经在这里询问了这个模型的子集问题.

因此,为了确保我理解他提出的概念,我在其他地方看到过,我想进一步采取一两步,看看我是否掌握了这些概念.因此这篇文章的目的,希望其他人也可以学习.我所呈现的一切都是对我和学习的概念,而不是在某些生产系统中应用它.自从我使用他的模型开始以来,从PerformanceDBA获得一些输入会很酷,但我很欣赏任何人提供的所有输入.

由于我是数据库的新手,尤其是建模,我将首先承认我可能并不总是提出正确的问题,清楚地解释我的想法,或者由于缺乏关于该主题的专业知识而使用正确的问题.因此,请记住这一点,如果我偏离轨道,请随时引导我朝正确的方向前进.

如果对此有足够的兴趣,我想从逻辑到物理阶段采取这种方式来展示过程的演变并在Stack上分享它.我将为逻辑图保留此线程,并为其他步骤启动新线程.根据我的理解,我将最终构建一个MySQL数据库来运行一些测试,看看我想出的是否真的有用.

以下是我想在此概念模型中捕获的内容列表.编辑V1.2

  1. 这样做的目的是列出乐队,他们的成员,他们将出现的活动,以及提供音乐和其他商品出售
  2. 会员将能够与朋友匹配
  3. 会员可以在乐队,他们的音乐和他们的活动上撰写评论.
    • 每个成员在给定项目上只能进行一次审核,尽管他们可以编辑他们的评论并保留历史记录.
    • BandMembers将有机会撰写关于他们所关联乐队的评论的单一评论.作为乐队,每次评论只允许一个评论.
    • 然后,成员可以对所有评论和评论进行评级,但每个给定的实例仅评
  4. 会员可以选择自己喜欢的乐队,音乐,商品和活动
  5. 乐队,歌曲和事件将被分类为它们所属的类型,然后在必要时进一步细分为SubGenre.Band或Event可以归入多个Genre/SubGenre组合.
  6. 将为特定乐队发布活动日期,时间和地点,会员可以显示他们将参加活动.活动可以由多个乐队组成,多个活动可以在同一天的单个地点举行
  7. 每一方都将至少与一个地址绑定,并保留地址历史记录.每个方也可以一次绑定多个地址(即计费,运输,物理)
  8. 将存储Bands,BandMembers和一般成员的配置文件.

所以它可能有点涉及,但对于许多人来说可能是一个很好的学习工具,因为这个过程在不断发展,社区也会提供意见.有什么输入?

替代文字

编辑v1.1 响应PerformanceDBA

U.3)这意味着数据库中没有Band商品以外的商品.正确吗? 这是我最初的想法,但你让我思考.也许该网站想要出售自己的商品甚至是乐队的其他商品.不确定为此做出的模式.它是否需要对目录部分进行整个返工,或者只需要与乐队存在的识别关系?试图销售完整的专辑或歌曲的mod.无论哪种方式,它们都是电子格式,只能下载.这就是为什么我将专辑列为由歌曲组成而不是两个独立的实体.

U.5)我理解你提出的关于与Favorite的循环关系的内容.我想谈谈这个"它是一个具有某种形式的差异的实体(FavoriteType),它确定了它的处理方式"但我怎么不清楚.我在这里错过了什么?

u.6) "业务规则这可能是你唯一的弱点."
感谢您的诚实回应.我将重新阅读这些内容,但我希望首先通过回复给您的回复清除我脑中的一些疑惑.

Q.1)是的我希望接受,拒绝和阻止.我不确定你指的是如何改变逻辑模型?

Q.2)一个人不一定是用户.它们只能作为BandMember存在.那是你在问什么?

次要问题

零,一个或多个...哎呀我承认我在构建模型时忘记了这个注意事项.我按原样提交此版本,并将在未来版本中解决.我需要阅读更多关于约束检查的内容,以确保我理解事物.

M.4)取决于您将来是否设想OrderPurchase.你能扩展一下这里的意思吗?

替代文字

编辑V1.2 响应PerformanceDBA输入...

得到教训.

  1. 我正在混合识别/不识别和基数(即类型/子格)的概念,并且这样做不一致,使事情变得更糟.
  2. 逻辑图中不需要关联表,因为它们可以描述多对多关系,然后在物理模型中进行扩展.
  3. 在很多关系中我忽略了基数
  4. 使用有效的动词短语来阅读关系的重要性,以确保我正在模拟我想要完成的事情.

U.2) 在该模型的概念中,只需要将场地作为事件的位置进行跟踪.无需收集更多数据.据说,活动将在特定的EventDate上进行,并将在场地举行.场地将在给定日期举办多个活动和可能的多个活动.在我的新模型中,我的想法是EventDate已经与Event绑定.因此,Venue不需要与EventDate建立关系.你在U.2)下列出的第5和第6发子弹让我质疑我的想法.我在这里错过了什么吗?

U.3)是时候将Item和Band之间的链接移动到Item和Party了吗?根据目前的设计,我没有看到有可能出售与你乐队无关的商品.

U.5)我按照你的输入离开,而不是使它成为一个离散的超类型/子类型关系,因为我没有看到这种类型的卷起的好处.

其他修订

AR.1)在完成对FavoriteItem的练习之后,我觉得要审核的项目需要多对多关系才能显示出来.必要? 在此输入图像描述

好的,我们去v1.3

我在这个版本上花了几天时间,按照我的设计来回走动.一旦逻辑过程完成,我想看看我是否走在正确的轨道上,我将深入了解我所学到的知识以及我作为初学者在整个过程中遇到的麻烦.这个版本的重点是投入了一些密钥以帮助看到我过去缺少的东西.经历矩阵的过程也证明了它的巨大帮助.无论如何,如果不是因为PerformanceDBA提供的输入,我仍然会是一个在黑暗中琢磨的失落的灵魂.谁知道我现在的设计可能会重申我仍然是,但我学到了很多,所以我知道我手里至少有一个手电筒.

在这个时候,我承认我仍然对识别和非识别关系感到困惑.在我的模型中,我不得不使用非空值的非标识关系来加入我想要建模的关系.在阅读这个主题时,似乎在这个问题上存在很多分歧和犹豫不决,所以我做了我认为在我的模型中代表正确事物的东西.何时强制(识别)和何时自由(不识别)?有人有投入吗?

在此输入图像描述

编辑V1.4

Ok拿了V1.3输入并清理了这个V1.4

目前正在开发V1.5以包含属性.

在此输入图像描述

编辑V1.6

好吧,自从我在这里发布以来已经有一段时间了但是这个项目的工作仍在进行中.我现在正在发布V1.6,其中包括V1.4上次发布的一些更改.此版本显示了Keys的进一步发展.它仍然不包括属性或任何AK或IE.我已经开始研究物理模型,并使用它来帮助处理属性,并尝试阐明我在定义AK和IE时遇到的问题.逻辑模型的下一个发布将包括这些键和属性.

在此输入图像描述

database database-design relational-database database-schema identifying-relationship

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

使用WebDeploy部署数据库更新

我们已经为一个新项目采用了WebDeploy,它似乎很好地处理了我们的应用程序部署到我们的开发和测试服务器.

现在我们想扩展WebDeploy的使用,以使其部署数据库更改.

Scott Gu关于webdeploy的博文说明:

通过Web Deploy,您不仅可以发布文件,还可以配置数据库架构/数据,运行数据库更改脚本,设置安全ACL等

...但是我找不到有关如何使用WebDeploy运行数据库更改脚本的任何好信息.

有没有人为此提供指导,建议,最佳实践或信息链接?

谢谢

达伦.

database deployment database-schema webdeploy

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

SQLCMD变量和SSDT模式比较问题

我希望下面的比较没有显示出差异.根据MSDN (参见步骤7),应该有一个我找不到的SQLCMD变量函数.本文档适用于SQL 2010,但我使用的是2012.此页面上似乎没有可用的2012版本文档.

如何指定值以$(DatabaseName)使此比较起作用?我已经拥有了数据库项目设置中指定的值.

SQL架构比较

sql-server compare database-project database-schema sql-server-data-tools

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

使用Backbone,Express和Mongoose进行Upvote和Downvote

我正在尝试实现类似于stackoverflow或reddit的投票系统,其中只允许用户在给定帖子上投票一次.

遵循这里给出的建议

在mongodb中存储upvotes/downvotes

我创建了两个模式来存储upvotes和downvotes.对于每个用户,我都会跟踪用户投票的帖子.

发布架构:

var postSchema = new Schema({
    name: String,
    votes: Number,
    votetype: Number,
    postedBy: { type: String, ref: 'User' },
});
Run Code Online (Sandbox Code Playgroud)

用户架构:

var userSchema = new Schema({
    twittername: String,
    twitterID: Number,
    votedPosts : [{ _id : mongoose.Schema.Types.ObjectId , votetype: Number }]
});
Run Code Online (Sandbox Code Playgroud)

取决于每个柱都将有一个不同的视图中的当前用户,如果用户已表决的给予好评按钮或downvote按钮之前柱将是橙色(类似于计算器),所以我有以下(简化的)主链帖子模型:

var PostModel = Backbone.Model.extend({
    urlRoot : '/tweet',
    idAttribute: '_id',
    defaults:{
        name: '',
        votes: 0,
        votetype: 0,
        postedBy : '',
    },

    upvote: function(){
        this.set ({votetype : 1 }, {votes : this.get('votes') + 1});
        this.save();
        $.ajax({ …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb database-schema node.js backbone.js

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

实施有效的"未读评论"计数器系统

我正在尝试为以下问题找到最佳解决方案:需要设计一个数据库(基于postgres),其中包含触发器和计数器系统,这将形成一个有效查询,更新和存储信息的系统. '页面上显示的每篇文章(或博客条目,或类似的)中有多少未读评论.

无论是在查询,还是存储或更新部分,每个解决方案都有一些严重的缺点.即它需要太多的存储空间,或者太多的更新,或太多的数据库查询.

你的经历怎么样?也许这种问题已经形成了一个很好的解决方案?

sql database database-design database-schema

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

使用一个查询获取数据库架构?

基本上我想从当前连接的数据库获取表名和每个表的字段名,没有别的.

这可能吗?

我知道这SHOW TABLES FROM my_database会得到你的表名,并SHOW COLUMNS FROM my_table会得到你的字段,但这至少是[1 x#表]查询,我得到更多我想要的信息:)

php mysql sql database database-schema

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

家谱关系映射为什么基于家庭

我正在开发一种基因组学应用程序,目前正处于建立个体间关系的阶段.

根据我的研究,我注意到大多数关系的映射都是基于家庭(父亲和母亲),因此我想在盲目地采用它之前理解这背后的根本原因.

由于我的项目是父权制,我认为只要一个人加上父亲,就会创造一个新的家庭

database-design genealogy database-schema

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

如何在Mongoose中创建相互依赖的模式?

我有两个模式,我希望他们互相交流.例如:

// calendar.js
var mongoose = require('mongoose');
var Scema = mongoose.Schema;
var Day = mongoose.model('Day');

var CalendarSchema = new Schema({
  name: { type: String, required: true },
  startYear: { type: Number, required: true }
});

CalendarSchema.methods.getDays = function(cb){
   Day.find({ cal: this._id }, cb);
}

module.exports = mongoose.model('Calendar', CalendarSchema);


// day.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;
var Calendar = mongoose.model('Calendar');    

var DaySchema = new Schema({
  cal: { type: ObjectId, required: true },
  date: { …
Run Code Online (Sandbox Code Playgroud)

mongoose database-schema node.js

9
推荐指数
2
解决办法
1517
查看次数

追随者 - mongodb数据库设计

所以我正在使用mongodb,我不确定我是否已经为我正在尝试做的事情获得了正确/最佳的数据库集合设计.

可以有许多项目,用户可以创建包含这些项目的新组.任何用户都可以关注任何组!

在此输入图像描述

我没有将关注者和项目添加到组集合中,因为组中可能有5个项目,或者可能有10000个(对于关注者来说相同),并且从研究中我认为您不应该使用未绑定的数组(其中由于尺寸扩大而必须移动文档时由于性能问题而导致限制未知.(在遇到性能问题之前,是否有建议的阵列长度最大值?)

我认为使用以下设计时,真正的性能问题可能是当我想要获取用户为特定项目关注的所有组(基于user_id和item_id)时,因为我必须找到所有组用户正在关注,并从中查找具有group_id $ in和项ID的所有item_group.(但我实际上看不到任何其他方式这样做)

Follower
.find({ user_id: "54c93d61596b62c316134d2e" })
.exec(function (err, following) {
  if (err) {throw err;};

  var groups = [];

  for(var i = 0; i<following.length; i++) {
    groups.push(following[i].group_id)
  }

  item_groups.find({
  'group_id': { $in: groups },
  'item_id': '54ca9a2a6508ff7c9ecd7810'
  })
  .exec(function (err, groups) {
    if (err) {throw err;};

    res.json(groups);

  });

})
Run Code Online (Sandbox Code Playgroud)

是否有更好的DB模式来处理这种类型的设置?

更新:在下面的评论中添加了示例用例.

任何帮助/建议将非常感谢.

非常感谢,Mac

javascript database-design mongodb database-performance database-schema

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

MySQL:嵌入式JSON vs表

我正在为视频制作项目管理应用程序设计数据库架构,并且在如何保留一些嵌入但不可重复的数据方面苦苦挣扎.在我参加的几个CS课程中,规范化关系数据库的一部分是识别可重复的块并将它们封装到自己的表中.如果我知道嵌入/嵌套数据块可能是记录中唯一的,那该怎么办?

示例:video记录有很多shoot_locations.这些地点很可能永远不会重演.shoot_locations也可以包含多个shoot_times.用JSON表示,可能如下所示:

{
  video: {
    shoot_locations: [
      {
        name: "Bob's Pony Shack",
        address: "99 Horseman Street, Anywhere, US 12345",
        shoot_times: {
          shoot_at: "2015-08-15 21:00:00",
          ...
        }
      },
      {
        name: "Jerry's Tackle",
        address: "15 Pike Place, Anywhere, US 12345",
        shoot_times: {
          shoot_at: "2015-08-16 21:00:00"
          ...
        }
      }
    ],
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

选项...

  1. 存储shoot_locations在JSON字段中(在MySQL 5.7.8中可用?)
  2. 为数据创建一个单独的表.
  3. 别的什么?

我明白我应该将嵌入数据拆分到自己的表中,并为非关键元数据保存JSON.

摘要

存储非重复嵌入数据的最佳选择是什么?

mysql database-design database-schema

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