====== Part Database ====== Die PartDatabase (im folgenden PartDB) soll eine einfache Möglichkeit zur Verwaltung von Bauteilen (elektrisch, mechanisch, optisch, etc.) sein. Als Grundfunktion stellt sie ein Inventar von Teilen zur Verfügung. Erweiterte Funktionen wie Baugruppenverwaltung und Bestellungserzeugung folgen. ===== Struktur ===== Die Struktur der Datenbank lässt sich wie folgt zusammenfassen: //Gruppen von Dingen mit Eigenschaften.// Eigenschaften mit ihren Einheiten und Werten werden über die ''%%attributes__%%''-Tabellen definiert. Die Bezugsquelle hat eine Sonderrolle und wird nicht in Attributen sondern in einer eigenen Tabelle (''distributors'') abgelegt. Die äussere Form der Teile erhält ebenfalls eine Sonderrolle und wird über die ''%%shape__%%''-Tabellen detailliert. Die Zuordnung von Attributen, Distributoren und der Form erfolgt über Relationstabellen mit Fremdschlüsseln. === Benennungskonventionen=== Die folgenden Konventionen zur Bennenung von Tabellen und Schlüsseln dienen der Übersichtlichkeit. Sie sind, soweit möglich, strikt einzuhalten. == Tabellen == In Tabellennamen werden die Worte mit Unterstrichen getrennt. Der Gruppenname von Tabellen wird mit zwei Unterstrichen vom Rest des Namens getrennt um in phpMyAdmin die Ordnerdarstellung zu ermöglichen. Z.B.:\\ ''part''\\ ''%%part__variant%%''\\ ''%%part__variant_alternative%%'' == Schlüssel == Keys: ''key:tablename.field'' Unique Keys: ''idx:tablename.field1,field2,...,fieldN'' Foreign Keys: ''fk:referencingTable.referencingField>referencedTable.referencedField'' (Die > zwischen ''referencingField'' und ''referencedTable'' beachten.) ==== Eigenschaften (Attribute) ==== Die Eigenschaften der Teile werden über Attribute definiert. === Attribut Einheiten === Attribute-Einheiten (Tabelle ''%%attribute__units%%'') haben die folgenden Felder: * Name (''name''): Ausgeschriebener Name der Einheit (z.B. Ampere) * Symbol (''symbol''): (Physikalisches) Symbol für die Einheit (z.B. A) === Attribute === Attribute (Tabelle attributes) haben die folgenden Felder: * Name (''name'') : Ausgeschriebener Name des Attributs (z.B. Ausgangsstrom) * Symbol (''symbol'') : Symbol bzw. Abkürzung für das Attribut (z.B. Iout) * Art (''value_type'') : Art des Attributs (s. [[part_db#attributarten|Attributarten]]) * Einheit (''unit''): Einheit des Attributs (Fremdschlüssel aus Tabelle ''%%attribute__units%%'') == Attributarten == Die Art des Attributs kann eine der folgenden sein: * ''NUMBER'' : Eine Zahl (int oder float) * ''TEXT'' : Eine Zeichenkette * ''ENUM'' : Ein Wert aus einer Liste (s. [[part_db#Attributwertlisten|Attributwertlisten]]) * ''IMAGE'' : Ein Bild (Falls nur Dateiname: lokal abgelegtes Bild in einem Ordner mit Namen des Attributs) * ''FILE'' : Eine Datei (Falls nur Dateiname: lokal abgelegte Datei in einem Ordner mit Namen des Attributs) * ''URL'' : Eine URL Je nach Art des Attributs kann die Darstellung in der GUI gewählt werden (Formatierung, Icon, etc.) == Attributwertlisten == Für jedes Attribut der Art ''ENUM'' gibt es in der Tabelle ''%%attribute__values%%'' einen oder mehrere Einträge, die die Auswahlmöglichkeiten definieren. Jeder Eintrag dieser Tabelle hat die Felder: * Attribut (''attribute''): Attribut zu dem der Wert gehört (z.B. Farbe) * Wert (''value''): Einer der Werte für dieses Attribut (z.B. Blau) Bei Attributen mit (einigermaßem) kleinem Wertebereich ist es sinnvoll, die möglichen Werte fest zu hinterlegen. So werden doppelte Einträge durch Unterschiede in der Schreibweise vermieden. ==== Typgruppen & Typen ==== Um die Einträge zu kategorisieren und die Navigierbarkeit der Datenbank zu verbessern werden die Teile Typen zugeordnet. Die Typen sind in Typgruppen zusammengefasst. === Typgruppen === Typgruppen (Tabelle ''%%part__type_groups%%'') haben die folgenden Felder: * Name (''name''): Name der Typgruppe === Typen === Typen (Tabelle ''%%part__type%%'') haben die folgenden Felder: * Name (''name''): Name des Typs * Gruppe (''group''): Name einer Typgruppe.(Fremdschlüssel auf Tabelle ''%%part__type_groups%%''). * Formgruppe (''shape_type_group''): Name einer Formtypgruppe. Die Referenz auf ein Formtypgruppe ordnet einem Teiletypen eine Gruppe von Formtypen zu. Die Auswahlmöglichkeiten in der GUI können so auf sinnvolle Werte beschränkt werden. Z.B. wird dem Typ //Schraube// die Formtypgruppe //Mechanische Bauteile// zugeordnet. Bei der Auswahl des Formtyps für eine Schraube werden so keine Elektronikbauteilformen angezeigt. ==== Distributoren ==== In der Tabelle ''distributors'' werden die Bezugsquellen der Teile abgelegt. Über die Relationstabelle ''%%part__variant_distributors%%'' werden jeder Teilvariante einer oder mehrere Distributoren zugeordnet. Die Distributoren haben folgende Felder: * Name (''name''): Name des Lieferanten (z.B. Farnell) * Versandkosten (''shipping_cost''): Versandkostenbetrag (z.B. 4,95€) * Freiversandgrenze (''free_shipping_limit''): Betrag, ab dem der Versand kostenlos ist (z.B. 50€) * Webseite (''website''): URL der Lieferantenwebsite (z.B. http://de.farnell.com) * Produkturlmuster (''product_url_pattern''): URL-Muster zur Erzeugung von Produktlinks (z.B. http://de.farnell.com/{part_id} ===== Formtypen & Formtypgruppen ===== Allen Bauteilen muss eine Form zugeordnet werden. Die Form repräsentiert das physische Erscheinungsbild dieses Teils. Formen sind untergliedert in Formtypen und Formtypgruppen. Teiletypen referenzieren eine Formtypgruppe (s. [[part_db#Typen|Typen]]) ===== Teil & Form Anzeigenamen ===== Die Anzeige von Teil- und Formtypen definieren wie die Bezeichnungen des Teils bzw. der Form in der GUI dargestellt werden. Sie können aus den Namensfeldern und Attributen der jeweiligen Tabellen (Teil/Form) zusammengebaut werden. Anzeigenamen sind hierarchisch aufgebaut. Eine Ebene kann jeweils nur die Felder der darunterliegenden Ebene benutzen. Attribute können aus allen Ebenen genutzt werden. ==== Syntax ==== **Felder** {'field':''} : z.B: {'field':'shape-variant-shortname'} Wird durch den Wert des entsprechenden Feldes ersetzt. **Attribute** {'attr':''} : z.B. {'attr':'Durchmesser'} Wird durch den Wert des entsprechenden Attributes inkl. Einheit ersetzt. **Attribute mit Formatierung** {'attr':'','format':','factor':} : z.B. {'attr':'Durchmesser','format':'','factor':1000} Wird durch den Wert des Formatstrings ersetzt. Der Formatstring kann die folgenden Platzhalter enthalten: * : Minimum des Attributs, Multipliziert mit dem , sofern angegeben * : Maximum des Attributs (sofern vorhanden), Multipliziert mit dem , sofern angegeben) * : Einheit des Attributs (sofern vorhanden) * : Einheitensymbol des Attributs (sofern vorhanden) Falls ein Feld oder Attribut nicht vorhanden ist, wird nichts angezeigt. ==== Teil Anzeigenamen ==== Beispiel: Anzeigename des Teiletyps ''Widerstand'' : {'field':'value'} {'attr':'Widerstand'} ({'attr':'Toleranz'}) **PartTypeGroup**: Passive Elemente\\ **PartType** : Widerstand\\ **Part** : Kohleschichtwiderstand\\ **Variante** : 10kΩ\\ **Attribute** : Widerstand=10kΩ, Art=Dickschicht, Toleranz=5%, etc.\\ Anzeigeergebniss => Kohleschichtwiderstand 10kΩ (5%) ==== Form Anzeigenamen ==== **Formtyp** hat * //Name// : Name des Formtyps (zum Referenzieren) * //Rendername// : Labeldefinition für Formen dieses Typs **Form** hat * //Longname// : Kann Formvariante-long/shortname und Form/Formvariante-Attribute benutzen * //Shortname// : Kann Formvariante-long/shortname und Form/Formvariante-Attribute benutzen **Formvariante** hat * //Longname // : Kann Form/Formvariante-Attribute benutzen * //Shortname// : Kann Form/Formvariante-Attribute benutzen