Questions tagged «schema»

数据库系统的模式是以数据库管理系统(DBMS)支持的正式语言描述的结构,是指数据的组织以创建如何构造数据库的蓝图(分为数据库表)。

6
查询以比较MySQL中两个表的结构
为了自动执行一个MySQL数据库的备份过程,我想比较两个表的结构(当前版本与旧版本)。 您能想到一个可以比较两个表的查询吗? 这是您可以比较的一些示例表。 CREATE TABLE product_today ( pname VARCHAR(150), price int, PRIMARY KEY (pname) ); CREATE TABLE product_yesterday ( pname VARCHAR(150), price int, PRIMARY KEY (pname) ); CREATE TABLE product_2days_back ( pname VARCHAR(15), price int, PRIMARY KEY (pname) ); 前两个表具有相同的结构。最后一个是不同的。我只需要知道两个表是否具有不同的结构。我对它们之间的差异不感兴趣。


6
Redgate SQL Compare与Visual Studio 2010 Premium / Ultimate数据库项目
我目前使用的是Visual Studio Professional Edition,它具有数据库项目作为项目模板,但是它的某些功能不可用,例如Schema Compare tool。架构比较和数据库更新脚本生成仅在Visual Studio 2010 Premium / Ultimate版本中可用。 但是,Visual Studio中的模式比较和更新脚本生成功能是否像Redgate SQL Compare工具中那样丰富?(我也没有使用过)我没有找到功能比较列表。谁同时使用了这两个工具,有谁能帮助说清楚?

2
无模式/灵活+ ACID数据库?
我正在考虑将基于本地(本地安装)的VB应用程序(发票+库存)重写为面向小型企业客户的基于Web的Clojure应用程序。我打算将此作为SaaS应用程序提供给类似行业的客户。 我正在查看数据库选项:我的选择是RDBMS:Postgresql / MySQL。我可能会在第一年扩大到400位用户,通常每位用户每天20-40个页面浏览量/每天-主要用于非静态视图交易。每个视图将涉及获取数据和更新数据。必须符合ACID(或我认为)。因此交易量并不大。 毫无疑问,根据我的喜好选择这两种方法,但是对于这一要求,我认为这是SaaS应用程序的典型要求:随着我添加更多的客户/用户以及每个客户的需求,架构将发生变化。不断变化的业务需求(刚开始我会提供一些有限的灵活性)。由于我不是数据库专家,根据我的想法和所读的内容,我可以通过多种方式来处理: 在MySQl / Postgresql中进行传统的RDBMS模式设计,其中一个DB托管多个租户。并在每个表中添加足够的“自由浮动”列,以允许将来随着我添加更多客户或现有客户的更改而进行更改。每次对模式进行小的更改时,将更改传播到数据库中可能会有不利之处。我记得读过一篇文章,在Postgresql模式中更新可以实时完成而无需锁定。但是不确定,在这个用例中它有多痛苦或有多实用。而且,由于架构更改可能还会引入新的/次要的SQL更改。 有一个RDBMS,但是以灵活的方式设计数据库模式:具有接近实体属性值或仅作为键值存储。(例如,工作日为FriendFeed) 将整个事物作为对象存储在内存中,并定期将它们存储在日志文件中。(例如,edval,lmax) 选择NoSQL数据库,例如MongoDB或Redis。但是根据我的收集,它们不适合此用例,也不完全符合ACID。 寻找一些新的SQL Db,例如VoltDb或JustoneDb(基于云),它们保留SQL和ACID兼容行为,并且是“新一代” RDBMS。 我看了neo4j(graphdb),但不确定是否适合此用例 在我的用例中,除了可伸缩性或分布式计算之外,我还在寻找一种更好的方法来实现“模式中的灵活性+ ACID +一些合理的性能”。我在网上可以找到的大多数文章都谈到模式的灵活性,这是导致性能(在NoSQL DB的情况下)和可伸缩性的原因,而忽略了ACID /事务。 这是“模式灵活性与ACID”事务的“或”案例,还是有更好的出路?

1
如何在SQL Server 2012中转移dbo架构的所有权
我不小心给了用户db_owner模式的所有权(使用下面的UI中的复选框),现在我不能: 将所有权转让给另一个用户 从数据库中删除用户(尽管我可以在SQL Server中删除登录名) 我尝试了数据库主体在数据库中拥有一个架构,无法删除。 ALTER AUTHORIZATION ON SCHEMA::db_owner TO dbo 尽管成功完成了该操作,但用户仍然拥有所有权,并且该控件显示为灰色,因此我似乎也无法在用户界面中进行操作。 找到一个解决方案: 除了Arron的答案外,我还意识到我会在错误的DB(facepalm!)中运行以上命令。一旦纠正了数据库,上面的SQL和下面的答案都将起作用。


2
PostgreSQL:模式差异/补丁工具
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 5年前关闭。 请考虑以下设置: 生产数据库 开发数据库,​​对其进行架构更改以启用新功能 新功能的开发完成后,我必须手动更新prod db模式,直到pg_dump --schema-only两个DB上的相同。此过程容易出错且乏味。 因此,我正在寻找一种可以实现以下目的的工具: 显示两个架构(例如diff)之间差异的摘要。请注意,我不是在寻找模式的文本差异,而是在寻找可以得出结论的更复杂的工具,例如“表X具有新列Y”。 自动生成将一种模式转换为另一种模式的SQL代码(如patch) 是否有一个架构差异 / 补丁工具可以帮助我将产品架构转换为更高级的开发架构?

5
电子商务订单表。节省价格,还是使用审核/历史记录表?
我正在设计我的第一个电子商务模式。我已经阅读了一段时间,对an order_line_item和a 之间的关系有些困惑product 一个product可以被购买。它具有各种细节,但最重要的是unit_price。 在客户购买产品时,An order_line_item具有product_id购买,quantity购买和购买时的外键unit_price。 我读过的大部分内容都说unit_price上的order_line_item应该显式添加(即,不通过引用product_id)。这是有道理的,因为商店将来可能会更改价格,这会弄乱订单报告,跟踪,完整性等。 我不明白的是,为什么直接将unit_price值保存到order_line_item? 创建记录unit_price变更记录的审计/历史记录表会更好product吗? order_line_item创建an时,将product_audit添加表的外键,并可以从此处检索价格(通过引用)。 在我看来,使用这种方法有很多好处(减少数据重复,更改价格历史记录等),那么为什么不更频繁地使用它呢?我没有遇到使用这种方法的电子商务模式的示例,我错过了什么吗? UDPATE:看来我的问题与尺寸变化缓慢有关。我仍然很困惑,因为“缓慢变化的维度”与数据仓库和OLAP有关。那么,是否可以将“缓慢更改维度”类型应用于我的主要业务交易流程数据库(OLTP)?我想知道我是否将很多概念混在一起,将不胜感激一些指导。

3
有开源元数据管理解决方案吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 6年前关闭。 有开源元数据管理解决方案吗?我想创建一个元数据存储库,其中将保存数百个企业数据库的数据库模式,表和数据项的元数据的详细信息。 我对可以自动查询数据库架构数据以跟踪与表相关的元数据中的更改的东西特别感兴趣。即更改列数据大小,添加的表和列等。
13 schema  metadata 

1
PostgreSQL抱怨共享内存,但是共享内存似乎还可以
我一直在通过PostgreSQL服务器进行密集的模式删除和创建,但是现在抱怨..: WARNING: out of shared memory ERROR: out of shared memory HINT: You might need to increase max_locks_per_transaction. 但是问题仍然存在,如果PostgreSQL仅用重新启动service postgresql restart,我怀疑max_locks_per_transaction不会进行任何调整。 我有点疏远,因为此错误的故障排除列表对我不起作用。 更多信息1409291350:缺少一些细节,但我保留了核心SQL结果。 postgres=# SELECT version(); PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2, 64-bit 和: $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: …

5
对于大型应用程序,在同一个数据库的不同模式的表上创建外键是个坏主意吗?
我正在将基于pl / sql网络的大型应用程序传输到专用服务器。此应用程序位于具有70个程序包代码的模式中。在不同的时间大约有15个人进行了此应用程序。对我们来说,通常的做法是在不同模式的引用表上创建外键,因为它确实很方便并且可以使数据库保持整洁,因为我们不需要在不同的模式中保留相同的引用表。 但是无论如何,我的DBA(使用DB创建新实例并在Solaris区域内复制我的应用程序)今天非常苛刻,“不同模式上的外键是邪恶的,您需要销毁它!”。他没有解释他的观点。 在大型应用程序上这样做真的是个坏主意吗?

2
在psql中使用\ dt(+)时,为什么看不到表(PostgreSQL)?
我已经按照以下方式donor在架构中创建了表reference: CREATE TABLE reference.donor ( donor_code smallint PRIMARY KEY, donor_name character varying NOT NULL, donor_type smallint REFERENCES reference.donor_type (type_id), alpha_2_code char(2) REFERENCES reference.iso_3166_1 (alpha_2_code) ); 我已经按照以下表格填充了表格: INSERT INTO reference.donor (donor_code, donor_name, donor_type, alpha_2_code) SELECT donor_code, donor_name, donor_type, alpha_2_code FROM reference.donor_template; 当我跑步时: \dt+ reference.* 在psql里面我看到reference.donor表格: List of relations Schema | Name …

2
将我的数据库项目与Azure服务器进行比较时,SSDT架构比较失败
我有一个建立在我们企业数据库上的SQL数据库项目。使用SSDT的Schema Compare工具,它已在内部和AWS托管的SQL服务器上多次部署。 当我发布到运行SQL Ent 2012 sp2的Azure Hosted Win 2012 Server时出现问题。它返回“比较完成。未检测到差异”。 我知道这是错误的,因为我可以打开企业管理器并将架构与SQL Project进行比较,并发现两者之间存在差异。 我发现了几篇有关2014版如何破坏该工具的文章,但它们之间存在版本差异。 [是的,我做了Google。说明是因为我因忘记这样做而臭名昭著。] https://www.google.com/webhp?ie=utf-8&oe=utf-8#q=ssdt+data+compare+fail+to+detect+difference&start=10 我检查过的其他内容包括确保我的数据库帐户具有无限访问权限。我可以连接管理控制台。我可以连接本地程序。 最后确认存在问题: 我创建了一个SP,该SP的返回值为1。 为了测试,它可能一无所获。 创建SP后,我在所有实例上运行架构比较,除Azure服务器以外的所有实例均显示出差异。 更新资料 我已经证实这是明确地与服务器有关的,因为现在两台不同计算机上的两个不同用户都遇到了相同的确切问题。

2
允许用户在自己的架构中执行任何操作,但不能创建或删除架构本身
我已经在SQL Azure中创建了一个架构,并授予了数据库角色以下权限: CREATE ROLE myrole AUTHORIZATION dbo; EXEC sp_addrolemember 'myrole', 'myuser'; CREATE SCHEMA myschema AUTHORIZATION dbo; GRANT ALTER, CONTROL, DELETE, EXECUTE, INSERT, REFERENCES, SELECT, UPDATE, VIEW DEFINITION ON SCHEMA::myschema TO myrole; GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole; 通过上面定义的权限myuser可以创建/删除他自己的架构,因此为了解决该问题,我尝试了ALTER ANY SCHEMA权限。但是此权限也拒绝用户创建/删除表。 为了允许用户在自己的架构中执行任何操作但不能创建或删除架构本身,需要什么权限?

3
如何实现具有最大属性数量未知的实体?
我正在设计一个棒球模拟程序,但是在设计boxscore模式时遇到了问题。我的问题是我想跟踪每个局得分多少次。我在实际程序中执行此操作的方法是使用一个动态数组,该数组随所播放的每个局而增长。 对于那些不熟悉棒球比赛的人,通常比赛会长9局,除非比赛在第9局结束时并列。因此,棒球比赛的长度没有确定,这意味着我不能设计数据库仅将9列记录为每一局的得分(技术上来说是18列(9局* 2队)。我不得不想到的是序列化数组并在将其存储到数据库之前将其编码为Base64,但是,我不知道这是否是一种很好的技术,我想知道是否有人有更好的主意。 万一重要,我正在开发的数据库是PostgreSQL。 任何建议,不胜感激!谢谢!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.