In this case we'd store the string "17 18" in the group_membershipscolumn. This is known as a repeating group or a multivalued columnand it has the following problems:82• you might not have enough space if the number of values inthe column grows larger than anticipated• the combination of table name, column name, and key valueno longer specifies a datum• the basic INSERT, UPDATE, and SELECT operations arenot sufficient to manipulate multivalued columns• programmers' brains will have to adapt simultaneously tounordered data in table rows and ordered data inside amultivalued column• design opacity. If you use multivalued columns even once,people will never know what to expect when they look underthe hood of your design; did you use multiple tables toexpress a many-to-one relation or multivalued columns?To get the data model into First Normal Form, in which there are nomultivalued columns, you'd create a mapping table:create table user_group_map (user_id not null references users;user_group_id not null references user_groups;unique(user_id, user_group_id));Note that in Oracle the unique constraint results in the creation of anindex. Here it will be a concatenated index starting with the user_idcolumn. This index will make it fast to ask the question "To which groupsdoes User 37 belong?" but will be of no use in answering the question"Which users belong to Group 22?"A good general rule is that representing a many-to-one relationrequires two tables: Things A and Things B, where many Bs can beassociated with one A. Another general rule is that representing amany-to-many relation requires three tables: Things A, Things B, anda mapping table to associate arbitrary numbers of As with arbitrarynumbers of Bs.5.5 Derivable DataStoring users and groups in three tables seems as though it might beinefficient and ugly. To answer the question "To which groups doesNorman Horowitz belong" we must JOIN the following tables:users, user_groups, user_group_map:If nothing else, a knowledge sharing system provides a means <strong>for</strong>employees at the leaf nodes a hierarchy to converse. Consider theorganization depicted in Figure 1 below. Suppose that a worker inSingapore has a question that could be answered by a worker in DesMoines. The act of finding the coworker and getting assistancerequires going all the way the hierarchy to the chief executive inLondon and then back down a different path through the hierarchy toDes Moines. This bottleneck could be eliminated by eliminating thehierarchy. However, most organizations don't want to eliminate theirhierarchies. It is the hierarchy that enables the corporation to reducemanagement complexity by establishing profit-and-loss responsibilityat intermediate levels. Better to supplement the hierarchy with anin<strong>for</strong>mal mechanism by which the Singapore-based worker can ask<strong>for</strong> help and the Des Moines-based worker can offer it, i.e., aknowledge sharing system.**** insert drawing of corporate hierarchy ****Figure 1: Multinational corporations are organized around acommand-and-control hierarchy. This is good <strong>for</strong> assigning profitand-lossresponsibility but creates in<strong>for</strong>mation flow bottlenecks.Building a knowledge sharing system is one way to facilitatein<strong>for</strong>mation flow among the leaves of the tree.15.3 Exercise 1: Develop an OntologyThe American Heritage Dictionary defines ontology as "The branch ofmetaphysics that deals with the nature of being." Computer scienceresearchers speak of "an ontology" as a structure <strong>for</strong> knowledgerepresentation, i.e., the ontology constrains the kinds of in<strong>for</strong>mationthat we can record (you will be <strong>for</strong>given if you confuse this advancedComputer Science concept with mere data modeling).Your ontology will consist of class definitions and, because arelational database is the source of persistence behind your onlinecommunity, your implementation of this ontology will consist of SQLtable definitions, one table <strong>for</strong> each class. To assist you in developinga useful ontology <strong>for</strong> your community, here are a couple of examples.Example Ontology 1: Computer ScienceCorporations all have knowledge management systems even thoughgenerally they may not have any knowledge. Universities claim tohave knowledge and yet none have knowledge management267
spreadsheet". Other users can comment on the knowledge,submitting text and optional attachments of their own. From thisdefinition it would seem that the discussion <strong>for</strong>um you built earlierwould meet the users' needs. Indeed it is true that an archived-andindexedquestion-and-answer <strong>for</strong>um may serve many of the needs ofa community of practice, a group of people trying to solve similarproblems who can learn from each others' experiences. However,there are a few features beyond a discussion <strong>for</strong>um that anorganization may request, <strong>for</strong> example the following:• links among knowledge "objects" (this is the term used byMBAs in the field)• more structured facilities <strong>for</strong> browsing and searching thanprovided by a raw discussion <strong>for</strong>um, possibly including a linkto an existing structured data set (e.g., in Example 2 below,the list of all airports in the United States)• tracking and rewarding of contributions and reuse15.2 Why do Organizations Want KnowledgeManagement?In any enterprise the skills and experience of a group of workers orstudents will have an approximately Gaussian distribution: a handfulof people who know almost nothing (beginners, incompetents, lazybones), a handful of wizards who know almost everything (old-timers,geniuses, grinds), and a big hump in the middle of people who aremoderately knowledgeable. The managers of the enterprise askthemselves "How much more could we accomplish if all of the peoplein this enterprise were as knowledgeable as the wizards?" Typicallythe initial assumption is that knowledge is finite and this results in theconstruction of a system to contain a mostly static body ofknowledge, to be extracted from the brains of the experts andcodified into a series of files or database rows. Users quicklydiscover, however, that the situation they are facing is not quiteanalogous to the situations described in the "knowledge base" andthe "knowledge management system" comes to be seen rather as a"knowledge mortuary".An organization's second attempt at an in<strong>for</strong>mation system intendedto help beginners and average per<strong>for</strong>mers with the expertise of themost capable is typically dubbed knowledge sharing. In a knowledgesharing system User A has the ability to put a question in front of thecommunity so that Users B, C, and D can write new material and/orpoint A to previously authored articles.select user_groups.group_namefrom users, user_groups, user_group_mapwhere users.first_names = 'Norman' andusers.last_name = 'Horowitz'and users.user_id = user_group_map.user_idand user_groups.user_group_id =user_group_map.user_group_id;To answer the question "Is Norman Horowitz part of the TanganyikanCiclid interest group and there<strong>for</strong>e entitled to their private page" wemust execute a query like the following:select count(*)from user_group_mapwhere user_id = (select user_idfrom userswhere first_names = 'Norman'and last_name = 'Horowitz')and user_group_id = (select user_group_idfrom user_groupswhere group_name ='Tanganyikans')If this is a popular group there is a temptationamong new database programmers to denormalizethe data model by adding a column to the userstable, e.g., tanganyikan_group_member_p.This column will be set to "t" when a user is addedto the Tanganyikans group and reset to "f" when auser unsubscribes from the group. This feels likeprogress. We can answer our questions byquerying one table instead of three. Historically,however, RDBMS programmers have been bittenbadly any time that they stored derivable data, i.e.,in<strong>for</strong>mation in one table that can be derived byquerying other, more fundamental, tables.Inevitably a programmer comes along who is notaware of the unusual data model and writesapplication code that updates the in<strong>for</strong>mation inone place but not another.What if you really need to simplify queries? Use aview:Note the use ofthe _p suffix todenote a booleancolumn. Oracledoes not supporta boolean datatype andthere<strong>for</strong>e wesimulate it with aCHAR(1) that isrestricted to "t"and "f". The "p"in the suffixstands <strong>for</strong>"predicate" andis a namingconvention thatdates back toLispprogrammerscirca 1960.26683
- Page 1 and 2:
SoftwareEngineering forInternetAppl
- Page 3 and 4:
Signature: ________________________
- Page 5 and 6:
end-users. We use every opportunity
- Page 7 and 8:
• availability of magnet content
- Page 9 and 10:
• we want to see if a student is
- Page 11 and 12:
you supply English-language queries
- Page 13 and 14:
What to do during lecturesWe try to
- Page 15 and 16:
The one-term cram courseWhen teachi
- Page 17 and 18:
332• spend a term learning how to
- Page 19 and 20:
Once we've taught students how to b
- Page 21 and 22:
has permission to perform each task
- Page 23 and 24:
UDDIUnixcustomer's credit card. If
- Page 25 and 26:
thousands of concurrent users. This
- Page 27 and 28:
OraclePerlnamed XYZ" without the pr
- Page 29 and 30:
LDAPLinuxbits per color, a vastly s
- Page 31 and 32: FilterFirewallFlat-fileGIF318functi
- Page 33 and 34: when there is an educational dimens
- Page 35 and 36: system. The authors of the core pro
- Page 37 and 38: Sign-OffsTry to schedule comprehens
- Page 39 and 40: scheduling goals that both you and
- Page 41 and 42: Client Tenure In Job (new, mid-term
- Page 43 and 44: ReferencesEngagement ManagementSQL*
- Page 45 and 46: Decision-makers often bring senior
- Page 47 and 48: presentation to a panel of outsider
- Page 49 and 50: 300always been written by programme
- Page 51 and 52: 17.3 Professionalism in the Softwar
- Page 53 and 54: Try to make sure that your audience
- Page 55 and 56: Chapter 17WriteupIf I am not for my
- Page 57 and 58: Suppose that an RDBMS failure were
- Page 59 and 60: analysis programs analyzing standar
- Page 61 and 62: at 9 hours 11 minutes 59 seconds pa
- Page 63 and 64: found" will result in an access log
- Page 65 and 66: 15.18 Time and MotionThe team shoul
- Page 67 and 68: select 227, 891, 'algorithm', curre
- Page 69 and 70: create table km_object_views (objec
- Page 71 and 72: • object-create• object-display
- Page 73 and 74: The trees chapter of SQL for Web Ne
- Page 75 and 76: );274-- ordering within a form, low
- Page 77 and 78: and start the high-level document f
- Page 79 and 80: Example Ontology 2: FlyingWe want a
- Page 81: systems. What would a knowledge man
- Page 85 and 86: Chapter 15Metadata (and Automatic C
- Page 87 and 88: {site url}{site description}en-usCo
- Page 89 and 90: drawing on the intermodule API that
- Page 91 and 92: At this point you have something of
- Page 93 and 94: • description• URL for a photo
- Page 95 and 96: Here's a raw SOAP request/response
- Page 97 and 98: Chapter 14Distributed Computing wit
- Page 99 and 100: conduct programmer job interviews h
- Page 101 and 102: Most admin pages can be excluded fr
- Page 103 and 104: content that should distinguish one
- Page 105 and 106: Chapter 13Planning ReduxA lot has c
- Page 107 and 108: the Internet-specific problem of no
- Page 109 and 110: wouldn't see these dirty tricks unl
- Page 111 and 112: 12.8 Exercise 4: Big BrotherGeneral
- Page 113 and 114: than one call to contains in the sa
- Page 115 and 116: A third argument against the split
- Page 117 and 118: way 1 1/16One might argue that this
- Page 119 and 120: absquatulate 612bedizen 36, 9211cry
- Page 121 and 122: What if the user typed multiple wor
- Page 123 and 124: Chapter 12S E A R C HRecall from th
- Page 125 and 126: long as it is much easier to remove
- Page 127 and 128: features that are helpful? What fea
- Page 129 and 130: made it in 1938)? Upon reflection,
- Page 131 and 132: environment, we identify users by t
- Page 133 and 134:
those updates by no more than 1 min
- Page 135 and 136:
Balancer and mod_backhand, a load b
- Page 137 and 138:
translation had elapsed--the site w
- Page 139 and 140:
It seems reasonable to expect that
- Page 141 and 142:
11.1.5 Transport-Layer EncryptionWh
- Page 143 and 144:
such as ticket bookings would colla
- Page 145 and 146:
give their site a unique look and f
- Page 147 and 148:
It isn't challenging to throw hardw
- Page 149 and 150:
Chapter 11Scaling GracefullyLet's l
- Page 151 and 152:
10.15 Beyond VoiceXML: Conversation
- Page 153 and 154:
Consider that if you're authenticat
- Page 155 and 156:
In this example, we:194• ask the
- Page 157 and 158:
As in any XML document, every openi
- Page 159 and 160:
(http://www.voicegenie.com). These
- Page 161 and 162:
Chapter 10Voice (VoiceXML)questions
- Page 163 and 164:
9.15 MoreStandards information:•
- Page 165 and 166:
9.14 The FutureIn most countries th
- Page 167 and 168:
9.10 Exercise 7: Build a Pulse Page
- Page 169 and 170:
9.6 Keypad HyperlinksLet's look at
- Page 171 and 172:
text/xml,application/xml,applicatio
- Page 173 and 174:
Protocol (IP) routing, a standard H