0

这通常是存储以下类型列表的更好方法:

array(
   'category'=>array(
      'key'=>'value',
      'key'=>'value'
    ),
   'category'=>array(
      'key'=>'value',
      'key'=>'value'
    )
);

存储这些列表的更有效方法是lists.phpMySQL 中的文件还是序列化条目?

4

3 回答 3

2

那么取决于你的mysql表结构:

  • 如果您的表是标准化的,那么序列化数据并存储它会破坏标准化。

但除此之外,为什么不创建两个表,一个存储类别,另一个存储引用该类别的键值对。

CREATE TABLE Categories (
   CID INT,
   ***
   PRIMARY KEY (CID)
)ENGINE=InnoDB;

CREATE TABLE KeyValues (
   Category INT,
   Key varchar(100),
   Value varchar(100,
   FOREIGN KEY Category REFERENCES Categories(CID)
)ENGINE=InnoDB;

并且您可以根据您的结构进一步规范化键值表。我没有故意选择主键,因为这取决于您是否正在规范您的表。添加自动增量主键也可以。

这更容易和更快地选择数据。当您对数据进行序列化时,如果您需要进行某种计算,您首先需要在 PHP 端抓取,取消序列化并进行计算,您可以通过一个查询来执行相同的操作。

于 2013-02-01T21:00:53.847 回答
1

我建议你使用mysql,更易于维护,并且可以轻松挑选出你需要的行,而无需将整个数组加载到内存中。您也可以尝试使用像 mongoDB 这样的 nosql 数据库。

于 2013-02-01T20:59:54.910 回答
0

除非需要,否则不要使用数据库,它会增加不必要的开销、复杂性并引入新的故障点。在这种情况下,我会将列表编码为 PHP 源数组。它将更快并且更容易实现 - 您可以在几秒钟内启动此代码。我认为在这种情况下使用数据库没有任何优势。存储 600 个元素的数组所需的开销可以忽略不计。如果您后来发现数组变得太大而无法合理,或者需要经常更改,您可以将它移到数据库中。不要过度设计它。

于 2013-02-01T21:15:53.070 回答