Development
From SharedTree Wiki
Below I am going to try to disclose as much as I can about the programming code and logic. My hope is that other users will be able to both validate as well as add to the decisions I've already made about how SharedTree functions.
Please see Known Issues
Contents |
Server
- Programming Language: PHP
- Database: MySQL
- OS: Windows (this will soon change to Linux)
- Webserver: IIS (changing to Apache)
I'm most comfortable with LAMP and should be switching back shortly. I am in the process of looking for a new service provider. Below are a few that I've found.
- http://viaverio.com/index.cfm?page_id=762
- http://www.gate.com/vps/vpsu100.htm
- https://www.godaddy.com/gdshop/hosting/virtual.asp
- http://www.ixwebhosting.com/index.php/v2/pages.planBusinessPlus
I need to have or be able to get all of these features:
- Linux
- Apache 2
- MySQL 5
- 10 GB or more of space
- 256 MB RAM or more
- cronjobs (and probably shell access)
- 10 or more domain names
See Special:Version for version information.
Database Design
The genealogical data is centered around 3 main concepts: Person, Family, Event. All three of these tables have history tracking that enables time slicing. This means that when a change is made to a record, the entire row is copied, the change is applied to the new row and start/stop datetimes are set to know when the change is effective. Although this is more complicated when saving, it makes it super easy to read records as of any point in time as well as prune historical records when necessary.
Person
Person represents a single individual in history. Duplicate people are highly discouraged and largely impossible to maintain. Person and Individual mean the same thing on SharedTree.
Family
In the most simple terms, a Family is the union of two individuals (people). This could represent a legal marriage, homosexual partners, or just an unplanned pregnancy with a sexual partner. It's simply a link between person1 and person2. It could also be boy friend/girl friend relationship but that's probably not a very useful relationship to track for genealogy.
Every person can link to a biological family or an adopted family (adoptions are not implemented yet). You cannot link a person to a father without a marriage/family first.
Event
Events are significant activities that occur to an individual or family. There are a list of standard events such Birth, Death, and Marriage. There are also several religious events such as Baptism and LDS Endowment. Each event can have a single date (not ranges), location, and a half dozen other parameters including Source and Notes.
Stats
I may add a stats page:
SELECT YEAR(creation_date), MONTH(creation_date), count(*) FROM tree_person WHERE actual_start_date <= NOW() AND actual_end_date > NOW() GROUP BY YEAR(creation_date), MONTH(creation_date)
