创建一个矩阵表,其中包含2个到其他表的独立链接

时间:2014-05-10 13:16:29

标签: mysql sql

我确实搜索了一个类似的问题,但并没有真正找到我正在寻找的东西。

我有以下表结构:

(注意这是一个能够深入了解我的问题的例子)

table:matrix_links

+----+---------------------+-------------+-------------+-------------------------+
| id | name                | table1      | table2      | intersection_table      |
+----+---------------------+-------------+-------------+-------------------------+
|  1 | page autohorisation | pages       | groups      | group_has_pages         |
|  2 | rights              | rights      | groups      | group_has_rights        |
|  3 | Banana              | Banana      | kiwi        | kiwi_has_banana         |
+----+---------------------+-------------+-------------+-------------------------+

表格:网页

+----+-------------+
| id | name        |
+----+-------------+
|  1 | page1       |
|  2 | page2       |
|  3 | page3       |
+----+-------------+

表格:群组

+----+-------------+
| id | name        |
+----+-------------+
|  1 | group1      |
|  2 | group2      |
|  3 | group3      |
+----+-------------+

表:group_has_pages

+----------+-----------+
| page_id  | group_id  |
+----------+-----------+
| 1        | 1         |
+----------+-----------+

在我的代码中,这将生成:

+-------------------------+----------+----------+----------+
| page authorisation      | group1   | group2   | group3   |
+-------------------------+----------+----------+----------+
|  page1                  | x        | o        | o        |
|  page2                  | o        | o        | o        |
|  page3                  | o        | o        | o        |
+-------------------------+----------+----------+----------+

这将定义组可以访问的页面,并将选中的复选框保存在交集表中。

我认为这不是一个好习惯;在列中保存表名称。我正在寻找一种合适的解决方案。

请注意:

  • 我将尽可能多地重用代码

  • 我不会更改表名,并坚持使用我的编码风格指南

1 个答案:

答案 0 :(得分:0)

您通常不会将矩阵存储为任何数据库中的矩阵,因为大多数数据库管理系统将列数限制为比行数小得多的数字。因此,您不能以这种方式创建许多组。

通常的解决方案是压平你的矩阵。 (也用于节省稀疏矩阵的空间:http://en.wikipedia.org/wiki/Sparse_matrix#Storing_a_sparse_matrix

您将得到如下表格:

------------------------------------
page    | group   | authorization
------------------------------------
page1   | group1  | 1
page2   | group2  | 0
page3   | group3  | 0
page2   | group1  | 0
page2   | group2  | 0
page2   | group3  | 0
...