我有365个客户的列表。他们每个人都有一个他们可以订购的潜在唯一产品清单,最多24个产品中有18个(目前)。我想使用组来分配权限。如何确定唯一权限集的最小数量?
我有预感,答案涉及关系分工,但我仍然非常模糊如何运作。
澄清:我不仅仅对哪些用户具有完全相同的权限感兴趣。我想找到我可以使用的组,每个用户可能是多个组的成员,可以重现权限。例如,组“A”可能拥有99498的权限;组“B”拥有99507,99508,99512的权限。以下截断数据中的所有三个用户都是“A”的成员,只有前两个用户是“B”的成员。
CREATE TABLE UsersProducts (
[User] INTEGER NOT NULL,
[Product] INTEGER NOT NULL,
PRIMARY KEY ([User],[Product])
)
CREATE TABLE GroupsProducts (
[Group] INTEGER NOT NULL,
[Product] INTEGER NOT NULL,
PRIMARY KEY ([Group],[Product])
)
CREATE TABLE GroupsUsers (
[Group] INTEGER NOT NULL,
[User] INTEGER NOT NULL,
PRIMARY KEY ([Group],[User])
)
-- Given this UsersProducts information, I want
--the GroupsProducts and GroupsUsers tables filled.
INSERT UsersProducts
( [User],[Product] )
VALUES (11804,99498),
(11804,99506),
(11804,99507),
(11804,99508),
(11804,99512),
(11804,99547),
(11804,99592),
(11804,99594),
(11804,99647),
(11804,99658),
(11804,99660),
(11804,99667),
(11804,99694),
(11804,99700),
(11804,99771),
(11947,99498),
(11947,99506),
(11947,99507),
(11947,99508),
(11947,99512),
(11947,99547),
(11947,99592),
(11947,99594),
(11947,99647),
(11947,99658),
(11947,99660),
(11947,99667),
(11947,99700),
(11947,99720),
(11947,99771),
(12009,99498),
(12009,99506),
(12009,99507),
(12009,99508),
(12009,99512),
(12009,99547),
(12009,99575),
(12009,99592),
(12009,99594),
(12009,99596),
(12009,99647),
(12009,99658),
(12009,99660),
(12009,99667),
(12009,99694),
(12009,99700),
(12009,99720),
(12009,99771),
(12353,99498),
(12353,99512),
(12353,99547),
(12353,99575),
(12353,99592),
(12353,99594),
(12353,99596),
(12353,99647),
(12353,99658),
(12353,99660),
(12353,99667),
(12353,99694)
-- etc. 365 distinct users, 28 distinct products. 4012 pairings.
答案 0 :(得分:0)
感谢Anon和Gordon Linoff以及我自己的谷歌搜索:这是集合覆盖问题的一个例子,或者甚至更难,解决这个问题是不值得的。我们将采用24组解决方案,其中一些用户一次是18个组的成员。众所周知,这远远不是最小的,但它会起作用,这就是我们所需要的。只有输入阶段需要小心。