标签: database-schema

在开发团队中处理数据库架构更改的过程是什么?

这是关于如何在开发团队中处理数据库模式更改的更一般性问题.

我们是一个开发人员团队,开发过程中使用的数据库在每个人的盒子上本地运行,因为我们希望避免一直需要访问Web.因此,在某处运行单个中央数据库实例并不是一个真正的选择.

每当我们中的一个人决定是时候扩展/更改数据库模式时,我们就会发送数据库文件(MYI/MYD)或SQL文件来执行,或者在手机上给别人说明他们需要做什么才能获得更改后的代码在他们的本地数据库上运行.这肯定不是完美的方法.当我们需要在新版本准备就绪时调整分段或生产的数据库架构时,会出现同样的问题.

我在想......你们怎么处理这种东西?对于源代码,我们使用SVN.

非常感谢您的投入!

谢谢,迈克尔

process database-schema

6
推荐指数
1
解决办法
1130
查看次数

如何在SQL Server数据库模式中找到所有填充了100%空值的列?

是否有SQL方法可以找出我的架构中哪些列完全充满空值?在我知道的一些表中有一些字段没有被应用程序使用并将被删除,但我想看看是否有一个自动化的方法/脚本在整个数据库中找到它以找到代码审查的候选者/可能删除.

如果重要,请在x86上运行SQL Server 2005.

提前致谢!

sql sql-server null sql-server-2005 database-schema

6
推荐指数
1
解决办法
1813
查看次数

对于接受来自多个站点的登录(例如facebook connect,google,flickr等)的站点,架构的良好做法是什么?

我在http://dba.stackexchange.com上提出了这个问题,但它已经关闭了,我在这里应该问一下,因为它与设计而不是管理有关.

我正在构建一个站点("站点"),我正在考虑如何为它设计数据库架构.

我有一些会影响结果的场景:

  • 用户可以选择在网站上注册本机帐户,这将使他在将来使用该帐户登录其网站上的帐户.
  • 用户可以选择通过其他网站(登录"外部网站")(如Facebook连接,谷歌,四方,等..),这将使他使用的登录其帐户上的网站在未来.
  • 无论他选择哪种登录方式(本机帐户或外部网站帐户)并不重要,用户将能够在网站上使用外部网站(例如facebook,twitter,Instagram等)进行身份验证,以便使用他在外部网站上的数据(例如来自Twitter的推文,来自flickr的照片等),在网站上.

我该如何设计数据库的架构?

对于前两种情况,我认为有一个名为表Users有一个id和type领域.类型参考不同的表,例如FacebookUsers或GoogleUsers,每个具有user_id场-其具有外国相对于Users.id场-和其他领域,如first_name,profile_picture等.

但这种方法不支持第三种情况.所以我想到了以下内容:为每个外部站点设置
一个名为table Users和table 的基表,我希望允许用户连接到我的站点(即站点). 该表将包含有关用户的基本信息(例如- 所有可选),其中包含一个名称将保存值的列,或者这些值的序列化数组. 的外部站点小号表(例如)将持有的相关数据为外部站点与用户相关的,并以一个参考表" 字段.
Usersfirst name, last name, username, password, emailaccountsnative|facebook|twitter
FlickrUsersUsersuser_id

当用户将其帐户与外部站点(例如flickr,instagram)连接时,我使用该 …

mysql schema database-design database-schema

6
推荐指数
1
解决办法
1338
查看次数

将用户筛选的查询参数存储在数据库表中的最佳方法是什么?

我有一个ASP.NET MVC网站.在我的后端,我有一个名为People以下列的表:

  1. ID
  2. 名称
  3. 年龄
  4. 地点
  5. ......(其他一些小组)

我有一个通用的网页,使用模型绑定来查询这些数据.这是我的控制器动作:

public ActionResult GetData(FilterParams filterParams)
{
      return View(_dataAccess.Retrieve(filterParams.Name, filterParams.Age, filterParams.location, . . .)
}
Run Code Online (Sandbox Code Playgroud)

映射到这样的东西:

 http://www.mysite.com/MyController/GetData?Name=Bill .. . 
Run Code Online (Sandbox Code Playgroud)

dataAccess层只是检查每个参数以查看它是否已填充以添加到db where子句.这非常有效.

我现在希望能够存储用户的过滤查询,我试图找出存储特定过滤器的最佳方法.由于某些过滤器在queryString中只有一个参数,而其他过滤器在过滤器中有10个以上的字段,因此我无法找到将此查询"过滤信息"存储到我的数据库中的最优雅方法.

我能想到的选择是:

  1. 有一个完整的表复制(有一些额外的cols),但称之为PeopleFilterQueries并在每个记录中填充一个FilterName并将过滤器的值放在每个字段(名称等)中

  2. 存储一个只有FilterName的表和一个字符串,我存储实际的查询字符串Name = Bill&Location = NewYork.这样,如果过滤器更改或增长,我将不必继续添加新列.

这种情况的最佳做法是什么?

asp.net-mvc database-design database-schema query-string

6
推荐指数
1
解决办法
2680
查看次数

数据库设计ManyToMany,OneToMany,ManyToOne,Django模型

对于具有特定关系的Django应用程序,我感到困惑.我一直在查看以下数据库模式:http://www.databaseanswers.org/data%5Fmodels/customers_and_orders/index.htm

我对Customer_addresses与Customers和Addresses之间的关系感到困惑.

我知道:

  • 一个客户可以拥有多个地址.
  • 许多客户可以拥有相同的(一个)地址

这是否等同于多对多的关系?

  • 很多客户可以拥有多个地址?

当我在django中构建模型时,我有(简化):

class Customer_Address(models.Model):
    customer = models.ManyToManyField('inventory.Customer')
    address = models.ManyToManyField('inventory.Address')
Run Code Online (Sandbox Code Playgroud)

这是正确的吗?或者这更有意义:

class Customer_Address(models.Model):
    customer = models.ForeignKeyField('inventory.Customer')
    address = models.ManyToManyField('inventory.Address')
Run Code Online (Sandbox Code Playgroud)

更新的问题:

基于这种想法,它是一个多对多的关系.有一个ManyToMany关系,需要两个ManyToManyFields吗?

基于以下内容:http: //en.wikipedia.org/wiki/Many-to-many_%28data_model%29

由于Django支持ManyToManyFields,我甚至不需要联结表吗?如果我使用联结表(Customer_addresses),文章似乎暗示使用两个OneToMany关系,这不仅仅是这样的两个外键?

class Customer_Address(models.Model):
    customer = models.ForeignKeyField('inventory.Customer')
    address = models.ForgeinKeyField('inventory.Address')
Run Code Online (Sandbox Code Playgroud)

更新的问题:

现在我们知道Django构建了中间表,并且不需要表Customer_Addresses.哪个表应该有ManyToManyfield?客户表?还是地址表?

示例:https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany

在Person/Groups示例中.. Groups具有ManyToManyField.是否有任何原因无法在Person表中定义ManyToManyfield?

django-models database-schema

6
推荐指数
1
解决办法
4078
查看次数

在视图上授予选择权

在某个地方出现问题,我似乎无法找出原因.如果这已经被要求道歉.

我的数据库中有3个模式:COLLDESK LOCAL_IT GERBEN

COLLDESK是我们的主要模式,LOCAL_IT是我们进行本地开发的地方,而GERBEN是最终用户(应该只有选择选项).

现在我的COLLDESK模式中有一个名为GESTIONES的表.在LOCAL_IT中,我有一个名为ACTIONS的视图.这将保留COLLDESK模式中GESTIONES表中的4列.到现在为止还挺好!

现在我想在视图ACTIONS中给出GERBEN模式选择权限.但是,当我说

grant select on LOCAL_IT.ACTIONS to GERBEN
Run Code Online (Sandbox Code Playgroud)

我收到错误ORA-01720:COLLDESK.GESTIONES不存在授予选项

现在我尝试向GESTIONES提供GERBEN select权限,但我仍然收到错误消息

任何帮助将不胜感激!

亲切的问候

戈

oracle select grant database-schema

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

MySQL Workbench中的列标志"G"是什么意思

请参见下图,但作为表编辑器的一部分,有列标志,如PK(主键),NN(非空)等.最后一个是'G' MySQL表编辑器图像

mysql database database-design mysql-workbench database-schema

6
推荐指数
1
解决办法
1539
查看次数

复合增量列

我有一种情况,我需要将辅助列递增1,假设另一列的值相同.

表模式:

CREATE TABLE [APP].[World]
(
    [UID] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
    [App_ID] [bigint] NOT NULL,
    [id] [bigint] NOT NULL,
    [name] [varchar](255) NOT NULL,
    [descript] [varchar](max) NULL,
    [default_tile] [uniqueidentifier] NOT NULL,
    [active] [bit] NOT NULL,
    [inactive_date] [datetime] NULL
)
Run Code Online (Sandbox Code Playgroud)

首先,UID无论是什么,我都是独一无二的App_ID.

在我的情况下,我希望id与之相似Increment(1,1),只是为了相同App_ID.

假设:

  1. 有3 App_Id:1,2,3

场景:

  • App_ID 1有3个世界
  • App_ID 2有5个世界
  • App_ID 3有1个世界

理想的结果:

App_ID  id
1       1
2       1
3       1
1       2
2       2
1       3
2       3
2       4 …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2008-r2 database-schema sql-server-2012

6
推荐指数
1
解决办法
207
查看次数

针对多种用户类型的MongoDB架构设计

我即将构建一个Node.js + Express + Mongoose应用程序,我想选择社区的大脑,并获得有关最佳实践的建议,并开始创建有效的架构设计.

我的应用程序将包括2种不同的用户类型,即"老师"和"学生".每个都有一个用户配置文件,但每个帐户类型需要不同的字段."老师"和"学生"之间也会有关系,其中"学生"最初将有1名教师(将来可能有更多),而"老师"将有很多学生.

我对如何处理这个问题的初步想法是为每个用户类型(studentProfile模型和teacherProfile模型)创建一般用户模型和配置文件模型,然后在User模型中引用相应的配置文件模型,如下所示(A):

var UserSchema = new Schema({
    name: String,
    email: String,
    password: String,
    role: String, /* Student or Teacher */
    profile: { type: ObjectID, refPath: 'role' }
});

var studentProfileSchema = new Schema({
    age: Number,
    grade: Number,
    teachers: [{ type: ObjectID, ref: 'Teacher' }] 
});

var teacherProfileSchema = new Schema({
    school: String,
    subject: String 
}); …
Run Code Online (Sandbox Code Playgroud)

database-design mongodb database-schema

6
推荐指数
1
解决办法
1724
查看次数

Visual Studio 2017中的SQL Server比较架构

我试图在同一台服务器上比较两个数据库的模式.

这两个数据库被命名为benchmarkdb和benchmarkdb_dev.

在Visual Studio 2017中,我转到工具> SQL Server>新架构比较...

从标有"选择源"和"选择目标"的下拉菜单(如下图所示),我想选择benchmarkdb作为源和bencmarkdb_dev目标.

在此输入图像描述

单击选择源后,弹出"选择源模式",然后单击"选择连接..."按钮,这会弹出另一个弹出窗口.最新的弹出窗口(下图中右侧的弹出窗口)显示了我想要比较的两个数据库.

在此输入图像描述

但是,在我为源或目标选择一个之后,所有弹出窗口关闭,但没有任何内容填充"选择源..."或"选择目标..."下拉菜单.事实上,它只是回到第一张图片.

有没有解决方案,所以我可以比较数据库之间的模式?

更新:

我在VS 2012,2015和2017上尝试了这一点.所有人都面临同样的问题.VS软件和系统软件是最新的.以下是我正在使用的某些版本的软件,如果有任何帮助的话.

Windows 7企业版SP1

VS 2012,2015和2017

SQL Server 2014

.NET Framework v4.7.02053

sql-server database-schema schema-compare visual-studio-2017

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