Verfasst am: 03.07.2015, 08:55
Titel: Leere Datenbank anlegen, die erweiterbar ist
Hallo zusammen,
ich habe mal wieder eine Frage an euch. Und zwar habe ich ein Problem bei der Erstellung einer flexiblen Datenbank.
Als Grundlage für meine Problemschilderung dient folgendes (von mir gern gewähltes) Maus, Katze,Hund-Beispiel, was ich euch auch nochmal in den Anhang angehangen habe:
Code:
functionvarargout = TextinDatenbank(varargin) % TEXTINDATENBANK MATLAB code for TextinDatenbank.fig % TEXTINDATENBANK, by itself, creates a new TEXTINDATENBANK or raises the existing % singleton*.
%
% H = TEXTINDATENBANK returns the handle to a new TEXTINDATENBANK or the handle to % the existing singleton*.
%
% TEXTINDATENBANK('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in TEXTINDATENBANK.M with the given input arguments.
%
% TEXTINDATENBANK('Property','Value',...) creates a new TEXTINDATENBANK or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before TextinDatenbank_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to TextinDatenbank_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help TextinDatenbank
% Last Modified by GUIDE v2.5 02-Jul-2015 15:22:36
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @TextinDatenbank_OpeningFcn, ...
'gui_OutputFcn', @TextinDatenbank_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
ifnargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
% --- Executes just before TextinDatenbank is made visible. function TextinDatenbank_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to TextinDatenbank (see VARARGIN)
% UIWAIT makes TextinDatenbank wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. functionvarargout = TextinDatenbank_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure varargout{1} = handles.output;
function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents of edit1 as a double global gbt15_data
txt = get(handles.edit1, 'String');
gbt15_data.zeile1 = txt;
% --- Executes during object creation, after setting all properties. function edit1_CreateFcn(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit2_Callback(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit2 as text % str2double(get(hObject,'String')) returns contents of edit2 as a double global gbt15_data
txt = get(handles.edit2, 'String');
gbt15_data.zeile2 = txt;
% --- Executes during object creation, after setting all properties. function edit2_CreateFcn(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
% --- Executes on selection change in popupmenu1. function popupmenu1_Callback(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array % contents{get(hObject,'Value')} returns selected item from popupmenu1 % Nummer des ausgewählten Menü-Eintrags
val = get(handles.popupmenu1, 'Value');
% Liste der Einträge im Pop-up-Menü
str = get(handles.popupmenu1, 'String');
% Text zur ausgewählten Nummer des Eintrags switch(str{val}) case 'Maus'
vorherigeAuswahl = get(handles.popupmenu1, 'UserData');
ifstrcmp(vorherigeAuswahl,'Maus') == 1 && handles.zaehlerMaus >0
handles.zaehlerMaus = handles.zaehlerMaus-1;
elseifstrcmp(vorherigeAuswahl,'Katze') == 1 && handles.zaehlerKatze >0
handles.zaehlerKatze = handles.zaehlerKatze-1;
elseifstrcmp(vorherigeAuswahl,'Hund') == 1 && handles.zaehlerHund >0
handles.zaehlerHund = handles.zaehlerHund-1;
else
handles.zaehlerHund = handles.zaehlerHund+1;
H = handles.zaehlerHund;
set(handles.edit1,'String',sprintf('Hund %g',H));
set(handles.popupmenu1, 'UserData', 'Hund') end guidata(hObject, handles);
% --- Executes during object creation, after setting all properties. function popupmenu1_CreateFcn(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end % Pop-up-Menü belegen
cell_var = {'Please choose a component', 'Maus', 'Katze', 'Hund'};
set(hObject, 'String', cell_var);
% --- Executes on selection change in popupmenu2. function popupmenu2_Callback(hObject, eventdata, handles) % hObject handle to popupmenu2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu2 contents as cell array % contents{get(hObject,'Value')} returns selected item from popupmenu2
val = get(handles.popupmenu2, 'Value');
% Liste der Einträge im Pop-up-Menü
str = get(handles.popupmenu2, 'String');
% Text zur ausgewählten Nummer des Eintrags switch(str{val}) case 'Maus'
vorherigeAuswahl = get(handles.popupmenu2, 'UserData');
ifstrcmp(vorherigeAuswahl,'Maus') == 1 && handles.zaehlerMaus >0
handles.zaehlerMaus = handles.zaehlerMaus-1;
elseifstrcmp(vorherigeAuswahl,'Katze') == 1 && handles.zaehlerKatze >0
handles.zaehlerKatze = handles.zaehlerKatze-1;
elseifstrcmp(vorherigeAuswahl,'Hund') == 1 && handles.zaehlerHund >0
handles.zaehlerHund = handles.zaehlerHund-1;
else
end
handles.zaehlerHund = handles.zaehlerHund+1;
H = handles.zaehlerHund;
set(handles.edit2,'String',sprintf('Hund %g',H));
set(handles.popupmenu2, 'UserData', 'Hund') end guidata(hObject, handles);
% --- Executes during object creation, after setting all properties. function popupmenu2_CreateFcn(hObject, eventdata, handles) % hObject handle to popupmenu2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
cell_var = {'Please choose a component', 'Maus', 'Katze', 'Hund'};
set(hObject, 'String', cell_var);
Ich möchte nun eine Datenbank anlegen. Beispielsweise mit folgender Struktur:
- Name
- Maus - Alter
| - Besitzer
|
| - Name
Daten - Tiere - Katze - Alter
| - Besitzer
|
| - Name
-Hund - Alter
- Besitzer
Allerdings weiß ich nicht, wie ich das am besten mache. Einfach structs zu schreiben wie folgt:
Daten.Tiere.Maus.Name = [];
Daten.Tiere.Maus.Alter = [];
etc. ist leider nicht die Lösung, die ich suche. Denn ich möchte zum Beispiel später in die Datenbank unter Name den Text aus dem Edit-Textfeld schreiben/speichern. und ich möchte gerne die Datenbank erweitern können. Also angenommen ich füge über die Popup-Menüs zwei Katzen hinzu, die dann KAtze 1 und Katze 2 heißen. Dann möchte ich die Datenstruktur wie folgt gerne erweitern lassen:
- Name
- Maus - Alter
| - Besitzer
|
| - Name
Daten - Tiere - Katze(1) - Alter
| - Besitzer
|
| - Name
-Hund - Alter
| - Besitzer
|
| - Name
-Katze(2) - Alter
- Besitzer
Oder ich möchte eventuell die Struktur noch unter Hund neben Name, Alter und Besitzer mit der Kategorie Fellfarbe erweitern.
Hat jemand eine Idee, wie ich das in diesem konkretten Fall lösen könnte?
Verfasst am: 03.07.2015, 12:12
Titel: Re: Leere Datenbank anlegen, die erweiterbar ist
Hallo MatlabErlerner,
Zitat:
Ich möchte nun eine Datenbank anlegen. Beispielsweise mit folgender Struktur:
- Name
- Maus - Alter
| - Besitzer
|
| - Name
Daten - Tiere - Katze - Alter
| - Besitzer
|
| - Name
-Hund - Alter
- Besitzer
Das ist für Dich wohl klar, für die Leser aber nicht. Nebenbei führt die automatische Einrückung dazu, dass die von Dir gewünschte Struktur nicht mehr sichtbart ist. Vielleicht probierst Du es mit der Code-Umgebung? Auf jeden Fall ist es unpraktisch eigene Zeichen-Codes mit "|" und "-" zu erfinden und zu hoffen, dass die Leser erahnen, was das Bedeutet.
Wieso sind einfache Structs keine Lösung?
Zitat:
Denn ich möchte zum Beispiel später in die Datenbank unter Name den Text aus dem Edit-Textfeld schreiben/speichern.
Das ist kein überzeugendes Argument.
Wie die Erweiterung der daten Aussehen soll ist nicht nachvollziehbar erklärt.
vielen Dank erst einmal für deine Antwort. Da ich neu hier bin, war mir nicht bewusst, dass bei Leerzeichen das ganze nach dem Absenden verrutscht. Dafür entschuldige ich mich und versuche das ganze grafisch darzustellen.
Ich möchte nun eine Datenbank anlegen. Beispielsweise mit folgender Struktur:
Allerdings weiß ich nicht, wie ich das am besten mache. ich weiß nicht, ob es durch einfaches struct schreiben:
Daten.Tiere.Maus.Name = [];
Daten.Tiere.Maus.Alter = [];
funktioniert. Denn ich möchte zum Beispiel später in die Datenbank unter Name den Text aus dem Edit-Textfeld schreiben/speichern. und ich möchte gerne die Datenbank erweitern können. Also angenommen ich füge über die Popup-Menüs zwei Katzen hinzu, die dann KAtze 1 und Katze 2 heißen. Dann möchte ich die Datenstruktur wie folgt gerne erweitern lassen:
Oder ich möchte eventuell die Struktur noch unter Hund neben Name, Alter und Besitzer mit der Kategorie Fellfarbe erweitern.
Ich hoffe jetzt wird meine Frage deutlicher. Vielen Dank schonmal für eure Antworten und Hilfestellungen.
Unter einer "Datenbank" versteht man im Allgemeinen eine Datenbank: https://de.wikipedia.org/wiki/Datenbank
Du suchst nach eine praktischen Represenation von strukturierten Daten.
Nun kommt es darauf an, was Du mit den Daten anfangen möchtest. Du könntest ein Array aus Structs erstellen nach dieser Art:
Dies dann um die Fellfarbe zu erweitern ist einfach. Wenn allerdings eine zweite Klasse "Auto" heißt, wäre die Fellfarbe blödsinning. Also müsste man die Eigenschaften, die abweichen, in Unterstructs bewegen:
Das Einfügen einer Eigenschaft erfordert aber dann, alle Daten durch zu gehen und die Fellfarbe jeweils zu ergänzen.
Eine Objekt-Orientierte Klassen-Hierarchie erledigt das ganz gut.
Was aber praktisch oder sinnvoll ist hängt ganz davon ab, was Du mit den Daten anstellen möchtest. Es kommt darauf an, ob Du bei 10 Einheiten bleibst, oder ob eine Millionen Einheiten dazu kommen. Es könnten noch zwei oder drei andere Eigenschaften dazu kommen, oder 700'000.
Hast Du schon mal mit einer richtigen Datenbank gearbeitet? Viele dieser Fragen sind dort professionell gelöst und man kann sich eine Menge abschauen. Im Endeffekt würde niemand ernsthaft eine Datenbank in Matlab implementieren, sondern immer nur Matlab als Oberfläche verwenden, um eine richtige Datenbank zu bedienen.
Vielen Dank für die Hilfestellungen. Es ist wie Jan es schon vermutet hat, es soll sich um eine Datenbank handeln, bei der ich noch eine Menge neuer Einträge hinzufügen möchte. Jan, da du jetzt sagst, dass sich im Hinblick auf eine solche Menge an Daten die Nutzung von 'externen' Datenbanken anbietet, die dann von Matlab gesteuert werden, wäre meine Frage, wie soetwas funktioniert bzw. wo ich dazu gute Literatur/Tutorials etc. finden kann, um mir das ganze anzuschauen und zu verstehen. Kannst du mir da ein paar Tipps geben?
Natürlich nehme ich auch gerne von jedem anderen Ideen und Hilfestellungen dankbar entgegen, denn ich stehe momentan doch arg auf dem Schlauch, was Datenbanken angeht!
Danke Jan,
ich werde mir das ganze mal in Ruhe alles durchlesen. Ich hoffe, dass ich da durchsteige und eine gute Lösung finde. Ich werde euch auf dem Laufenden halten!
Grüße
Max
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.