我正在为学校管理系统创建系统,并提出附加的数据库模式.
数据库图http://oi40.tinypic.com/15x21ig.jpg
以下是系统的工作原理:
我是数据库规范化的初学者,如果有人能给我一些提示,如果数据库看起来不错,我会很高兴.
编辑:
此外,只有一个登录点.在上述情况下,在登录期间,用户必须从下拉列表中选择用户类型.该下拉选择将用于查询相应的表以登录系统.另一种方法是使用一个公用user表,它将存储user_id, email, password, last_login_date, last_login_ip但会将其他细节存储在各自的表中,例如student, parent, teacher.那么,实现它的首选/正确方法是什么?
mysql database-design relational-database database-schema database-normalization
为了给这个问题提供更多的上下文,我有一个Web应用程序(asp mvc),它基本上将CRUD操作包装到MongoDb实例,它在模型被验证并发送到存储之前执行验证和某些业务逻辑,检索等
现在我们遇到的一个问题是,在新版本中,模型已经改变,但现有数据没有,这里是一个例子:(它是c#特定的,但问题确实是语言不可知的)
public class Person
{
public Guid Id {get; set;}
public string Name {get; set;}
public int Age {get;set;}
public string BadgeNo {get;set;}
}
public class Person
{
public Guid Id {get; set;}
public string Name {get; set;}
public int Age {get;set;}
public string EmployeeNo {get; set;} // Still contains same data as BadgeNo just called something different
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,对象的结构发生了变化,但是在Mongo的土地上,它仍然传递出一个BadgeNo,而不是一个EmployeeNo.在SQL领域,我们通常会有一个迁移脚本,它作为构建脚本的一部分运行,它将更改架构并更新/插入/删除该增量的任何其他数据.
那么如何用Mongo 管理这类迁移呢?我是否还应该使用一个脚本来更新Mongo中的所有实例?还是有一些其他首选的做法来做这种事情.
关于这个问题的任何建议都会很棒
===编辑===
目前我似乎想要使用迁移选项而不是逐步淘汰方法,所以考虑到这一点,任何人都可以推荐任何帮助这一领域的工具,否则每次迁移(假设滚入,推出) )必须是一个具有所有逻辑的预编译程序集.我正在思考FluentMigrator的内容,但不是使用SQL而是使用Mongo.目前我的构建脚本使用Nant,我看过一些ruby工具,但不确定是否有任何.net等价物.
在使用mongoDB,express和Node.js的博客中,作者提到缩短属性名称是个好主意:
....经常报告mongoDB的问题是磁盘上数据的大小...每个记录都存储了所有的字段名称....这意味着拥有属性通常可以更节省空间例如't',或'b'而不是'title'或'body',但是为了避免混淆,除非真正需要,否则我会避免这种情况!
我知道如何做到的解决方案.我更感兴趣的是什么时候才真正需要?
我知道如何在我的上下文中为表设置模式,但有没有办法为上下文中的所有表设置默认模式?即
[Schema = "Ordering"]
public class MyContext:DbContext
{
public MyContext()
: base("name=ConnectionString")
{
}
public DbSet<Student> Students { get; set; }
}
Run Code Online (Sandbox Code Playgroud) 我正在考虑从自我实现的版本控制解决方案切换到Hibernate Envers,但我还不太确定.我已经阅读了很多关于它的内容,但我关注架构更改以及Envers在根据旧架构历史化数据后如何处理它们.
您在这方面与Envers有什么经历?如何使用Envers处理架构更改和现有数据?
更新1:
它不只是添加从表中删除简单列,而是例如将简单的Forein-Key-Relationship更改为具有两个1:n关系的单独实体(M2M与属性列.这是您的"逻辑"更改当使用Envers时,如果根据旧模型已经存在历史数据,那么如何处理?有没有其他方法可以手动编写sql脚本并将它们转移到新的表示中?
java hibernate database-migration database-schema hibernate-envers
我的网络应用程序有多个部署 - 每个部署都是一个具有唯一URL的唯一网站.
每个部署都有不同的数据,UI等,但是Postgresql数据库结构非常相似(使用PostGIS).数据库都存在于同一个DB服务器上.我希望1个部署的用户能够登录所有其他部署的应用程序,而无需重新注册.
我想要的是在多个应用数据库之间共享的单个"用户"表.任何在一个应用程序中注册的用户都应该被所有其他应用程序识别.Postgres有可能吗?模式是这样做的吗?
我有一个名为Calendar with fields 的数据库表
我有另一个名为CalendarType的表,其中包含字段
问题是我需要为日历类型为2的每个日历存储一个附加字段.(但此字段与任何其他日历类型无关).
我应该只在Calendar表中创建一个新字段,并忽略具有不同calendarTypeid的所有其他日历的该字段,或者是否有更好的方法来组织此模式以支持此需求.
我希望能够创建可以基于固定日期执行的日程表,每天重复,在一周中的特定日期重复,在一年中的特定月份重复,在每年的特定日期重复,并在一天的特定时间.
请问我该如何为这个问题构建数据库表?
编辑#1
基本上,我正在编写一个应用程序,允许用户安排在各种预先配置的时间发送预配置的问候语.我知道我需要一个存储有关时间表信息的表格(例如圣诞节,营销一,... |以及时间表应该运行).然后是另一个表,用于记录已运行的计划,发送的问候语,人员和电子邮件; 基本上是一个交易表.
我的问题是设计Schedule表,因为我希望允许用户在特定日期,一周的特定日期(经常性),每个月的特定日期,每天的特定时间以及每年特定的日/月(例如25/12).
如何为计划创建一组表格,以灵活的方式处理这些输入?
所以我有一些叫做的东西
exports.create = function(projectJSON){
var project = new ProjectModel({
id : projectJSON.id,
projectName : projectJSON.projectName ,
authorName : projectJSON.authorName,
firstPostDate : projectJSON.firstPostDate
})
}
Run Code Online (Sandbox Code Playgroud)
多字元素的上述命名约定是firstPostDate正确的,还是_在所有小字母中间隔开?
我看到其他博客更喜欢小型大写.
编辑:
我还读到元素应该是单数而不是复数,即:
`comment` instead of `comments` for a blog schema design
Run Code Online (Sandbox Code Playgroud) 我需要通过CQL脚本将新列插入现有列族.
我想做的事情如下:
alter COLUMNFAMILY rules ADD rule_template text IF NOT EXISTS;
Run Code Online (Sandbox Code Playgroud)
我怎样才能在CQL脚本中实现这一目标?