在数据库中存储相关值的最理想方式(与php兼容)是什么?


What is the most ideal way (compatible with php) to store correlation values in a database?

很抱歉我的标题不清楚。我正在制作一个网站与PHP在那里用户可以提交帖子。我目前使用MySQL数据库来存储用户和帖子。我还想存储每个用户和每个帖子之间的相关性值。这就是思路:

        -----------------
        | user1 | user2 |
-------------------------
| post1 | #val  | #val  |
-------------------------
| post2 | #val  | #val  |
-------------------------

我希望我可以在MySQL中这样做一个表,但我不能选择列名与准备语句,除非我连接到一个查询,这显然是不理想的。

我以前问过一个类似的问题,答案是制作一个三列表,其中每行表示一个相关性。像这样:

=======================
| user | post | value |
=======================
| usr1 | pst1 | #val  |
-----------------------
| usr2 | pst1 | #val  |
-----------------------
| usr1 | pst2 | #val  |
-----------------------
| usr2 | pst2 | #val  |
-----------------------

我不喜欢这个。它存储了很多无关的数据,因为它存储了每个用户的id多次,每个帖子的id多次。它还需要大量的行;如果我只有100个帖子和100个用户,那将是10,000行。

我不怕在我的项目中添加另一个数据库(或者如果我喜欢的话,完全切换到另一种数据库类型)来适应这一点。我知道市面上有很多NoSQL数据库,但我对MySQL之外的数据库没有任何经验,我不知道什么数据库适合我的需要。

我担心在MySQL中这样做是合理的吗?或者MySQL能处理这么多行吗?在MySQL中还有其他更有效的方法吗?如果没有,我想知道最好的数据库类型是什么。

这似乎是一个非常常见的类型的东西存储,但我没有看到一个合理的方式在MySQL中做到这一点;因此,我认为有一种数据库类型非常适合这样做。

关系存储的基础是相同的,与您使用的数据库无关。当然,您应该以避免冗余的数据库设计为目标。这就是关系数据库的全部意义……

但现在到实际问题!: -)

我想你只是在寻找一个与你之前收到的答案不同的答案。

=======================
| user | post | value |
=======================
| usr1 | pst1 | #val  |
-----------------------
| usr2 | pst1 | #val  |
-----------------------
| usr1 | pst2 | #val  |
-----------------------
| usr2 | pst2 | #val  |
-----------------------

我将创建三个表。一个主表和两个链接表

主:

主数据表:

=============================
| user_id | post_id | value |
=============================
| 1       | 1       | #val  |
-----------------------------
| 2       | 1       | #val  |
-----------------------------
| 1       | 2       | #val  |
-----------------------------
| 2       | 3       | #val  |
-----------------------------

链接表1:user

===============
| id | name   | 
===============
| 1  | Mark   |
---------------
| 2  | Sohpie |
---------------

link-table 2: post

===========================
| id | post               | 
===========================
| 1  | How are you?       |
---------------------------
| 2  | The nuts are brown |
---------------------------
| 3  | Milk is white      |
---------------------------

那么你可以像这样做join来获取数据:

SELECT u.name, p.post, m.val FROM main m
LEFT JOIN ON user u ON (m.user_id = u.user_id)
LEFT JOIN ON post p ON (m.post_id = p.post_id)

结果应该类似于

Mark, How are you, #val
Sophie, How are you, #val
Mark, The nuts are brown, #val
Sophie, Milk is white, #val

我不确定你说的#val是什么意思(它是如何计算的?),但我希望这个答案能给你一个线索,你如何解决剩下的问题。