UniverseUniversity


Home Projects Jobs Clientele Contact

uu


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Database schema [was: UU tools]



It's a C++ approach, with no database support for integrity :(
Object id can be anything, and database can't prevent using course id for say, topic id. Foreign keys to the actual tables wouldn'd work in such situation. :(

The alternative approach is to have separate tables for different relations, like course_acl, topic_acl, etc.. It makes us to have multiple tables, but then we have foreign keys.
In order to satisfy fluffy C++ programmers, however, we may also have a view - a union of all the acl chunks looking as you defined..

2006/9/23, Ilya A. Volynets-Evenbakh <ilya@total-knowledge.com>:
something along the lines of
select user.* from course a, acl b, user.c where a.course_id=b.object_id
and b.user_id=c.user_id and b.access_type = ACCESS_TEACHER;

Alternatively, if access is bitfield, last part would be
b.access&ACCESS_TEACHER != 0


Alexey Parshin wrote:
> Ok, we came to the moment when we have to decide on ACL. Suppose, we
> have the ideal ACL in place. How would SELECT stmt look like, if you
> want to show all teachers for the particular course?
>
> 2006/8/9, Ilya A. Volynets-Evenbakh <ilya@total-knowledge.com
> <mailto: ilya@total-knowledge.com>>:
>
>     Alexey Parshin wrote:
>     > 2006/8/9, Ilya A. Volynets-Evenbakh <ilya@total-knowledge.com
>     <mailto: ilya@total-knowledge.com>>:
>     >> OK. Here are few comments, with the fact it's initial draft in
>     mind,
>     >> in no particular order.
>     >>
>     >> 1. Person -> course relationships.
>     >> Even currently we have more then just student and teacher in
>     our system.
>     >> There are "experts" there are "independent object authors"
>     (creating and
>     >> sharing objects other then courses), and in future there might be
>     >> even more.
>     >> So, I think instead of creating separate table for each of
>     these types,
>     >> we need
>     >> ACL table. Furthermore - this needs to be well thought through
>     - here is
>     >> an idea:
>     >> why don't we make globally unique object IDs, and have single
>     ACL table
>     >> for all
>     >> objects, not just courses. Again - I'm just throwing this
>     random idea
>     >> out here, and
>     >> am not sure what disadvantages are to it.
>     > I really don't like the ideas of ACL and global ids.
>     Why and Why?
>     > Probably, we can
>     > solve this the way unix does - we already have the object owner, we
>     > may also have a group of apprenices :)
>     Not really - we have more then that. Unix permissions are usually
>     rather
>     insufficient in situations with hierarchical access structures.
>     That is why
>     all modern Unices actually have ACLs ;-)
>     >> 2. Naming conventions. I suggest following changes to naming
>     >> conventions:
>     >>     a. All database names should be in singular form
>     >>     b. Do not add group qualifier to table names. i.e. "person"
>     instead
>     >> of "person_list"
>     >>         or "course_keyword" instead of "course_keywords".
>     >>     c. Respectively, we'll need to remove requirement for each
>     table to
>     >> be at least two
>     >>         words.
>     > I have developed several databases. The two of them that use the
>     > convention as it's described now are the most convenient for
>     everybody
>     > who uses them. For the small size database as we are building (I
>     > expect <50 tables) the two-letter prefix is enough to uniquly
>     identify
>     > the field in the database. For the TTS database, with ~120 tables, I
>     > even had to use a mix of two- and three-letter prefixes. Still,
>     when
>     > implementing something or discussing something, it allows to
>     name just
>     > the field name - and everybody understands what you're talking
>     about.
>     > So, I'd like to keep it the way it is.
>     I do not mind prefixes for fields - can you please address exact
>     changes
>     I proposed. Note: this is not to _replace_ your conventions, but
>     rather
>     to add
>     to them.
>     >> 3. problem_solutions table
>     >>     a. Why is it named that way? Sounds like "problem" is more
>     >> appropriate
>     >>     b. ps_xml - this is bit of misnomer, since not all problems
>     will
>     >> have XML in this field.
>     > It's a table of solutions for a problem. Come up with better
>     name. As
>     > for XML - I didn't come accross the description of how it should be
>     > stored. XML is the universal way, a container.
>     It stores more then solution, it stores problem itself as well. So
>     name
>     is just
>     "problem". As for XML, There are other, simpler formats, for
>     simpler tasks.
>     So, it is completely dependent on problem solver.
>     >> 4. What is "study_testing" table?
>     > There is a reference to the course testing, or something like this.
>     > I'm not sure - how it's related to anything yet.
>     >
>     >> 5. Documentation: can you add comments (fill out "Documentation"
>     >> property) for all
>     >>     tables, describing in short its purpose, and semantic
>     relationships
>     >> with others, where
>     >>     it may not be 100% obvious?
>     > I can and I will - as soon as we get the general skeleton more
>     or less
>     > formed.
>     >
>     >> 6. Keywords: what is intent behind all the _keywords tables?
>     > These are just proxy tables between actual keywords table and an
>     > object, just two foreign keys per row. I didn't want to store
>     separate
>     > lists of keywords per object type, however it's possible and I
>     don't
>     > insist much.
>     I still don't understand what it is for. Can you point me to
>     chapter in
>     specification, that prompted it?
>     >> Another thing: I'm going to set up SVN repository for UU some
>     time soon,
>     >> so we'll put
>     >> all these diagrams in there. Let's see how well can we cope with
>     >> conflicts in that ;-)
>     > Yeah, I thought about it. The XMI file is a text file (XML) - so it
>     > should stand corrections (merges) through CVS. However, I have
>     > discovered, that simply removing one important section may make the
>     > XMI file unreadable for umbrello. It reads such file, but shows no
>     > diagram - only object types and tables (on the left).
>     Yeap - that is what I'm worried about. It's XML, but it's machine
>     XML.
>
>     --
>     Ilya A. Volynets-Evenbakh
>     Total Knowledge. CTO
>     http://www.total-knowledge.com
>
>
>
>
> --
> Alexey Parshin,
> http://www.sptk.net

--
Ilya A. Volynets-Evenbakh
Total Knowledge. CTO
http://www.total-knowledge.com




--
Alexey Parshin,
http://www.sptk.net

Authoright © Total Knowledge: 2001-2008