标签: database

跟踪数据库架构更改的机制

跟踪和/或自动化数据库架构更改的最佳方法是什么?我们的团队使用Subversion进行版本控制,我们已经能够以这种方式自动完成一些任务(将构建推送到临时服务器,将经过测试的代码部署到生产服务器),但我们仍在手动执行数据库更新.我想找到或创建一个解决方案,使我们能够跨不同环境的服务器高效工作,同时继续使用Subversion作为后端,通过该后端将代码和数据库更新推送到各种服务器.

许多流行的软件包都包含自动更新脚本,可以检测数据库版本并应用必要的更改.这是否是即使在更大规模(跨多个项目,有时还有多种环境和语言)中实现这一目标的最佳方式?如果是这样,是否有任何现有的代码可以简化流程,或者最好只是推出我们自己的解决方案?有没有人之前实现过类似的东西并将它集成到Subversion post-commit钩子中,或者这是一个坏主意?

虽然支持多个平台的解决方案更可取,但我们肯定需要支持Linux/Apache/MySQL/PHP堆栈,因为我们的大多数工作都在该平台上.

php mysql database svn migration

134
推荐指数
12
解决办法
4万
查看次数

如果Master和slave有不同的数据库包含Mysql复制,如何重新同步Mysql DB?

Mysql Server1作为MASTER运行.
Mysql Server2作为SLAVE运行.

现在,DB复制正在从MASTER发生到SLAVE.

Server2从网络中删除并在1天后重新连接.在此之后,主站和从站中的数据库不匹配.

如何在恢复从Master到Slave的DB后再次重新同步DB也无法解决问题?

mysql database database-replication

134
推荐指数
8
解决办法
23万
查看次数

实体属性值数据库与严格关系模型电子商务

可以肯定地说,EAV/CR数据库模型很糟糕.那说,

问题:应该使用什么数据库模型,技术或模式来处理描述可以在运行时更改的电子商务产品的属性的"类"?

在一个好的电子商务数据库中,您将存储选项类别(如电视分辨率,然后为每个电视分辨率,但下一个产品可能不是电视,没有"电视分辨率").如何存储它们,有效搜索,并允许用户使用描述其产品的可变字段设置产品类型?如果搜索引擎发现客户通常根据控制台深度搜索电视,则可以向字段添加控制台深度,然后在运行时为每种电视产品类型添加单个深度.

良好的电子商务应用程序中有一个很好的共同特征,它们显示一组产品,然后"向下钻取"侧面菜单,您可以看到"电视分辨率"作为标题,以及前五个最常见的电视分辨率发现集.您单击一个,它只显示该分辨率的电视,允许您通过选择侧面菜单上的其他类别进一步向下钻取.这些选项是运行时添加的动态产品属性.

进一步讨论:

长话短说,互联网上是否有任何链接或模型描述可以"学术上"修复以下设置? 我感谢Noel Kennedy建议的类别表,但需要的可能还要大于此.我在下面用不同的方式描述它,试图强调其意义.我可能需要进行视点校正来解决问题,或者我可能需要深入了解EAV/CR.

喜欢对EAV/CR模型的积极响应.我的开发人员都说杰弗里·肯普在下面提到了什么:"新实体必须由专业人士建模和设计"(脱离背景,阅读下面的回复).问题是:

  • 实体每周添加和删除属性
    (搜索关键字决定未来属性)
  • 新实体每周到达
    (产品由零件组装)
  • 旧实体每周都会消失
    (存档,不太受欢迎,季节性)

客户希望为产品添加属性有两个原因:

  • 相似产品之间的部门/关键字搜索/比较图表
  • 结账前的消费品配置

属性必须具有重要性,而不仅仅是关键字搜索.如果他们想要比较所有有"奶油糖霜"的蛋糕,他们可以点击蛋糕,点击生日主题,点击生奶油糖霜,然后检查所有有趣的蛋糕,知道他们都有奶油糖霜.这不仅仅是蛋糕,只是一个例子.

sql database design-patterns key-value entity-attribute-value

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

Postgresql:最好使用多个数据库,每个数据库有1个模式,还是1个数据库有多个模式?

在对我的一个问题发表评论之后,我在想是否更好地使用带有X架构的1个数据库,反之亦然.

我的情况:我正在开发一个网络应用程序,当人们注册时,我创建(实际上)数据库(不,它不是社交网络:每个人都必须能够访问自己的数据,永远不会看到其他用户的数据).

这就是我用于我的应用程序的先前版本(仍然在mysql上运行)的方式:通过plesk api,对于每次注册,我这样做:

  1. 创建具有有限权限的数据库用户;
  2. 创建一个只能由以前创建的用户和超级用户访问的数据库(用于维护)
  3. 填充数据库

现在,我需要对postgresql做同样的事情(项目越来越成熟,mysql ......不能满足所有需求)

我需要使所有数据库/模式备份独立:pg_dump在两种方式下都能很好地工作,对于可以配置为仅访问1个模式或1个数据库的用户来说是相同的.

所以,假设你是比我更有经验的potgres用户,你认为对我的情况最好的解决方案是什么,为什么?

使用$ x db而不是$ x schemas会有性能差异吗?什么解决方案将来会更好地维护(可靠性)?

编辑:我差点忘了:我所有的数据库/模式将始终具有相同的结构!

Edit2:对于备份问题(使用pg_dump),使用1 db和多个模式可能更好,一次性转储所有模式:恢复将非常简单地在dev机器中加载主转储然后转储和恢复所需的模式:还有1个额外的步骤,但是倾倒所有架构似乎更快,然后逐个转储它们.

ps:对不起,如果我在文本中忘记了一些'W'字符,我的键盘会受到该按钮的影响;)

更新2012年

那么,应用程序的结构和设计在过去的两年中发生了很大变化.我仍在使用这种one db with many schemas方法,但是,我的应用程序的每个版本都有1个数据库:

Db myapp_01
    \_ my_customer_foo_schema
    \_ my_customer_bar_schema
Db myapp_02
    \_ my_customer_foo_schema
    \_ my_customer_bar_schema
Run Code Online (Sandbox Code Playgroud)

对于备份,我定期转储每个数据库,然后在开发服务器上移动备份.

我也使用PITR/WAL备份,但正如我之前所说,它不太可能我必须立即恢复所有数据库 ..所以它可能会被解雇今年(在我的情况下不是最好的方法).

从现在开始,1-db-many-schema方法对我来说非常有效,即使应用程序结构完全改变了:

我差点忘了:我所有的数据库/模式将始终具有相同的结构!

...现在,每个模式都有自己的结构,可以改变对用户数据流的反应.

database postgresql database-design database-permissions

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

如何检查给定模式中是否存在表

Postgres 8.4及更高版本的数据库包含public模式中的模式和公司特定表中的公用表company.
company模式名称始终'company'以公司编号开头并以公司编号结束.
所以可能有以下模式:

public
company1
company2
company3
...
companynn
Run Code Online (Sandbox Code Playgroud)

应用程序始终适用于单个公司.
的search_path相应指定在ODBC或连接Npgsql的字符串,如:

search_path='company3,public'
Run Code Online (Sandbox Code Playgroud)

如何检查给定表是否存在于指定的companyn模式中?

例如:

select isSpecific('company3','tablenotincompany3schema')
Run Code Online (Sandbox Code Playgroud)

应该返回false,并

select isSpecific('company3','tableincompany3schema')
Run Code Online (Sandbox Code Playgroud)

应该回来true.

在任何情况下,该函数应仅检查companyn传递的模式,而不检查其他模式.

如果两者public和传递的模式中都存在给定的表,则该函数应该返回true.
它适用于Postgres 8.4或更高版本.

sql database postgresql information-schema search-path

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

在数据库中存储标签的最有效方法是什么?

我在我的网站上实现了一个类似于stackoverflow使用的标记系统,我的问题是 - 什么是存储标记的最有效方法,以便可以搜索和过滤它们?

我的想法是这样的:

Table: Items
Columns: Item_ID, Title, Content

Table: Tags
Columns: Title, Item_ID
Run Code Online (Sandbox Code Playgroud)

这太慢了吗?有没有更好的办法?

database tags tagging database-design

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

用于向列组合添加唯一约束的迁移

我需要的是迁移以将唯一约束应用于列的组合.即对于一个people表,一个组合first_name,last_Name并且Dob应该是唯一的.

database ruby-on-rails

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

使用SQL列出Postgres db 8.1中的所有序列

我正在将db从postgres转换为mysql.

由于我找不到一个可以自行完成技巧的工具,我将使用autoincrement值将所有postgres序列转换为mysql中的自动增量id.

那么,我如何列出Postgres DB(8.1版本)中的所有序列,其中包含有关使用它的表的信息,下一个值与SQL查询的值等?

请注意,我无法使用information_schema.sequences8.4版本中的视图.

sql database migration postgresql sequences

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

如何在SQL Server数据库中查找最大的对象?

我如何在SQL Server数据库中查找最大的对象?首先,通过确定哪些表(和相关索引)最大,然后确定特定表中哪些行最大(我们将二进制数据存储在BLOB中)?

有没有什么工具可以帮助进行这种数据库分析?或者是否有一些我可以对系统表运行的简单查询?

database sql-server

130
推荐指数
3
解决办法
14万
查看次数

如何使用postgresql模拟"插入忽略"和"重复密钥更新"(sql merge)?

某些SQL服务器具有一个功能,INSERT如果它违反主/唯一键约束,则跳过该功能.例如,MySQL有INSERT IGNORE.

什么是模仿的最好方式INSERT IGNORE,并ON DUPLICATE KEY UPDATE与PostgreSQL的?

database postgresql rules

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