handdator

Visa fullständig version : Fråga till utvecklare angående databasstrukturen



m09036
2017-05-19, 21:15
Jag har diverse behov av att exportera data med full kontroll över layouten ner till enskilda tecken för import i andra program så jag jobbar med databasen direkt via SQL. Just nu försöker jag extrahera data med uppgifter för att bygga en stamtavla men eftersom jag inte hittar dokumentation över databaslayouten så har jag fått pröva mig fram och nu kört fast. Kortfattat behöver jag en metod att hitta alla barn till en specifik individ och sortera barnen i kronologisk ordning.

Som exempel väljer jag en person i min egen databas som har tre olika relationer med barn i varje. Först tar jag reda på vilka familjer individen ingår i:

SELECT DISTINCT FamilyId FROM ParentRelations WHERE PersonId=5003718;
FamilyId
5003716
5004100
5004141

Med familjeidentiteterna som grund kan jag nu ta fram alla barn som ingår i någon av dem:

SELECT * FROM Children WHERE FamilyId IN (5003716, 5004100, 5004141);
PersonId|FamilyId|ChildOrder|FamilyOrder|Relevance |Security|ChangeTime
5004081|5003716|0|0||0|42824.8541712384
5003400|5003716|1|0||0|42824.8541712384
5004087|5003716|2|0||0|42824.8541712384
5004093|5003716|3|0||0|42824.8541712384
5004111|5003716|4|0||0|42824.8541712384
5004076|5004100|0|0||0|42824.8541717824
5004071|5004141|0|0||0|42824.8541717824

Jag inser att det finns en kolumn ChildOrder som låter mig sortera barnen i kronologisk ordning per familj men var i databasens tabeller finns information om den kronologiska ordningen på själva familjerna? Jag måste först sortera dessa och kolumnen FamilyOrder är 0 rakt igenom så den kan jag inte använda mig av. Jag har letat och letat bland tabellerna men inte hittat hur och var denna information kodas.

Eller missar jag något uppenbart här? Finns det något sätt att direkt ta fram alla barn till en individ, i kronologisk ordning, utan att behöva gå omvägen via FamilyId?

Mvh
Morgan Wesström

m09036
2017-05-20, 18:56
Jag svarar mig själv här eftersom jag till slut hittade den eftersökta informationen i tabellen Partners.

SELECT * FROM Partners WHERE FamilyId in (5003716, 5004100, 5004141) AND PersonId=5003718 ORDER BY SortOrder;
PersonId|FamilyId|SortOrder|Role|ReplacePartnerNam e|PartnerName|Relevance|Security|ChangeTime
5003718|5004141|0|0|0|||0|41757.9465277778
5003718|5004100|1|0|0|||0|41757.9305555556
5003718|5003716|2|0|0|||0|41757.6770833333
Som mycket ovan hobby- och SQL-programmerare tar jag ändå tacksamt emot en flödesschema över hur Disgen genererar sin interna stamtavla i det grafiska gränssnittet, om sådan finnes. Det finns säkert en mycket enklare logik att använda för att generera informationen jag försöker sammanställa.

ollfa
2017-05-21, 13:48
Det enkla svaret på din fråga om kronologisk ordning på barnen är att den inte finns i databasen. De ordningar som finns är de som användaren definierar när hen registrerar barnen. Där finns som du gissat barnens ordning i familjen i fältet ChildOrder i tabellen Children. I tabellen Partners finns i fältet SortOrder som anger familjens ordning för personen (föräldern). Det kronologiska måste du skapa själv, eftersom det inte är säkert att det finns några tidsuppgifter alls för en person.

Och nej, det finns ingen dokumentation hur något görs i Disgen. Jag har själv inte en aning om hur stamtavlan byggs, den fanns långt före min tid och vi har inte behövt göra om den.

m09036
2017-05-21, 16:38
Tack Olle. Vi är helt överens. Jag uttryckte mig otydligt och menade med kronologisk ordning den manuella ordning jag skapar när jag registrerar relationerna. Informationen i Children och Partners är tillräcklig för mig för att åstadkomma det jag vill.