Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];

Вниз

Деревья   Найти похожие ветки 

 
RDA   (2002-07-18 11:15) [0]

База данных структуры организации в которой есть и подразделения и сотрудники. Вопрос следующий как при построении дерева присвоить разные иконки сотрудникам и отделам. Используется специальное поле для определения сотрудник это или отдел.


 
Sergey13   (2002-07-18 11:29) [1]

Дык в зависимости от этого поля, наверное и надо рисовать. Тут важно каким компонентом ты это делаешь.
Кстати - интересная организация даных- и подразделения и сотрудники в одной таблице. 8-) ИМХО это все таки разные вещи и налицо ошибка при проектировании базы.


 
Johnmen   (2002-07-18 12:01) [2]

>Sergey13 © (18.07.02 11:29)

Вот именно !
+
И к тому же пора вспомнить про нормализацию и забыть дибейсные подходы...:)


 
RDA   (2002-07-18 15:21) [3]

Хорошо есть ошибка в проектировании. Но возможно ли вывести в дереве структуру организации из двух таблиц в одной из которых подразделения оной а в другой сотрудники.


 
Awex   (2002-07-18 16:09) [4]

Можно попробовать сделать нечто подобное:

CREATE TABLE SUBDIVISION ( /* ПОДРАЗДЕЛЕНИЯ */
SUBDIVISION_ID INTEGER NOT NULL, /* УНИКАЛЬНЫЙ НОМЕР */
SUBDIVISION_CAPTION VARCHAR(63) NOT NULL); /* НАЗВАНИЕ */

ALTER TABLE SUBDIVISION ADD CONSTRAINT PK_SUBDIVISION PRIMARY KEY (SUBDIVISION_ID);

CREATE TABLE EMPLOYEE ( /* СОТРУДНИКИ */
EMPLOYEE_ID INTEGER NOT NULL, /* УНИКАЛЬНЫЙ НОМЕР */
EMPLOYEE_NAME VARCHAR(63) NOT NULL, /* ФИО */
REF_SUBDIVISION INTEGER NOT NULL); /* К КАКОМУ ПОДРАЗДЕЛЕНИЮ ПРИНАДЛЕЖИТ */

ALTER TABLE EMPLOYEE ADD CONSTRAINT PK_EMPLOYEE PRIMARY KEY (EMPLOYEE_ID);
ALTER TABLE EMPLOYEE ADD CONSTRAINT FK_EMPLOYEE FOREIGN KEY (REF_SUBDIVISION) REFERENCES SUBDIVISION (SUBDIVISION_ID) ON UPDATE CASCADE;


/* структура организации */
CREATE VIEW VW_LIST(
ID,/* УНИКАЛЬНЫЙ НОМЕР ПОДРАЗДЕЛЕНИЯ ИЛИ СОТРУДНИКа */
CAPTION,
RTYPE, /* ТИП ЗАПИСИ 0-ПОДРАЗДЕЛЕНИЕ, 1-СОТРУДНИК */
PARENT /* К КАКОМУ ПОДРАЗДЕЛЕНИЮ ПРИНАДЛЕЖИТ СОТРУДНИК (ЕСЛИ ЭТО СОТРУДНИК ИНАЧЕ -1)*/ )
AS
SELECT SUBDIVISION_ID, SUBDIVISION_CAPTION, CAST(1 AS INTEGER) , CAST(-1 AS INTEGER)
FROM SUBDIVISION
UNION
SELECT EMPLOYEE_ID, EMPLOYEE_NAME, CAST(2 AS INTEGER), REF_SUBDIVISION
FROM EMPLOYEE;


 
Boroda Oleg   (2002-07-18 16:36) [5]

Запросто.

Вот две таблицы:

CREATE TABLE TFIRMA (
ID INTEGER NOT NULL,
NAME CHAR(10));

CREATE TABLE TEMPLOY (
ID INTEGER NOT NULL,
OWNER INTEGER,
FNAME CHAR(10));
Owner во второй таблице - ссылка на ID первой таблицы.

а вот SQL:

Select tf.Name, te.Fname
FROM TFIRMA tf, TEMPLOY te
Where (tf.id = te.owner)
Order by tf.Name, te.Fname

При вставке в TreeView внутри цикла организовываеш проверку на появление нового имени, и в подцикле вставляешь всех сотрудников в узел.
А вот насчет неграмотного построения TreeView в одной таблице - готов поспорить. У меня например почти все деревья строятся по этому принципу:

CREATE TABLE GOODTREE (
ID_GOODTREE IDTYPE,
CHECKED CHECKEDTYPE,
ID_OWNER INDEXTYPE,
ID_TYPE INDEXTYPE,
NAME CHAR100TYPE,
PICTURE INDEXTYPE,
ID_SOURCE INDEXTYPE);

где: ID_GOODTREE - уникальный ID
ID_OWNER - владелец
ID_TYPE - тип (папка, файл, еще что-то...)
ID_SOURCE - источник данных. Здесь просто его ID, таблица определяется из ID_TYPE.

Вот такую структуру, на мой взгляд, можно приложить к любому дереву, буз зависимости и от числа ветвей, и от уровня вложенности. Работать с ней, кстати тоже не сложно. Например, перетаскивание ветви котируется просто изменением ID_Owner у перетаскиваемого элемента.


 
RDA   (2002-07-21 10:43) [6]

К Awex и Boroda Oleg и остальным.
Спасибо за помощь. Но вот возник вопрос. В Ваших обоих примерах таблица подразделений не может иметь субподразделений, т.к. отсутствует поле владельца. Если есть такая необходимость, то в таблице сотрудников поле устанавливающее связь должно ссылаться на какое поле таблицы подразделений.
И еще, это что получается если не переписывать в одних компонентах доступа к данным запросы, а сделать их статическими то теперь необходимо использовать три набора компонент:
1 - Для считывания из двух таблиц в дерево.
2 - Для работы с таблицей подразделений.
3 - Для работы с сотрудниками.
Или я преувеличиваю.
Заранее благодарен за пояснения.


 
RDA   (2002-07-21 10:50) [7]

Да, хотелось бы добавить. Наверняка кто-то уже разрабатывал подобную базу данных для организации. В данный момент я использую таблицу с такой структурой
ID Уникальный номер
PARENT Владелец
KIND Тип (подразделение, сотрудник)
NAZV Название
Хотелось бы услишать (прочитать) советы более опытных людей. Так как эта таблица ложиться в основу всей программы, то что за проблеммы меня ожидают дальше.


 
RDA   (2002-07-22 09:53) [8]

В воскресенье ответа не получил. Может кто-нибудь сегодня поможет ответом.


 
Sergey13   (2002-07-22 10:12) [9]

2RDA © (21.07.02 10:50)
И это вся информация по подразделениям и сотрудникам?!!!
Что за программа то вообще - из-за чего весь сыр-бор?


 
RDA   (2002-07-22 10:30) [10]

Нет это не вся программа.
Пока планируется - Кадры, и для бухгалтерии - расчет заработной платы.
1С прошу не предлагать. Организация бюджетная.


 
Sergey13   (2002-07-22 11:22) [11]

2RDA © (22.07.02 10:30)
Ну тогда тебе не над "рисованием разных иконок" надо думать, а над нормальным проектированием базы данных. По этому вопросу горы книг и статей (и на бумаге и в инете). Та схема, которую ты описал - никуда не годится, ИМХО, уж извини.


 
Boroda Oleg   (2002-07-22 11:29) [12]

2RDA
Я так понял, ты пытаешся использовать компоненты типа TTable - мой тебе совет откажись в самом зародыше - потом гемороя с ними не оберешся, не говоря уже о тормозах в работе с сервером....
Оптимальный вариант - использование TQuery и решение всех задач с использованием SQL-запросов - и быстро, и возможностей на порядок побольше.

Наибольшая проблемма, с которой я сталкивался в однотабличной структуре дерева - определение имени предприятия, если мы имеем только ID сотрудника - приходится использовать вложенные запросы, кое где даже процедуры писать, но на SQL - все это решимо.

Что посоветовал бы ввести еще - ссылку на данные. Для предприятия и сотрудника - это принципиально разные вещи, и хранить их в одной таблице, в принципе, неграмотно. Т.е. мы все равно возвращаемся к 3-м таблицам: 1-я для TreeView, 2-я данные для предприятий, 3-я данные для сотрудников.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.007 c
1-35279
^SANYA
2002-07-31 14:36
2002.08.12
В каком модуле объявлен


1-35257
^SANYA
2002-07-31 11:04
2002.08.12
StringGrid or Ini?


7-35481
sizmrebi
2002-05-23 17:32
2002.08.12
Matrix Printers


14-35409
Malder
2002-07-10 01:15
2002.08.12
Локальная сеть


1-35268
msalex
2002-07-29 22:46
2002.08.12
TStreame: глюк или ошибка?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский