[OPEN-ILS-DEV] Monograph Parts
Dan Wells
dbw2 at calvin.edu
Wed Feb 16 16:44:06 EST 2011
Hello Mike,
>>> On 2/16/2011 at 12:37 PM, Mike Rylander <mrylander at gmail.com> wrote:
> On Tue, Feb 15, 2011 at 4:35 PM, Dan Wells <dbw2 at calvin.edu> wrote:
>> Hello Mike,
>>
>> At first glance I think this is a very welcome development, and I have a
> just a few comments. First, I would advocate for some kind of a
> 'label_sortkey' on biblio.monograph_part. Even if all it did was pad
> numbers, it would solve 95% of 'part' sorting problems.
>
> That's a very good idea ... I will make it so. Proposed initial
> algorithm: strip non-spacing marks, force everything to upper case,
> remove all spaces, left-pad numeric strings with '0' to 5 characters.
> Thoughts?
Sounds good to me.
>
> (NOTE: I'm kinda loath to invent something like the call number
> classification normalizer setup for this, and I don't think that will
> work directly with these strings. And without some field testing we
> won't do a good jobs of covering our bases with anything non-trival.)
>
>> Second, and perhaps this was already discarded as a simplification measure,
> but I think we should consider dropping the primary key on
> asset.copy_part_map.target_copy to allow for multiple parts per copy. This
> would not only better reflect reality in certain cases, but I think it could
> also lay some groundwork for future bound-with functionality (put 'part's on
> your boundwith records (or let the map point to a part *or* a record), then
> sever the link from call_number to record).
>>
>
> Before spec'ing out this, I'd already begun working up something
> separate to cover (among several other use-cases) bound-with. I'll
> post that soon (hopefully today). The short version of why I
> intentionally kept bound-with and monograph parts separate is that the
> former is about aggregating multiple bib records (several metadata
> records involved in one physical thing) and the latter is about
> dis-integration (one metadata records covering multiple physical
> things). While we /could/ design a subsystem that goes both ways, the
> implicit complexity (and split-brain logic) required outweighs both
> the design and maintenance simplicity of single-function
> infrastructure. I'm normally in favor of infrastructure re-use, but
> in this case the concepts being modeled have opposite purposes (from
> the bib record point of view).
>
> Is that too ramble-y to make sense? ;)
>
It makes good sense, but I think we could ultimately benefit by putting less
emphasis on a bib record point of view and tilting things a bit more towards
the item point of view. From the item perspective these proposals are modeling
the same thing, a mapping of items to contents, and the fewer ways we have to
do that, the better (as long as we cover all the cases). With a simpler
mapping table of item to record(-part), we easily traverse in either direction,
and we have ultimate flexibility. So, if I have a bib record on my screen, and
I ask the question, "which items' contents does this record represent?", we can
simply go record->part(s)->item(s). On the other hand, if I have an item, and
I ask the question "what are the contents of this item?", we can go
item->part(s)->record(s). Naturally we can traverse related records (via
items) and related items (via records/parts) as well. This also eliminates the
primacy of call numbers when managing items, which I see as a benefit.
Or stated more simply, I feel our foundational assumptions in relating items
to records should be:
1) Records describe contents
2) Items contain contents
3) Item content boundaries can overlap record content boundaries in various
ways
All that said, I know from experience to trust your judgement (most of the
time ;). For my own future benefit, do you have cases already in mind where
this flexibility would end up causing 'split-brain' logic? (Or maybe I have a
split brain...)
Also, I think this quote from Elaine deserves a bit more attention:
>> I'm particularly interested in how this would function in a consortium
>> like PINES where different libraries might process a multipart set
>> differently. For example, one library might process and circulate a 3
>> part DVD set as one item, where another might put each in a separate
>> container with a separate barcode.
If we want the complete-set copy from Library A to conclusively fulfill a
P-level hold from Library B, we will want to allow multiple parts per copy. Or
am I missing something?
Finally, for those it may help, here is a quick version of a simple
item-record schema. The part concerning copy_type is optional, but I wanted it
to show a more complete replacement for the proposed tables:
CREATE TABLE biblio.part (
id SERIAL PRIMARY KEY,
record BIGINT NOT NULL REFERENCES biblio.record_entry (id),
label TEXT NOT NULL,
label_sortkey TEXT NOT NULL,
CONSTRAINT record_label_unique UNIQUE (record,label)
);
CREATE TABLE asset.copy_contents_map (
id SERIAL PRIMARY KEY,
--record BIGINT NOT NULL REFERENCES biblio.record_entry (id),
--optional path to partless items, or we force records to have at least one
part
part INT NOT NULL REFERENCES biblio.part (id) ON DELETE CASCADE
target_copy BIGINT NOT NULL -- points to asset.copy
);
CREATE TABLE asset.copy_type (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL UNIQUE -- i18n
);
INSERT INTO asset.copy_type (name) VALUES
(‘Bound Volume’),
(‘Bilingual’),
(‘Back-to-back’),
(‘Set’),
(‘Multi-part’); --generic type
-- ALSO:
-- asset.copy grows a nullable reference to asset.copy_type
-- asset.call_number.record is nullable (should be null for new-style copies)
Dan
> --miker
>
>> Dan
>>
>> --
>>
>
*****************************************************************************
> ****
>> Daniel Wells, Library Programmer Analyst dbw2 at calvin.edu
>> Hekman Library at Calvin College
>> 616.526.7133
>>
>>
>>>>> On 2/15/2011 at 3:09 PM, Mike Rylander <mrylander at gmail.com> wrote:
>>> I'll be starting work on an implementation of Monograph Parts (think:
>>> DIsks 1-3; Volume A-D; etc), well, right now, in a git branch that
>>> I'll push to http://git.esilibrary.com/?p=evergreen-equinox.git;a=summary
>>> but I wanted to get the basic plan out there for comment. So,
>>> attached you'll find a PDF outlining the plan. Comments and feedback
>>> are welcome, but time for significant changes is slim.
>>>
>>> This is not intended to cover every single possible use of the concept
>>> of Monograph Parts, but I believe it is a straight-forward design that
>>> offers a very good code-to-feature ratio and should be readily used by
>>> existing sites after upgrading to a version containing the code.
>>
>>
>
More information about the Open-ils-dev
mailing list