패키지 목록 (10000 개의 고유 항목 순서)과 특정 패키지의 해당 범주 (100 개의 고유 항목 순서)가있는 SQL 테이블이 있습니다. 주어진 패키지는 둘 이상의 범주에 속할 수 있습니다 (즉, 15000 고유 조합 순서, 즉 테이블 크기 임).sql : 다른 열이 네임 스페이스에서 충돌을 일으키는 경우 열 업데이트
모든 패키지 이름은 고유해야하며 범주 이름과 충돌하지 않지만이 경우에는 나타나지 않습니다.
10k 패키지 중 하나가 100 개 카테고리 중 하나와 동일한 이름을 갖고 있고, 그렇다면 접미어 ,pkg
을 포함하도록 모든 패키지 이름을 수정해야합니다. 네임 스페이스를 공유하고 고유하게 유지할 수 있습니다.
가장 간단한 경우는이 것이로 변환되어야한다
sqlite> select * from categories where value=fullpkgpath;
lang/mono|lang/mono
sqlite> select fullpkgpath, value from categories where fullpkgpath="lang/mono";
lang/mono|devel
lang/mono|lang
lang/mono|lang/mono
:
lang/mono,pkg|devel
lang/mono,pkg|lang
lang/mono,pkg|lang/mono
그러나
, 또한 더 많은이 경우가있을 수 있습니다 간접적 인 충돌 (이 패키지가 속하지 않는 카테고리와 충돌 함) :
이것으로 변환해야 6,sqlite> select * from categories where fullpkgpath="lang/erlang" or fullpkgpath="lang/node";
lang/erlang|lang
lang/node|devel
lang/node|lang
lang/node|lang/python
: lang/erlang
및 lang/node
모두 때문에
lang/erlang,pkg|lang
lang/node,pkg|devel
lang/node,pkg|lang
lang/node,pkg|lang/python
도 스스로 범주 있습니다 :
sqlite> select * from categories where value="lang/erlang" limit 8;
databases/erl-Emysql|lang/erlang
databases/erl-couchbeam|lang/erlang
databases/erl-epgsql|lang/erlang
databases/erl-sqerl|lang/erlang
devel/erl-automeck|lang/erlang
devel/erl-bear|lang/erlang
devel/erl-depsolver|lang/erlang
devel/erl-ej|lang/erlang
sqlite> select * from categories where value="lang/node" limit 8;
databases/node-pg|lang/node
databases/node-sqlite3|lang/node
devel/node-async|lang/node
devel/node-bindings|lang/node
devel/node-buffer-writer|lang/node
devel/node-cloned|lang/node
devel/node-expresso|lang/node
devel/node-fibers|lang/node
나는 오픈 BSD에 sqlite3를하고 perl을 사용하고 있습니다 . 필요한 경우 database은 available on ftp입니다.
왜 단지'추가하지, pkg'을 * 모든 * 패키지 이름의 끝? – ThisSuitIsBlackNot
또한 이름이 고유해야하는 이유는 무엇입니까? 이유가 있기 때문에 별도의 열에 있습니다. – ThisSuitIsBlackNot
다른 네임 스페이스에서 고유하게 액세스 할 수 있도록하려면 고유해야합니다. 모든 패키지에', pkg '를 추가하는 것은 못생긴 일입니다. 충돌하는 이름을 가진 10 개의 패키지 순서 만 존재하기 때문에 10000 패키지의 나머지 부분은 그 때문에 이름을 바꾸는 것이 불공평 할 수 있습니다. – cnst