我需要模擬人羣,我無法找到一種方法來設計表格來高效地完成它。我如何模擬人羣?
組可以被認爲是集合,一個或多個人的無序集合,每個組應該由其組件唯一標識。
編輯:一個人可以是多個組的一部分。
我的第一次嘗試看起來像這樣。 包含系統管理的所有「人員」的表格。
table Groups(
group_id int,
group_name varchar,
(other data...)
)
,並與個人和羣體
table gropus_persons (
person_id int,
group_id in
)
之間的關聯表這樣的設計不符合此合身:
table Persons(
id int,
name varchar,
(other data...)
)
包含組和所有組屬性表因爲很難編寫查詢來從組件列表中檢索組標識符。
我能想出發現由人組成的小組唯一的查詢(1,2,3)看起來是這樣的:
select *
from groups g
where
g.group_id in (select group_id from gropus_persons where person_id = 1)
and g.group_id in (select group_id from gropus_persons where person_id = 2)
and g.group_id in (select group_id from gropus_persons where person_id = 3)
and not exists (select 1 from gropus_persons where group_id = g.group_id and person_id not in (1,2,3))
的問題是,部件的數量是可變的,所以我只能使用動態生成的查詢,並在每次需要查找新組時爲每個組件添加子查詢。
有沒有更好的解決方案?
謝謝您的幫助!
搜索關於關係部門的變體。 – philipxy
如果我告訴過你,個人和團體真的是一個人呢? (請參閱派對模特) –
如果兩個小組由同一個人組成,該怎麼辦?也就是說,如果真的有這些人,你是否真的想要這個團體?更一般地說,人們如何組織成團體的限制是什麼?也就是說,groups_persons(除了大概是FKs還是Persons和Groups)還有什麼限制嗎? – philipxy