Біз үлкен көлемдегі деректерді қалай сақтап, өңдейміз?
Деректер қоры дегеніміз не?
Деректер қорын жасау не үшін қажет?
Деректер қорын жинақтауға арналған қандай программаларды білесіңдер?
Кез келген кәсіпорын немесе ұжым Деректер қорын басқару жүйелерін (ДҚБЖ) жасайды. Олардың көмегімен Деректер қорын жасауға, ақпараттармен толықтыруға және жұмыс істеуге болатын программалар жинауға болады. Деректер қорын басқару жүйелерінің бірнеше ондаған түрлері бар, олардың көпшілігі – шындығына келгенде басқару жүйелері емес, арнайы дайындалған программалау тілдері. Осы тілді меңгерген әрбір адам қолданушыға ыңғайлы құрылымдағы, кез келген деректер қорын жасап алуына және оларға қажетті басқару элементтерін енгізуіне болады.
ДҚБЖ (Деректер Қорын Басқару Жүйесі) – деректер қорынан деректерді құру, сақтау және алуды автоматтандыруға арналған программалар жиынтығы.
ДҚБЖ үш негізгі функциясы
1) Деректрді анықтау (деректер қорының сипаттамасы);
2) Деректерді өңдеу;
3) Деректерді басқару.
Осы функциялардың барлығын Microsoft Access-те толықтай қолдануға болады.
Тағы да осы тақырып бойынша Басқа іс-әрекеттер
Деректер қорына қойылатын талаптар
✔ мәліметтер қорының мазмұнын көшіруді болдырмау немесе азайту;
✔пайдаланушы топтардың құқықтары мен талаптарына сәйкес, деректер қорының жекелеген ақпараттық элементтерге енуін жеделдетуді қамтамасыз ету;
✔ үнемі өсіп отыратын талаптарды қанағаттандыру үшін деректер қорының кеңейтілу мүмкіншіліктерін қамтамасыз ету;
✔ тек қана дұрыс, алдын ала тексерілген ақпараттарды пайдалануды қамтамасыз етуге мүмкіндік беретін деректер қорының тұтастығын сақтау;
✔деректер қорының, тұтынушылардың жекелеген санаттарының жұмыс істеуіне қажетті белгілі бір ақпараттық элементтерге енуіне ғана рұқсат беру;
✔ қорға енуді, деректер қорына ақпараттар қосу мен түзетуді тек қана авторлық құқығы бар тұтынушылардың орындауы;
✔ деректер қорын пайдаланушылардың талабына сәйкес, деректердің элементтерін, түзету, бейнелеу және есептеу құрылғыларын құрудың қарапайымдылығын қамтамасыз ету.
Есіңізде сақтаңыз
Деректерді сақтау – компьютердің маңызды функцияларының бірі. Оның ең көп тараған құралы – Деректер қоры (ДҚ). ДҚ – берілген құрылымдағы ақпараттардан тұратын арнайы форматтағы файл. Берілгендер кесте түрінде дайындалады.
Деректер қоры (ДҚ) – анықталған облысқа жататын деректерді басқару, сақтау және сипаттаудың жалпы ұстанымдарын анықталған ережелер бойынша қарастыратын ұйымдастырылған деректер жиынтығы.
Тағы да осы тақырып бойынша Басқа іс-әрекеттер
Деректердің арасындағы байланыстарды ұйымдастырудың түрлері
Деректердің арасындағы байланыстарды ұйымдастырудың келесі түрлері бар:
1) Иерархиялық; 2) Желілік; 3) Реляциялық.
Көптеген ДҚ кестелік құрылымда болады. Кестелік құрылымда берілгендердің адрестері жол мен бағананың қиылысуымен анықталады. Кестелерді жобалау кезінде олардың құрылымдарын алдымен қағазда жасаған ыңғайлы. Кестедегі әрбір өріс оның тақырыбына сәйкес болатын жеке мәліметтен тұрады. Әртүрлі кестедегі берілгендерді байланыстыру үшін, әрбір кестедегі жазбаның өзіндік жеке мәнін бере алатын өріс не өрістер жиынтығы болуы тиіс. Мұндай өріс не өрістер жиынтығын негізгі кілт деп атайды.
Для начала попробуем разобрать один из решения подобных задач.
Рассмотрим контрольный пример. Входные данные: 5 - это количество врачей, т.е. нижеследующих строчек. 2 3 5 - 1-й врач. У него 2 предшественника - врачи 3 и 5 2 3 5 - 2-й врач. У него 2 предшественника - врачи 3 и 5 1 5 - 3-й врач. У него 1 предшественник - врач 5 3 1 3 5 - 4-й врач. У него 3 предшественника - врачи 1, 3 и 5 0 - 5-й врач. У него нет предшественников. Вариант результата: 5 3 1 2 4 - в таком порядке посещаются врачи.
Изобразим эти данные графически. В кружочках проставим номера врачей и соединим кружочки стрелками, отображающими взаимосвязи (первое вложение). Полученный рисунок - ни что иное, как ориентированный граф.
Решение будет состоять в поиске порядка посещения всех вершин графа ("врачей") в соответствии с доступными путями ("очередностью"). Очевидно, что первой нужно посетить вершину, из которой пути только выходят. Если ни одной такой вершины нет - задача решения не имеет. В нашем случае такая вершина есть - номер 5 и она помечена зеленым. После посещения мы удаляем эту вершину и все ведущие из нее пути. Получаем картину, представленную вторым вложением. Повторяем наше рассуждение и находим вершину 3. Снова удаляем её и выходящие из нее пути. В третьем вложении мы видим, что доступны сразу две вершины - 1 и 2. Их можно посетить в любом порядке, т.е. решение не единственное. Будем придерживаться порядка возрастания и и вычеркнем 1 с путём, а затем и 2. В чевертом вложении остается свободная вершина 4. Посещаем её, вычеркиваем - граф исчез, задача решена. И порядок посещения совпал с контрольным решением.
Теперь, когда "ручное" решение понятно, можно строить алгоритм. Мы использовали граф, а граф в программировании представляется парой множеств: множеством вершин и множеством путей, их соединяющих. Эти множества классически представляются двумя матрицами - матрицей смежности (отображает вершины и наличие связей) и матрицей инцидентности (отображает направление связей и, возможно, длины путей). Другие варианты - списки или деревья, но они требуют набора процедур для соответствующих манипуляций.
В связи с относительной простотой задачи был выбран собственный вариант отображения графа на квадратную матрицу размера (n+1)×n, где n- количество вершин (врачей). Первая строка матрицы является служебной, остальные отображают граф. В пятом вложении приведена принятая схема отображения. Собственно, из этой схемы понятна основная идея реализации. Создаем матрицу, расписываем её нулями, затем заносим единицы, создавая связи. Решение состоит в последовательном переборе колонок до нахождения столбцов, содержащих все нули. Найденный столбец "вычеркивается" (записывается 1 в нулевой строке), а его номер - это номер посещенной вершины. Процесс повторяется, пока в служебной строке не будут все единицы, либо пока не будет n раз сделан проход по столбцам (от зацикливания при отсутствии решения).
Поскольку программа может показаться нетривиальной, в нее внесены операторы отладки, позволяющие по шагам проследить решение. Как управлять отладкой, ясно из комментариев. Если отладка не нужна, достаточно из программы удалить все строки, отмеченные \\-
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017 // Внимание! Если программа не работает, обновите версию!
begin var n:=ReadInteger; // первая строка - число врачей var a:=MatrFill(n+1,n,0); // матрица посещений var t:integer; for var i:=1 to n do begin // цикл ввода по каждому врачу var k:=ReadInteger; // количество врачей-предшественников for var j:=1 to k do begin Read(t); a[t,i-1]:=1 end; end; t:=0; var res:=''; var debug:=true; //- debug:=false блокирует отладочную выдачу if debug then begin //- Writeln('исходная матрица'); //- a.Println(2); Writeln //- end; //- for var m:=1 to n do begin for var j:=1 to n do begin var c:=a.Col(j-1); if c[0]=0 then begin if c.All(x->x=0) then begin Res+=j+' '; if debug then Writeln(Res); //- a[0,j-1]:=1; for var i:=0 to n-1 do a[j,i]:=0; if debug then begin //- a.Println(2); Writeln //- end //- end end; end; if a.Row(0).All(x->x=1) then begin t:=1; break end; end; if t=0 then Writeln(-1) else Writeln(Res) end.
Пример решения с выключенной отладкой 5 2 3 5 2 3 5 1 5 3 1 3 5 0 5 3 1 2 4
Пример со включенной отладкой (можно исходные данные для удобства все писать в одной строке) 5 2 3 5 2 3 5 1 5 3 1 3 5 0 исходная матрица 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 1 1 1 1 0
Деректер қорын басқару жүйелері
Өз ойыңызбен бөлісіңіз
Біз үлкен көлемдегі деректерді қалай сақтап, өңдейміз?
Деректер қоры дегеніміз не?
Деректер қорын жасау не үшін қажет?
Деректер қорын жинақтауға арналған қандай программаларды білесіңдер?
Кез келген кәсіпорын немесе ұжым Деректер қорын басқару жүйелерін (ДҚБЖ) жасайды. Олардың көмегімен Деректер қорын жасауға, ақпараттармен толықтыруға және жұмыс істеуге болатын программалар жинауға болады. Деректер қорын басқару жүйелерінің бірнеше ондаған түрлері бар, олардың көпшілігі – шындығына келгенде басқару жүйелері емес, арнайы дайындалған программалау тілдері. Осы тілді меңгерген әрбір адам қолданушыға ыңғайлы құрылымдағы, кез келген деректер қорын жасап алуына және оларға қажетті басқару элементтерін енгізуіне болады.
ДҚБЖ (Деректер Қорын Басқару Жүйесі) – деректер қорынан деректерді құру, сақтау және алуды автоматтандыруға арналған программалар жиынтығы.
ДҚБЖ үш негізгі функциясы
1) Деректрді анықтау (деректер қорының сипаттамасы);
2) Деректерді өңдеу;
3) Деректерді басқару.
Осы функциялардың барлығын Microsoft Access-те толықтай қолдануға болады.
Тағы да осы тақырып бойынша Басқа іс-әрекеттер
Деректер қорына қойылатын талаптар
✔ мәліметтер қорының мазмұнын көшіруді болдырмау немесе азайту;
✔пайдаланушы топтардың құқықтары мен талаптарына сәйкес, деректер қорының жекелеген ақпараттық элементтерге енуін жеделдетуді қамтамасыз ету;
✔ үнемі өсіп отыратын талаптарды қанағаттандыру үшін деректер қорының кеңейтілу мүмкіншіліктерін қамтамасыз ету;
✔ тек қана дұрыс, алдын ала тексерілген ақпараттарды пайдалануды қамтамасыз етуге мүмкіндік беретін деректер қорының тұтастығын сақтау;
✔деректер қорының, тұтынушылардың жекелеген санаттарының жұмыс істеуіне қажетті белгілі бір ақпараттық элементтерге енуіне ғана рұқсат беру;
✔ қорға енуді, деректер қорына ақпараттар қосу мен түзетуді тек қана авторлық құқығы бар тұтынушылардың орындауы;
✔ деректер қорын пайдаланушылардың талабына сәйкес, деректердің элементтерін, түзету, бейнелеу және есептеу құрылғыларын құрудың қарапайымдылығын қамтамасыз ету.
Есіңізде сақтаңыз
Деректерді сақтау – компьютердің маңызды функцияларының бірі. Оның ең көп тараған құралы – Деректер қоры (ДҚ). ДҚ – берілген құрылымдағы ақпараттардан тұратын арнайы форматтағы файл. Берілгендер кесте түрінде дайындалады.
Деректер қоры (ДҚ) – анықталған облысқа жататын деректерді басқару, сақтау және сипаттаудың жалпы ұстанымдарын анықталған ережелер бойынша қарастыратын ұйымдастырылған деректер жиынтығы.
Тағы да осы тақырып бойынша Басқа іс-әрекеттер
Деректердің арасындағы байланыстарды ұйымдастырудың түрлері
Деректердің арасындағы байланыстарды ұйымдастырудың келесі түрлері бар:
1) Иерархиялық; 2) Желілік; 3) Реляциялық.
Көптеген ДҚ кестелік құрылымда болады. Кестелік құрылымда берілгендердің адрестері жол мен бағананың қиылысуымен анықталады. Кестелерді жобалау кезінде олардың құрылымдарын алдымен қағазда жасаған ыңғайлы. Кестедегі әрбір өріс оның тақырыбына сәйкес болатын жеке мәліметтен тұрады. Әртүрлі кестедегі берілгендерді байланыстыру үшін, әрбір кестедегі жазбаның өзіндік жеке мәнін бере алатын өріс не өрістер жиынтығы болуы тиіс. Мұндай өріс не өрістер жиынтығын негізгі кілт деп атайды.
Объяснение:
Рассмотрим контрольный пример.
Входные данные:
5 - это количество врачей, т.е. нижеследующих строчек.
2 3 5 - 1-й врач. У него 2 предшественника - врачи 3 и 5
2 3 5 - 2-й врач. У него 2 предшественника - врачи 3 и 5
1 5 - 3-й врач. У него 1 предшественник - врач 5
3 1 3 5 - 4-й врач. У него 3 предшественника - врачи 1, 3 и 5
0 - 5-й врач. У него нет предшественников.
Вариант результата: 5 3 1 2 4 - в таком порядке посещаются врачи.
Изобразим эти данные графически. В кружочках проставим номера врачей и соединим кружочки стрелками, отображающими взаимосвязи (первое вложение). Полученный рисунок - ни что иное, как ориентированный граф.
Решение будет состоять в поиске порядка посещения всех вершин графа ("врачей") в соответствии с доступными путями ("очередностью").
Очевидно, что первой нужно посетить вершину, из которой пути только выходят. Если ни одной такой вершины нет - задача решения не имеет. В нашем случае такая вершина есть - номер 5 и она помечена зеленым. После посещения мы удаляем эту вершину и все ведущие из нее пути. Получаем картину, представленную вторым вложением. Повторяем наше рассуждение и находим вершину 3. Снова удаляем её и выходящие из нее пути. В третьем вложении мы видим, что доступны сразу две вершины - 1 и 2. Их можно посетить в любом порядке, т.е. решение не единственное. Будем придерживаться порядка возрастания и и вычеркнем 1 с путём, а затем и 2. В чевертом вложении остается свободная вершина 4. Посещаем её, вычеркиваем - граф исчез, задача решена. И порядок посещения совпал с контрольным решением.
Теперь, когда "ручное" решение понятно, можно строить алгоритм.
Мы использовали граф, а граф в программировании представляется парой множеств: множеством вершин и множеством путей, их соединяющих.
Эти множества классически представляются двумя матрицами - матрицей смежности (отображает вершины и наличие связей) и матрицей инцидентности (отображает направление связей и, возможно, длины путей). Другие варианты - списки или деревья, но они требуют набора процедур для соответствующих манипуляций.
В связи с относительной простотой задачи был выбран собственный вариант отображения графа на квадратную матрицу размера (n+1)×n, где n- количество вершин (врачей). Первая строка матрицы является служебной, остальные отображают граф. В пятом вложении приведена принятая схема отображения. Собственно, из этой схемы понятна основная идея реализации. Создаем матрицу, расписываем её нулями, затем заносим единицы, создавая связи. Решение состоит в последовательном переборе колонок до нахождения столбцов, содержащих все нули. Найденный столбец "вычеркивается" (записывается 1 в нулевой строке), а его номер - это номер посещенной вершины. Процесс повторяется, пока в служебной строке не будут все единицы, либо пока не будет n раз сделан проход по столбцам (от зацикливания при отсутствии решения).
Поскольку программа может показаться нетривиальной, в нее внесены операторы отладки, позволяющие по шагам проследить решение. Как управлять отладкой, ясно из комментариев. Если отладка не нужна, достаточно из программы удалить все строки, отмеченные \\-
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!
begin
var n:=ReadInteger; // первая строка - число врачей
var a:=MatrFill(n+1,n,0); // матрица посещений
var t:integer;
for var i:=1 to n do begin // цикл ввода по каждому врачу
var k:=ReadInteger; // количество врачей-предшественников
for var j:=1 to k do begin
Read(t);
a[t,i-1]:=1
end;
end;
t:=0;
var res:='';
var debug:=true; //- debug:=false блокирует отладочную выдачу
if debug then begin //-
Writeln('исходная матрица'); //-
a.Println(2); Writeln //-
end; //-
for var m:=1 to n do begin
for var j:=1 to n do begin
var c:=a.Col(j-1);
if c[0]=0 then begin
if c.All(x->x=0) then begin
Res+=j+' ';
if debug then Writeln(Res); //-
a[0,j-1]:=1;
for var i:=0 to n-1 do a[j,i]:=0;
if debug then begin //-
a.Println(2); Writeln //-
end //-
end
end;
end;
if a.Row(0).All(x->x=1) then begin t:=1; break end;
end;
if t=0 then Writeln(-1)
else Writeln(Res)
end.
Пример решения с выключенной отладкой
5
2 3 5
2 3 5
1 5
3 1 3 5
0
5 3 1 2 4
Пример со включенной отладкой (можно исходные данные для удобства все писать в одной строке)
5 2 3 5 2 3 5 1 5 3 1 3 5 0
исходная матрица
0 0 0 0 0
0 0 0 1 0
0 0 0 0 0
1 1 0 1 0
0 0 0 0 0
1 1 1 1 0
5
0 0 0 0 1
0 0 0 1 0
0 0 0 0 0
1 1 0 1 0
0 0 0 0 0
0 0 0 0 0
5 3
0 0 1 0 1
0 0 0 1 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
5 3 1
1 0 1 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
5 3 1 2
1 1 1 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
5 3 1 2 4
1 1 1 1 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
5 3 1 2 4