如何在没有表的数据库中存储数据?


12

我在学校中学到的只是SQL,它将数据保存到表中。现在,我正在一个项目中,数据存储在XML文件中。此外,每个XML都包含对可视文件(JPEG)的引用。

XML本身包含一千多个坐标点,以及有关数据的其他信息。

我认为将这些信息存储在表中没有任何意义。此外,我也无法使用SQL存储JPEG文件。

什么是合适的解决方案,或者我的推理存在错误?

如您所见,我对数据库还很陌生。因此,欢迎提出任何建设性的建议,链接和建议。


SQL Server当然可以使用IMAGE数据类型存储JPEG文件。但是,我不建议这样做。使用FILE-STREAM会更好。
datagod 2012年

关于在数据库中存储jpeg(或任何其他文件),此处已解决了一些我们最常问到的问题。至于存储XML然后快速查找数据的方式,这几乎就是文档数据存储系统的用途。我将研究基于关系数据库的NoSQL解决方案,我想它会更容易使用。
jcolebrand

当涉及到XML时,IBM的DB2允许您做到这一点。您可以使用SQL或XPath / XQuery查询数据。他们的免费Express-C版本具有执行此操作的能力。但是,如果您转到企业版,则必须付费才能启用此功能。
克里斯·奥尔德里奇

Answers:


11

您需要的只是XML的持久性。使用NoSQL解决方案或文件系统。

除非您要使用RDBMS代替NoSQL或文件系统,否则使用RDBMS没有任何好处。


什么是合适的NoSQL解决方案?我正在Winform应用程序中使用C#。
チーズパン

@bodycountPP:我与他们没有经验......
GBN

7
我会检查一下RavenDB(ravendb.net)或CouchBase(couchbase.com/couchbase-server/overview),以便在Windows上使用。可以通过Google找到其他产品-我对这些产品有很好的经验。显然,您的行驶里程可能会有所不同:)
ITHedgeHog 2012年

10

我今天在Phil Factor的博客文章Normalization和'Anima notitia copia'中添加了书签,因为它巧妙地总结了支持和反对规范某些类型数据的情况。在SQL实例上运行以下查询,看看是否同意。

SELECT * FROM sys.syslanguages

SQL使您可以创建关系数据库。但是,即使闻起来很糟,只要有必要,并且可以分辨出区别,就可以使用SQL数据库进行无关紧要的无关紧要的事情。不仅如此,而且也只有在您意识到风险和隐含含义的情况下。

您提到XML文件包含“有关数据的附加信息”。出于询问的目的,在关系数据库中对该元数据进行建模是否有任何好处?如果是这样,则可能存在提取相关数据并将剩余的XML保留为XML文档类型的情况。

...如果您传递了JSON字符串或XML,并要求将其存储在数据库中,那么您要做的就是问问自己,以Anima notitia copia(数据库之魂)的角色吗?对此项信息的内容感兴趣?”。如果答案是“否!”或“ nequequam!然后它是一个原子值,无论它有多复杂。

菲尔·菲尔特(Phil Factor)的论点是,如果将关系字段视为原子即字段不变,或者当整个字段更改时,而不是字段的组成部分,则关系数据库中的非关系字段是完全可以接受的。这种自然的扩展是,如果您的文档中包含您确实感兴趣的元素,则将关系模型应用于这些元素可能会有价值。

与问题相关,但主要是措辞方面,Phil的最后一句话是:

自然,我从来没有有意地创建过一个数据库,而Codd可能会皱眉,但是我写的接口和数据提要的周围却引起了标准化基础论者的关注。

还不是我们所有人!


2
ACORD有点像那样。我见过人们试图将其用作数据库模型。随后,ACORD从Prima获得了一个数据模型的许可,因此即使他们也承认这并不是一个很大的数据模型。ACORD消息传递标准有大约7,000个字段,其中定义了约200个必填字段-ACORD的最佳描述(来自参与消息传递标准的人)是“不知道如何管理标准流程”。
ConcernedOfTunbridgeWells

3

就Oracle数据库而言,答案是“ 不能”。数据库中的所有数据都存储在表中,甚至是元数据。数据可以存储在队列中,但这只是使用表的另一种方式。XML文件可以存储在数据库外部,但是不能满足您的“数据库中”需求。

除了您提出的问题之外,JPEG文件或与此相关的任何文件都可以存储在数据库中。他们将需要一个表和一个LOB列(BLOB或CLOB)。XML也可以通过这种方式存储,但是将XML数据导入数据库将使您能够以现在不容易完成的方式对数据进行操作。它还将提供数据库的其他好处,包括:减少冗余,可访问性,并发性,可伸缩性,互操作性,安全性,恢复和性能。

如果数据库的好处不能进一步实现您的目标,请不要使用它。


2

在我看来,您正在尝试实现空间数据库。这是一种关系数据库(或现有数据库产品的附加产品,例如Oracle Spatial,postGIS),它支持空间数据类型功能,用于优化与诸如多边形边界,点之类的空间特征有关的数据的存储和查询和层。您拥有的XML听起来像是边界坐标对,而相关的图像听起来像是要在该边界中显示的图稿资产。如果数据适合,请考虑提供内置空间建模的关系型空间数据库,以提供否则将难以实现或耗时的功能。


此外,如果您实施地理信息系统,请考虑在地理信息系统上提问。
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.