【发布时间】:2016-07-04 10:31:46
【问题描述】:
我有以下情况。我正在使用嵌套集模型来存储分层数据。除了我还想添加让特定子类别仅对特定客户可用的选项之外,该模型几乎相同。编辑表将在 VB.NET 应用程序的外部完成,然后将新表发送回数据库。
我已经想到了两种不同的选择来实现这一点。首先是添加一个新的 client_id 字段来连接客户端 ID。然后我将执行查询以查找字符串中的特定数字。 #1 指的是所有用户,而与此不同的数字指的是特定客户。
+-------------+----------------------+-----+-----+---------+
| category_id | name | lft | rgt |client_id|
+-------------+----------------------+-----+-----+----------
| 1 | MAINCAT1 | 1 | 20 | 1|
| 2 | subcat1 | 2 | 9 | 2;4|
| 3 | subcat2 | 3 | 4 | 3|
| 4 | subcat3 | 5 | 6 | 1|
| 5 | subcat4 | 7 | 8 | 2;3|
| 6 | MAINCAT2 | 10 | 19 | 1|
| 7 | subcat1 | 11 | 14 | 1|
| 8 | subcat2 | 12 | 13 | 1|
| 9 | subcat3 | 15 | 16 | 3;4|
| 10 | subcat4 | 17 | 18 | 3;4|
+-------------+----------------------+-----+-----+---------+
第二个选项是为每个客户添加一个新字段并使用某种标记,例如 1/0 来启用/禁用类别。
+-------------+----------------------+-----+-----+---------+---------+
| category_id | name | lft | rgt |client_2 |client_3
+-------------+----------------------+-----+-----+---------+---------+
| 1 | MAINCAT1 | 1 | 20 | 1| 1|
| 2 | subcat1 | 2 | 9 | 0| 1|
| 3 | subcat2 | 3 | 4 | 0| 1|
| 4 | subcat3 | 5 | 6 | 1| 0|
| 5 | subcat4 | 7 | 8 | 1| 0|
| 6 | MAINCAT2 | 10 | 19 | 1| 1|
| 7 | subcat1 | 11 | 14 | 0| 1|
| 8 | subcat2 | 12 | 13 | 0| 1|
| 9 | subcat3 | 15 | 16 | 1| 0|
| 10 | subcat4 | 17 | 18 | 0| 1|
+-------------+----------------------+-----+-----+---------+---------+
我更喜欢第一个选项,因为它不需要添加/删除字段。我怀疑执行查询会更慢,但是我不打算让表格变得很长。您认为哪种方法更合适?
【问题讨论】:
-
两者都不要。使用 lft,rgt 邻接列表。 csv会很荒谬。第二个将是职业终结者。
-
我已经在使用 lft,rgt。
-
不要在顶部块最后一列中使用 csv。
标签: mysql mariadb nested-sets