0

我正在做一些 php/mysql 工作,并开始想知道什么会更有效,什么方法会具有更好的数据完整性。

我从未使用过方法 #2,但我已经看到它在 CMS 或电子商务等系统中使用过。我经常使用#1。

示例:在我的系统中创建“任务”时,我需要为其分配 1 个或多个用户。


方法#1 在这种方法中,我将有一个存储task_id 和user_id 的表。我会查询此表以获取关系。


方法#2 在这种方法中,我将在任务表“users_assigned”中有一个列,这将存储一个序列化数组,当我需要时我会取消序列化。例如

$data = array('John', 'Jack', 'Jill');
// after serialization it would look like...
// a:3:{i:0;s:4:"John";i:1;s:4:"Jack";i:2;s:4:"Jill";}

哪种方法最适合将此类数据存储在数据库中?

4

2 回答 2

1

如果您没有强烈的反对非规范化的理由(将重复的数据存储在序列化数组中,打破正常形式的规则),我会坚持使用单独的表。获取有点复杂,需要连接,但是您可以更好地控制数据库中的关系完整性(外键),您的数据组织得更好,定义更清晰。

查看这篇文章http://backchannel.org/blog/friendfeed-schemaless-mysql了解非规范化的极端情况。但是,在他们的情况下,他们不会将任何其他链接数据获取到行集(在您的情况下,您可能希望在序列化数组中加入有关用户的更多信息)。

于 2012-10-15T21:36:00.943 回答
0

方法 2 是个坏主意。几乎可以阻止您加入表格(仍然可以,但只能使用您所做的代码来证明它可以完成而不是实际使用)。

于 2012-10-15T21:32:26.260 回答