我正在使用 MySQL。这个想法类似于 shopify 具有不同的概念,因此用户将添加具有多种类型的变体和属性的产品。
从我所做的所有研究来看,这对我来说似乎是最有可能的解决方案,我只是想知道以下模式是否有任何问题以及有哪些优点/缺点?
谢谢
Table: products
------------------------------
| ID | ProductName |
|----------------------------|
| 1 | Leather Wallet Case |
| 2 | Jeans |
| 3 | Power Bank |
Table: products_variants
-------------------------------
| ID | ProductId | ParentId | Variant | VariantName | SKU | StockTotal | WholeSalePrice | BuyPrice | OnSale | OnSalePrice |
|---------------------------------------------------------------------------------------------------------------------------|
| 1 | 1 | null | model | iPhone5 | SKU | 10 | 3 | 10 | null …Run Code Online (Sandbox Code Playgroud) 我目前使用Visual Studio 专业版,它有数据库项目作为项目模板,但它的一些功能不可用,例如Schema Compare tool。架构比较和数据库更新脚本生成仅在Visual Studio 2010 Premium/Ultimate 版本中可用。
但是,Visual Studio 中的模式比较和更新脚本生成功能是否与Redgate SQL 比较工具中的功能一样丰富?(我也没有用过)我没能找到功能比较列表。任何人都使用过它们,可以帮助说清楚吗?
我不小心给了用户 db_owner 架构的所有权(使用 UI 中的复选框,如下所示),现在我不能:
ALTER AUTHORIZATION ON SCHEMA::db_owner TO dbo
Run Code Online (Sandbox Code Playgroud)
虽然它成功完成,但用户仍然拥有所有权,并且它是灰色的,所以我似乎也无法在 UI 中执行此操作。

找到了解决办法:
除了Arron 的回答之外,我意识到我会在错误的数据库(facepalm!)中运行上述命令。一旦数据库得到纠正,上面的 SQL 和下面的答案都有效。
考虑以下设置:
当新功能的开发完成后,我必须手动更新 prod db 模式,直到pg_dump --schema-only两个数据库上的相同为止。这个过程容易出错且乏味。
所以,我正在寻找一种可以:
diff)。请注意,我不是在寻找模式的单纯文本差异,而是一个更精细的工具,可以得出诸如“表X有一个新列Y”之类的结论。patch)我已经按照以下方式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)
);
Run Code Online (Sandbox Code Playgroud)
我已经按照以下方式填充了表格:
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;
Run Code Online (Sandbox Code Playgroud)
当我运行时:
\dt+ reference.*
Run Code Online (Sandbox Code Playgroud)
在 psql 我看到reference.donor表:
List of relations
Schema | Name | Type | Owner | Size | Description
-----------+----------------+-------+----------+-------+-------------
reference | donor | table | postgres | 16 kB |
reference | …Run Code Online (Sandbox Code Playgroud) 我正在考虑将基于 VB 的本地(本地安装)应用程序(发票+库存)重写为面向小型企业客户的基于 Web 的 Clojure 应用程序。我打算将其作为 SaaS 应用程序提供给类似行业的客户。
我正在查看数据库选项:我的选择是 RDBMS:Postgresql/MySQL。我可能会在第一年扩大到 400 个用户,通常每个用户每天 20-40 个页面浏览量 - 主要用于交易而不是静态浏览。每个视图都将涉及获取数据和更新数据。符合 ACID 是必要的(或者我认为)。所以交易量并不大。
根据我的偏好选择其中任何一个是不费吹灰之力的,但对于这一要求,我认为这是 SaaS 应用程序的典型特征:随着我添加更多客户/用户以及每个客户的需求,架构将发生变化不断变化的业务需求(我将提供一些有限的灵活性,只是在开始时)。由于我不是数据库专家,根据我能想到和读到的内容,我可以通过多种方式处理这个问题:
在我的用例中,不仅仅是可扩展性或分布式计算,我正在寻找一种更好的方法来实现“架构的灵活性 + ACID + 一些合理的性能”。我在网上可以找到的大多数文章都将模式的灵活性作为导致性能(在 NoSQL DB 的情况下)和可伸缩性的原因,同时忽略了 ACID/事务方面。
这是“架构灵活性与 ACID”事务的“非此即彼”案例还是有更好的出路?
我一直在执行一种密集的模式删除和通过 PostgreSQL 服务器创建,但现在抱怨..:
WARNING: out of shared memory
ERROR: out of shared memory
HINT: You might need to increase max_locks_per_transaction.
Run Code Online (Sandbox Code Playgroud)
但是如果 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
Run Code Online (Sandbox Code Playgroud)
和:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty
Run Code Online (Sandbox Code Playgroud) 是否有开源元数据管理解决方案?我想创建一个元数据存储库,它将保存数百个企业数据库的数据库模式、表和数据项的元数据的详细信息。
我对可以自动查询数据库模式数据以便能够跟踪与表相关的元数据更改的东西特别感兴趣。即更改列数据大小、添加的表和列等。
我正在使用 SQL Server 2008 为一组新资源定义架构...在这种情况下,每条记录(例如行)都需要存储 XML 片段。时; 虽然不经常;我需要查询 XML 以查找元素和属性值。如果留给我自己的设备,我会倾向于使用XML数据类型,尽管我一直认为这是有问题的。所以这让我想到了我的问题。
鉴于这种情况,在尝试决定将 XML 存储在XML列中还是varchar(MAX)列中时,我应该考虑哪些因素
如果有帮助……这里有一些额外的细节:
我正在将一个大型 pl/sql 基于 web 的应用程序转移到专用服务器。该应用程序位于一个包含 70 个程序代码包的模式中。这个应用程序是在不同的时间大约有 15 人完成的。我们通常的做法是在不同模式中的引用表上创建外键,因为它非常方便并且保持数据库非常干净,因为我们不需要在不同模式中保留相同的引用表。
但无论如何,我的 DBA(他用 DB 创建了新实例并将我的应用程序复制到 Solaris 区域内)今天说得很严厉,“不同模式上的外键是邪恶的,你需要销毁它!”。他没有解释他的观点。
在大型应用程序中这样做真的很糟糕吗?