我确实搜索了一个类似的问题,但并没有真正找到我正在寻找的东西。
我有以下表结构:
(注意这是一个能够深入了解我的问题的例子)
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 |
+-------------------------+----------+----------+----------+
这将定义组可以访问的页面,并将选中的复选框保存在交集表中。
我认为这不是一个好习惯;在列中保存表名称。我正在寻找一种合适的解决方案。
请注意:
我将尽可能多地重用代码
我不会更改表名,并坚持使用我的编码风格指南
答案 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
...