Här är en databasstruktur för att spåra ett släktträd, tillsammans med förklaringar och överväganden:
tabeller:
1. Människor
- id (int, primärnyckel) :Unik identifierare för varje person.
- first_name (varchar) :Personens förnamn.
- Last_Name (varchar) :Personens efternamn.
- Birth_Date (datum) :Födelsedatum.
- death_date (datum) :Dödsdatum (Nullable).
- kön (enum) :Kön (t.ex. 'man', 'kvinnlig', 'annan').
- anteckningar (text) :Ytterligare anteckningar eller information om personen.
2. relationer
- id (int, primärnyckel) :Unik identifierare för varje relation.
- person_id (int) :Utländsk nyckel som hänvisar till "People" -tabellen (förälder).
- relaterad_person_id (int) :Utländsk nyckel som hänvisar till tabellen "People" (barn).
- relation_type (enum) :Typ av relation (t.ex. 'förälder', 'barn', 'make', 'syskon').
- order (int) :Valfritt fält för att spåra barnens ordning (för flera barn av samma föräldrar).
3. platser
- id (int, primärnyckel) :Unik identifierare för varje plats.
- namn (varchar) :Platsens namn (t.ex. stad, stad, land).
- typ (enum) :Typ av plats (t.ex. 'stad', 'land', 'stat').
4. evenemang
- id (int, primärnyckel) :Unik identifierare för varje händelse.
- person_id (int) :Utländsk nyckel som hänvisar till tabellen 'People'.
- event_type (enum) :Typ av händelse (t.ex. 'födelse', 'äktenskap', 'död').
- event_date (datum) :Datum för evenemanget.
- place_id (int) :Utländsk nyckel som hänvisar till tabellen "platser".
- anteckningar (text) :Ytterligare anteckningar om händelsen.
Förklaring:
* Människor Tabell: Kärntabellen håller grundläggande information om varje individ i släktträdet.
* Relationer Tabell: Definierar hur människor är anslutna. Denna tabell låter dig modellera komplexa familjestrukturer (t.ex. styvföräldrar, adopterade barn etc.)
* Platser Tabell: Ger information om de platser som är förknippade med människor och evenemang (t.ex. födelseplatser, dödsplatser).
* Händelser Tabell: Registrerar viktiga händelser i en persons liv, såsom födelse, äktenskap och död.
Fördelar med denna struktur:
* flexibel: Databasen kan rymma olika familjestrukturer och relationer.
* skalbar: Lätt att lägga till nya individer och evenemang när släktträdet växer.
* normaliserad: Minskar dataredundansen och förbättrar effektiviteten.
Överväganden:
* Datatyper: Välj lämpliga datatyper för varje kolumn (t.ex. `int`,` varchar`, `date`,` enum`).
* relationer: Se till att relationer verkställs korrekt med utländska nycklar.
* Normalisering: Överväg ytterligare normalisering (t.ex. skapa separata tabeller för adresser, yrken) för stora databaser.
* Datainmatning: Utveckla ett användarvänligt gränssnitt för att ange data i databasen.
* Visualisering: Använd verktyg (t.ex. grafbibliotek) för att visualisera släktträdet från databasen.
Exempel Frågor:
* Lista alla barn till en specifik person:
`` `SQL
Välj p.first_name, p.last_name
Från människor s
Gå med i relationer R på p.id =r.related_person_id
Där r.person_id =
Och r.relationship_type ='barn';
`` `
* Hitta alla människor födda i en specifik stad:
`` `SQL
Välj p.first_name, p.last_name
Från människor s
Gå med i evenemang E på p.id =e.person_id
Gå med platser PL på e.place_id =pl.id
Där E.Event_type ='födelse'
Och pl.name ='New York City';
`` `
Obs: Detta är en grundläggande ram. Du kan behöva lägga till eller ändra tabeller baserat på dina specifika krav och komplexiteten i ditt släktträd.