4

我有一个类似的问题,如如何为多种产品设计产品表,其中每种产品都有很多参数

我现在确信使用 RDF。只是因为比尔·卡尔文在回答上述问题时发表的评论之一

但我已经在 mysql 中有一个数据库,代码在 php 中。

1) 那么我应该使用什么 RDF 数据库呢?

2)我是否结合了这种方法?这意味着我在 mysql 数据库中有一个类表继承,而在 RDF 中只有奇怪的产品属性?我认为我不应该将所有内容都移到 RDF 数据库中,因为它只是产品以及给我带来问题的大量可能的属性和价值。

3) 我应该看哪些 php 资源、文章来帮助我更好地创建它?

4)在上述挑战的背景下,更多的文章或资源可以帮助我更好地理解RDF,以更好地保持各种产品的属性和价值,我们将不胜感激。当我对正在发生的事情有一个概念性的理解时,我往往会工作得更好。

请记住,我对此完全是新手,我的编程和数据库知识充其量只是平均水平。

4

3 回答 3

2

好的,RDF 的主要好处之一是全局标识,因此如果您在 RDBMS 模式中使用代理 ID,那么您可以从单个序列中分配代理 ID。这将使您的模式的某些 RDF 扩展更容易。

因此,在您的情况下,您将对架构中的产品和其他实体(可能是用户等)的 id 使用单个序列

您可能应该将基本字段保留在规范化的 RDBMS 表中,例如具有基数为 0-1 的字段的产品表。

您可以将其他人保留在附加表中。

比如像这样

create table product (
  product_id int primary key,
  // core data here
)

create table product_meta (
  product_id int,
  property_id int,
  value varchar(255)
)

create table properties (
  property_id  int primary key,
  namespace varchar(255),
  local_name varchar(255)
)

如果您还想以动态形式引用数据,可以添加以下元表:

create table product_meta_reference (
  product_id int,
  property_id int, 
  reference int
)

这里的引用通过代理 id 指向架构中的另一个实体。

如果你想为另一个表提供元数据,比如说用户,你可以添加下表:

create table user_meta (
  user_id int,
  property_id int,
  value varchar(255)
)

我把它作为一个不同的答案,因为这是一个比我的第一个答案更具体的建议。

于 2010-05-17T11:10:47.840 回答
1

1 & 3)当您使用 PHP 和 MySQL 时,最好选择ARC 2(尽管网站声明这是一个预览版本,这是您想要的版本)或RAP两者都允许基于数据库的存储允许您将数据存储在 MySql 中

根据我的经验,ARC 2 似乎更受欢迎且维护良好

2) 取决于如果您将所有内容都移至 RDF 以及您对数据库中的现有数据执行何种查询,您现有的代码库将需要更改多少。有些事情使用 RDF 和 SPARQL 可能会更快,而有些事情可能会更慢。

于 2010-04-13T09:50:53.347 回答
0

我没有将 RDF 与 PHP 一起使用,但一般来说,如果您在一个项目中使用两种持久性技术,那么结果可能比单独使用一种更加复杂和冒险。

如果您坚持使用 RDBMS 方法,您可以通过引入以下属性使其更像 RDF:

  • 对所有代理 id 使用单个序列,这样您可以获得唯一标识符,这是 RDF 的要求
  • 将基表用于强制属性,将扩展表与主题 + 属性 + 值列用于附加数据

您不必使用 RDF 引擎以 RDF 可映射形式保存数据。

与 EAV 相比,RDF 是一种更具表现力的动态数据建模范式。

于 2010-05-16T11:54:05.977 回答