[Novalug] Database advice
John Holland
jbholland at gmail.com
Mon Mar 15 16:07:58 EDT 2010
That's pretty weird about the multi-father litters. Learn something
every day.......
As far as fixed number of columns, you can always avoid that by having a
many-to-many relationship.
For instance if a litter could have any number of fathers, you give the
litter an ID (could be autogenerated), have a fathers table (which is
unlimited) and have a "join table" which has in its two columns a litter
ID and a father ID. This allows any number of connections between
litter(s) and father(s). To get the litters a father sired (even part
of), you would
SELECT litters.ID, litters.littername
from litters, join_table
where litters.id = join_table.litter_id
and join_table.father_id = 123.
(to get the litters of father id 123)
(the table should have a better name, like litters_fathers)
You could use OR clauses and things to get the litters from several
fathers, or flip fathers and litters
in the query to get the fathers who participated in a (set of)
litter(s). (Still a little weird for me:))
Although the queries to do things this way seem more complex, if you
ever bump into one of those
"I think there won't be more than 4 of these" limits with a case that is
5+ that will be much worse.
On 03/15/2010 03:54 PM, Bonnie Dalzell wrote:
> On Mon, 15 Mar 2010, John Holland wrote:
>
>> I was tempted to weigh in, now I find it too tempting not to.
>>
>> This situation seems to me to need a DOGS table where each dog has a
>> Father and Mother fields.
>> Those will contain IDs to point to the appropriate dogs, or NULL or
>> some signature value when there is no record to rely on.
>>
>> This is not as flexible as could be designed, but I think it would be
>> straightforward and perform well. Biology imposes a certain structure
>> to the data..........
>>
>> Since it sounds like Bonnie already has IDs for each dog, she should
>> be able to use those. I would make the database autogenerate a
>> primary key of its own though, it can just be ignored but it might be
>> useful someday and costs nothing.
>>
>> Litters could be identified by birthday, without requiring an
>> addtional table (mom + birthday = unique litter) , or there could be
>> an additional Litter table with links from the dogs to that as well.
>> (a dog has a Litter ID attribute)
>> And probably links from the litter table to the mother & father dogs.
>
> Actually now that we do DNA parent testing on litters it is possible
> to have pups with different fathers born on the same day from the same
> mother. In fact in a rare breed such as I own there are advantages of
> having dual sired litters in terms of preserving genetic diiversity in
> the breed without having to produce more pups than you can find homes
> for or having to cull the pups that you are not using in a breeding
> program to produce the next generation. We have had a number of
> registerable dual sired litters now. Each sire's offspring is
> registered as a separate litter despite the common mother. Obviously
> when a sire is popular you cannot id all his litters just by
> birthdate. So both parents are needed.
>
>>
>> When humans get involved, you could have owners and breeders who
>> would complicate things; dogs could change hands or there could be
>> multiple owners or breeders. These would require join tables,
>> possibly with start and end times as part of the join attribute.
>
> Yes indeed. also many dogs have multiple owners or breeders because
> people form co-operative groups to breed a litter or to own an
> exceptional show dog or an exceptional athletic performance dog. So i
> need an owners table with dog id and then multiple owner id's.
>
> The thing I am not sure about is that I think the table has to have a
> predetermined number of columns - it is rare for more than 4 people to
> own the dog or be listed as breeders. I do not think the table can be
> open ended.
>
> The alternative is to make the owner or breeder list one entry with
> the individual people_id numbers separated by something like the pipe
> symbol and then use a program module to process the contents of the
> cell to list the individual people by name. This is what i decided to
> do when I was using a flat file for the dog db. I had a separate
> people flat file with each person having a different id number.
>
> It does have the disadvantage of making corrections difficult due to
> having to update all those cells.
>
> The real world really does get complicated.
>
>>
>>
>> Dog <------- owned from 1/1/2005 to 1/01/2006 --------> owner Joe
>> Smith
>> <------- owned from 1/1/2006 to present ----------> owner Fred
>> Jones
>> <------- owned from 1/1/2006 to present ----------> co owner
>> Joe Jones
>> so the records for the middle part are like
>>
>> -------------------------------------------------------------
>> DogId | start date | end date | ownerId
>> --------------------------------------------------------------
>>
>> OK, I guess that's enough for me to throw out there..................
>>
>>
>> John
>>
>>
>> On 03/15/2010 02:57 PM, Maxwell Spangler wrote:
>>> On Mon, 2010-03-15 at 11:37 -0400, Bonnie Dalzell wrote:
>>>
>>>> each dog has a unique entry into the db
>>>>
>>>> one of the aspects of the dog's record is that, when they are
>>>> known, it
>>>> has a mother and a father
>>>>
>>>> the mother and father of course also have their own records in the db
>>>>
>>>> how do you link the offspring's record to the parent's records?
>>>>
>>>> do you need to do a separate table of "litters" where the key is a
>>>> litter
>>>> id and the 3 information cells are father record number, mother record
>>>> number and date of birth or can you make cells (mother, father) in
>>>> the dog
>>>> record that refers to the parents record id in the dog records table?
>>>>
>>> I got stuck on this last night and I'd like to see what others think.
>>>
>>> In my opinion, if you make a DOG record to describe a dog, then all the
>>> fields in that record should be focused on describing the dog.
>>> That's a
>>> redundant statement that reinforces the point: try your best only to
>>> put
>>> fields in the dog record that describe the dog and no other data. This
>>> helps normalization because all these facts about the dog will be
>>> stored
>>> once and only once in the database: right next to the dog being
>>> described and they won't be repeated:
>>>
>>> do:
>>>
>>> dog<- lab, black, tall, 100#, male, born 01/01/08
>>>
>>> don't:
>>>
>>> dog<- lab, black, owner's:mary, owner:club member, owner: pays with CC
>>>
>>> In that example, the owner information should be in an owner record
>>> where the fields describe the owner more in detail. Otherwise, if the
>>> owner has two dogs, you're repeating information in two places (the two
>>> dog records) and this can become a big problem later.
>>>
>>> I would, therefore, make a 'litters' record that describes a litter
>>> event or relationship. Give it a unique litter ID, then describe
>>> anything related to it and link it to each dog and the mother and
>>> father.
>>>
>>> I would love to see some others give examples of SQL code to show
>>> linking a litter record with a single mother from the dog table,a
>>> single
>>> father from the dog table and multiple children. There are a few ways
>>> to do this I imagine and I'm eager to learn what is available...
>>>
>>> hth Bonnie,
>>>
>>>
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Bonnie Dalzell, MA
> mail:5100 Hydes Rd PO Box 60, Hydes,MD,USA
> 21082-0060|EMAIL:bdalzell at qis.net
> Freelance anatomist, vertebrate paleontologist, writer, illustrator, dog
> breeder, computer nerd & iconoclast... Borzoi info at www.borzois.com.
> HOME www.batw.net ART bdalzellart.batw.net BUSINESS
> www.boardingatwedge.com
>
More information about the Novalug
mailing list