作者pakker (找尋蔚藍天空)
看板PHP
標題Re: [請益] 有點複雜的問題(內詳)
時間Wed Jul 18 20:26:54 2007
※ 引述《derekhsu (斷頭不過碗大疤)》之銘言:
: ※ 引述《dinos (守護神)》之銘言:
: : 順道問一下,若是 relation 超過 64 種,那 relation 要怎麼處理比較好呢?
: : 用 char binary 嗎?
: 有一個比較快的方法,直接作第三階正規化把Ralational Table建出來:
: 這需要三個Table,例:
: 1.PEOPLE 紀錄人員
: [ID], NAME, .....
: 2.RELATION 記錄關係的種類
: [ID], RELATION
: 3.RELATION_PEOPLE 紀錄人與人間關係的關聯資料表
: [PEOPLE_ID_SOURCE].[PEOPLE_ID_TARGET],[RELATION_ID]
: 建出來的表比較複雜,但其實是比較符合正規化原則,也比較好進行操作的
請問我要找出是同學又是仇人又是鄰居
一次滿足三種條件的所有人
該怎麼進行操作?
正規化目的在減少重複的資料,資料處理的效率常常會隨之下降,
甚至會在正規化完之後,為了效率,把某些特定表格去正規化.
但在這邊用正規化,不僅沒有減少資料量,查詢也不是很方便?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.24.164
1F:推 knockout:select * from people,relation,relation_people where 07/18 22:48
2F:→ knockout:people.id = relation.id and relation.relation = 07/18 22:49
3F:→ knockout:relation_people.relation_id where 07/18 22:50
4F:→ knockout:relation_people.people_id_target in (查詢的關聯性); 07/18 22:51
5F:→ knockout:第3行的WHERE打錯了 是 and .. 07/18 22:53
6F:→ knockout:做正規化的確會增加效率 ~~ select時間以資料筆數愈多 07/18 22:53
7F:→ knockout:差異愈大 ~ 07/18 22:54
8F:→ knockout:最後 .. 這是PHP版 ... 不是資料庫版 =_= 07/18 22:55
9F:推 leosirius:厄樓上的SQL語法跟原po要的答案其實不一樣.. 07/19 10:18
10F:推 knockout:我怎麼知道他要定義的仇人 鄰居是怎麼定 -.- 07/19 10:32
11F:→ knockout:反正關聯性都在第三個TABLE ~~ 所以我用in 來做查詢~ 07/19 10:32
12F:→ knockout:如有誤 ~~ 請更正 ~~ Y 07/19 10:33
13F:推 leosirius:我意思是IN沒辦法做到原po要的關聯性.. 07/19 11:11
14F:→ leosirius:我的想法是select出同學、仇人、..然後做intersect 07/19 11:12
15F:推 knockout:喔 他是說又是仇人 又是鄰居又是同學喔 07/19 11:39
16F:→ knockout:那要改成 AND relation_people.people_id_target = 1 AND 07/19 11:39
17F:→ knockout:relation_people.people_id_target = 2 AND 07/19 11:40
18F:→ knockout:relation_people.people_id_target = 3 07/19 11:40
19F:→ knockout:呃 我錯了 上面請忽略掉 ~_~" 07/19 11:46