标签: database-schema

用于存储课程章节主题子主题的数据库设计结构

我正在整理一个可以保存课程数据的数据库结构。每门课程 - 将有几章,每章可能有主题,每个主题可能有子主题等等。

这是样本数据

课程 - 账户
1) 账户介绍
   a) 基本账户
2) 财务报表
   a) 损益表
      i) 折旧
   b) 现金流量表
3)会计职业 

现在,这些主题中的每一个都有与之相关的讲义。现在我的想法是在第 1 章 - “介绍” - 笔记将与主题“基本帐户”相关联。但是在第 2 章 - “损益表”不会有任何注释,但“折旧”会有注释。现在因为第 3 章“会计师职业”没有任何子主题 - 笔记将直接与其相关联。

这只是我的方式或组织方式——我可以强制规定每章必须有一个子主题,以便可以关联注释等。

这是我到目前为止

表:课程
course_id
课程名

表:主题
topic_id
parent_topic_id
主题名称
笔记

表:课程_专题
course_id
topic_id

所以样本数据将显示为

Course_id | 课程名
    1 个账户

Topic_id | Parent_topic_id | 主题名称 | 笔记
    1 0 介绍
    2 1 基本账户
    3 0 财务报表
    4 3 损益表
    5 4 折旧

Course_id | 主题 ID …

sql database database-design relational-database database-schema

5
推荐指数
1
解决办法
2041
查看次数

MySQL:如何获取最后一次插入数据库的时间戳

无论我插入的数据库表如何,如何检查我最后一次在数据库中写入的时间(时间戳)是什么时候?

mysql database timestamp information-schema database-schema

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

数据库架构 - 用户订阅

我的数据库中有一个订阅模型,可以让用户订阅特定月份的课程。任务类型很少。用户可以:

  1. 使用信用卡购买课程 x 个月订阅
  2. 输入一些激活密钥即可购买课程 x 个月的订阅
  3. 系统管理员将用户分配给 x 个月的订阅。

如果用户续订他/她的订阅,我不会删除旧记录,而是在订阅表中创建一条新记录并将旧记录保留为历史记录,如果管理员更新了同一订阅,我也会创建新记录再次。用户当前的订阅由最后一条记录标识。用户课程的到期日期是最新记录中显示的日期。例如,如果您检查随附的屏幕截图。

在此输入图像描述

用户 1 有 3 个订阅,其中一个订阅课程必须在 6 月 15 日到期,但实际到期日期是 6 月 14 日,因为这是该用户 - 课程组合的最新记录。

我保留所有这些记录(而不仅仅是更新现有的用户课程到期日期)的原因是我需要这些历史记录。如果出现问题,我总是能够恢复错误所在。

我想你已经明白我的想法了,我的问题是,这是否是一个好的解决方案以及更好的实施想法是什么样的。

谢谢你的时间。

sql database-schema

5
推荐指数
1
解决办法
5332
查看次数

多个公司的数据库架构

我正在使用 c# 和实体框架代码优先方法开发库存应用程序。

设计要求之一是用户应该能够创建多个公司,每个公司应该有一套完整的库存主表。

例如,每个公司都应该有自己的股票日记帐和项目清单。将来还有一种方法可以将这些公司合并成一个“集团”公司,实质上是合并数据。

使用一种基于文件的 RDBMS(如 sqlite),它非常简单,我只需要为每个公司创建一个单独的 sqlite 数据库,然后创建一个主数据库将它们联系在一起。但是,我应该如何在单个数据库文件中进行操作!不是多个文件数据库。我不想在每张桌子上都有一个“公司”列!

我对数据库的有限了解的想法是使用不同的模式进行分离。每个公司的一个模式在每个模式中具有相同的一组表,一个单独的模式保存公共表和表以将其他模式联系在一起。这是一个好方法吗?因为我很难找到一种首先使用 ef 和代码“动态”创建模式的方法。

编辑 #1

为了了解公司的数量,一个企业大约有 4-5 家公司,每个财政年度关闭旧公司并创建一组新公司。在同一个文件中维护多年的数据本质上是好的,但不需要,只要我可以提供一个单独的模块来加载几年的数据,从几个db文件中方便逐年分析。

就单个公司数据的大小而言,它可以达到每个公司的 GB 标记。

至少在表级别上架构更改非常频繁,因为它可以由用户完全自定义。

我想促使我提出问题的一个方面是这种设计的实现。如果它是一个具有独立桌面界面和实现的应用程序,并且我在像 SQL Server 这样的 RDBMS 服务器上运行,那么数据库的数量就没有那么重要了。但是,对于托管在第三方并使用其数据库服务器的基于 Web 的 UI,可用数据库的数量将受到限制。唯一的解决方案是使用像 SQLite 这样的无服务器数据库。但就一般建议而言,不建议将 SQLite 用于大型企业级数据库。

c# database-design entity-framework database-schema

5
推荐指数
1
解决办法
2385
查看次数

改进 MySQL 通知系统的数据库设计

我正在为 webapp构建通用通知系统。我使用的主要技术是Java、Spring MVC 和 Hibernate。我一直在这里和那里查看几篇文章,试图提出最适合我的解决方案,同时考虑到推荐的做法。

我已经对我的数据库表进行了编码,并希望收到一些反馈,以 改进我的设计以避免在我实现 Java 类时发生大的变化。我的目标是使其尽可能完整、可扩展和优化,同时将复杂性降至最低。

这是我的代码:

通知示例:

@user added一个新的comment

用户[USER_ID] [USER_ACTION]一个新的[OBJECT].


>>> 更新 >>>

[05/02/14]

  • 字段id_recipientseennotification表中删除。(@Kombajn zbo?owy)
  • 新表已notification_user创建。(@Kombajn zbo?owy)
  • 小写标识符。(@wildplasser)

通知

CREATE TABLE notification (
           id_notification BIGINT(20) NOT NULL AUTO_INCREMENT,   
           id_notification_type BIGINT(20) NOT NULL,
           id_action_type BIGINT(20) NOT NULL,
           id_sender BIGINT(20) NOT NULL,           
           created_date TIMESTAMP NOT NULL,
           url VARCHAR(300) NULL,       

           PRIMARY KEY …
Run Code Online (Sandbox Code Playgroud)

mysql database database-design database-schema

5
推荐指数
0
解决办法
4211
查看次数

将自定义实例方法动态添加到猫鼬模式

有没有办法在“导出”之后将自定义实例方法添加到猫鼬模式。

例如,如果我有一个架构:

module.exports = function(app, db, config) {

  var MySchema = new Schema({ name: String });
  MySchema.methods.doIt = function() { console.log("I DID IT!"); }
  db.model("MySchema", MySchema);
}
Run Code Online (Sandbox Code Playgroud)

然后,我想在将新方法加载到 mongoose 模型对象后动态地向模式添加新方法。

MySchema = db.model('MySchema');
var obj = new MySchema({name: "robocop"});

var myNewMethod = function() { console.log(this.name); }

// Do Magic here to add the myNewMethod to object.

obj.myNewMethod();
Run Code Online (Sandbox Code Playgroud)

你有没有尝试过?

我已经尝试将它添加到 mongoose 模型对象,但是这会产生错误,指出模式对象没有我刚刚添加的方法。

MySchema = db.model('MySchema');
MySchema.schema.methods.myNewMethod = function() { console.log(this.name); }
db.model('MySchema', MySchema);

console.log(MySchema.schema.methods); // This shows my method …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose database-schema node.js

5
推荐指数
1
解决办法
2150
查看次数

Cassandra 和非结构化数据

我对 NoSQL 比较陌生,但我对关系数据库做了一些玩弄。

我们正在评估 Cassandra 在我们的数据模型可能需要相当积极地发展的环境中的使用。我已经看到它写了多个地方,Cassandra 可以存储“结构化、半结构化和非结构化”数据。

我理解结构化声明。很明显:一个表定义了列。

我想我理解半结构化声明。一行不需要填充所有列。

但我不清楚非结构化声明。当然,您可以将所有内容存储为键值 blob,但您无法按值(有效地)进行搜索。

我在网上找不到任何资源来描述使用 Cassandra 的非结构化数据的最佳实践。理想情况下,对于我们的应用程序,半结构化数据就足够了;但我想了解非结构化声明,因为它可以为我们增加价值。

谢谢。

cassandra database-schema

5
推荐指数
1
解决办法
5938
查看次数

如何在Datomic中实现排序到多个关系?

Datomic中没有开箱即用的架构功能,用于在多对多关系中对子实体进行排序,但这是一个非常常见的要求.谷歌搜索已经发现了一些解决方案,所以我想在这里列出需求和解决方案的变化,并希望得到社区的评论.

可能的要求

  • R1:小数(N)子实体(不确定小/大阈值应该是什么)
  • R2:大量子实体
  • R3:单亲儿童
  • R4:多亲子女
  • R5:递归子节点,即存储在Datomic中的树

我的特定用例是R1 + R3 + R5,我怀疑它很常见,但我希望尽可能多地枚举,以便将来可能成为其他人的有用参考.

解决方案

问题

每个解决方案似乎都有挑战.我能想到的是:

  • P1:保持插入,删除或移动操作的恒定时间操作.已经建议对"位置"值使用小数来避免在重新排序时更新所有子项
  • P2:通过订购支持多个父母关系
  • P3:维护存储订单的位置或边缘的复杂性,如订单或成员资格更改.
  • P4:更改为"position"属性会影响子实体未实际更改时隐含的"上次更改"日期
  • P5:通过包装器实体连接时,查询/拉取(特别是递归查询)会变得很困难

对于我的树用例,我不关心P2和P1不是一个大问题,因为N通常很低

所有这些研究都没有帮助我找到清楚哪种解决方案最适合我的树用例,但我倾向于S2.当然,最不复杂的是我的目标,但我怀疑所有解决方案都很复杂.

问题:您对此问题有什么经验吗?您可以分享哪些内容可以帮助其他人做出决定?我们会在指出时添加更多R,S和P.我(和许多其他人)将非常感谢任何反馈.

一个类似的问题在几年前询问,但没有多少那里发生.

clojure database-schema datomic

5
推荐指数
1
解决办法
326
查看次数

由两个 ISO 8061 日期组成的复合排序键的 DynamoDB 查询是否返回正确的结果(与 BETWEEN)?

似乎在 DynamoDB 中处理 Sort Key Date 对象(ISO 8061 格式)的共识是使用 STRING 键类型,其中查询案例将使用 BETWEEN 比较来查找两个日期(也是 ISO 8061)之间的结果,请参阅答案:

  1. 是否可以将日期时间保存到 DynamoDB?

我的问题是确实的DynamoDB字符串比较“之间”,使上述功能的机制ALSO可以查询两个Date对象缝合在一起(例如:2018-05-01-2018-05-10)作为一个单一的排序密钥其中,第一个缝合日期总是在第二个缝合日期之前。

经过初步测试,答案似乎是肯定的,只要您的 BETWEEN 查询也有两个串联日期,这应该是可能的。

我希望有人可以帮助我弄清楚这是否可以安全/稳定地部署。

在我们进入背景之前,我想我会在这里发布我的测试用例,以明确我在问什么。

给定排序键:2018-05-01-2018-05-25

  1. 查询 BETWEEN 2018-05-01-2018-05-20 和 2018-05-01-2018-05-26(RETURNS 项)
  2. 在 2018-05-01-2018-05-20 和 2018-05-01-2018-05-24 之间查询(未找到数据
  3. 查询 BETWEEN 2018-05-01-2018-05-20 和 2018-05-01-2018-05-25(RETURNS 项)
  4. 在 2018-05-02-2018-05-20 和 2018-05-02-2018-05-26 之间查询(未找到数据

背景


我正在构建一个可查询的 DynamoDB 航班组合表,我希望查询可以检查出发航班日期是否在某个日期之后,以及返回航班是否在某个日期之前。

基本上我的理解是,由于数字从左到右(年-月-日)级联的方式,DynamoDB 中 ISO 8061 日期的 BETWEEN 查询可以工作。如果是这种情况,那么将两个日期连接成一个排序键应该是安全的(在我的情况下)。

排序键值的表示将是...

  • 出发日期1-返回日期2
  • 年月日年月日

我正在预先检查数据,以便可以假设离港航班(第一个连续日期)总是在返回航班(第二个连续日期)之前,如果它在我们的表中,因此给出一个 BETWEEN 操作,我的假设是这应该成为可能。

我会在更多测试后回帖,但我希望有人对 DynamoDB BETWEEN Query 函数在这种情况下的确切工作方式(以及原因)有更多经验。

database-design database-schema amazon-dynamodb

5
推荐指数
1
解决办法
1554
查看次数

Express:请求的模块不提供名为“用户”的导出

我正在使用Nodemon和 ESM 模块在Express + Mongoose项目上使用 ES6 语法。编译时出现此错误:

SyntaxError:请求的模块“file:///.../models/User.js”不提供名为“User”的导出

我的模型文件 (models/User.js) 如下所示:

import mongoose, { Schema } from 'mongoose';

const userSchema = new Schema({
  name: String,
  email: String,
  password: String,
  type: String,
  createdOn: String,
  updatedOn: String
});

const User = mongoose.model('user', userSchema);

module.exports = { User };
Run Code Online (Sandbox Code Playgroud)

然后我导入它:

import { User } from '../models/User';
import bcrypt from 'bcrypt';

export default {
    Query: {
        getUsers: async () => await User.find({}).exec()
    },
    Mutation: {
        addUser: async (_, args) …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose database-schema express ecmascript-6

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