powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Контроль целостности бд, параллельность работы пользователей
17 сообщений из 17, страница 1 из 1
Контроль целостности бд, параллельность работы пользователей
    #39218636
Ziph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, уважаемые.
Только начал изучать базы данных. Есть учебная задача: система управления стоматологической клиникой.
Создал следующие таблицы:

Таблица прием
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE TABLE_RECEPTION (
    NUM_RECEPTION    INTEGER NOT NULL,
    NUM_SERVICE      INTEGER,
    NUM_MEDIC        INTEGER,
    DATA_RECEPTION   DATE,
    SURNAME_PATIENT  VARCHAR(30),
    FNAME_PATIENT    VARCHAR(30),
    PAYMENT          FLOAT,
    PAID             VARCHAR(5)
);


Таблица врач
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE TABLE_MEDIC (
    NUM_MEDIC     INTEGER NOT NULL,
    SURNAME       VARCHAR(30),
    FNAME         VARCHAR(30),
    PATRONIMIC    VARCHAR(30),
    NUM_KAB       INTEGER,
    JOB_PHONE     VARCHAR(12),
    NAME_SERVICE  VARCHAR(30)
);


Таблица Пациент
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE TABLE_PATIENT (
    "KEY"            INTEGER NOT NULL,
    SURNAME          VARCHAR(30),
    FNAME            VARCHAR(30),
    PATRANIMIC       VARCHAR(30),
    NAME_SERVICE     VARCHAR(30),
    GENDER           VARCHAR(5),
    DOB              DATE,
    CITY             VARCHAR(10),
    STREET           VARCHAR(10),
    NUM_MED_POLICY   INTEGER,
    SER_NUM_PASPORT  INTEGER,
    ISSUED_BY        VARCHAR(20),
    YAMMER           VARCHAR(50)
);


Таблица Услуг
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE TABLE_SERVICE (
    NUM_SERVICE   INTEGER NOT NULL,
    NAME_SERVICE  VARCHAR(20),
    PRICE         FLOAT
);


Таблица Пользователи (для авторизации в приложение )
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE TABLE_USERS (
    KEY_USER    INTEGER NOT NULL,
    LOGIN       VARCHAR(10),
    "PASSWORD"  VARCHAR(30),
    STATUS      VARCHAR(5)
);



И вот такой вопрос ,как обеспечить контроль целостности бд и параллельность работы пользователей?

====
Firebird 2.5.5.26952\ibexpert
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39218640
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ziph,

не используй зарезервированные слова в качестве имён столбцов, нафига тебе этот геморрой с двойными кавычками?

Ziphкак обеспечить контроль целостности бд

для начала неплохо бы прочитать про средства обеспечения целостности: primary key, foreign key, unique, check
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39218649
Ziph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисдля начала неплохо бы прочитать про средства обеспечения целостности: primary key, foreign key, unique, check


Имена столбцов поправил. Почитал про данные средства, более-менее представления имеются, теперь как это применить к таблицам?
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39218731
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ziph
Код: sql
1.
2.
    NUM_SERVICE      INTEGER,
    NUM_MEDIC        INTEGER,


Это FK
Ziph
Код: sql
1.
2.
    SURNAME_PATIENT  VARCHAR(30),
    FNAME_PATIENT    VARCHAR(30),


И это бы следовало конвертнуть в FK на пациента, тем более таблица уже есть.
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39218754
Ziph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanZiph
Код: sql
1.
2.
    NUM_SERVICE      INTEGER,
    NUM_MEDIC        INTEGER,


Это FK
Ziph
Код: sql
1.
2.
    SURNAME_PATIENT  VARCHAR(30),
    FNAME_PATIENT    VARCHAR(30),


И это бы следовало конвертнуть в FK на пациента, тем более таблица уже есть.


Переделал таблицу:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE TABLE_RECEPTION (
    NUM_RECEPTION   INTEGER NOT NULL,
    NUM_SERVICE     INTEGER,
    NUM_MEDIC       INTEGER,
    COD_PATIENT     INTEGER,
    DATA_RECEPTION  DATE,
    PAYMENT         FLOAT,
    PAID            VARCHAR(5)
);


Далее каждой таблице добавил первичный ключ и создал внешние:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
ALTER TABLE TABLE_MEDIC ADD CONSTRAINT PK_TABLE_MEDIC PRIMARY KEY (NUM_MEDIC)
USING INDEX PK_NUM_MEDIC;

ALTER TABLE TABLE_SERVICE ADD CONSTRAINT PK_TABLE_SERVICE PRIMARY KEY (NUM_SERVICE)
USING INDEX PK_NUM_SERVICE;

ALTER TABLE TABLE_PATIENT ADD CONSTRAINT PK_TABLE_PATIENT PRIMARY KEY (COD_PATIENT)
USING INDEX PK_COD_PATIENT;

ALTER TABLE TABLE_RECEPTION ADD CONSTRAINT PK_TABLE_RECEPTION PRIMARY KEY (NUM_RECEPTION)
USING INDEX PK_NUM_REC;


И внешние:
Код: sql
1.
2.
3.
4.
5.
ALTER TABLE TABLE_RECEPTION ADD CONSTRAINT FK_TABLE_RECEPTION_1 FOREIGN KEY (NUM_SERVICE) REFERENCES TABLE_SERVICE (NUM_SERVICE) ON DELETE CASCADE ON UPDATE CASCADE
  USING INDEX FK_NUM_SERVICE;
ALTER TABLE TABLE_RECEPTION ADD CONSTRAINT FK_TABLE_RECEPTION_2 FOREIGN KEY (NUM_MEDIC) REFERENCES TABLE_MEDIC (NUM_MEDIC) ON DELETE CASCADE ON UPDATE CASCADE
  USING INDEX FK_NUM_MEDIC;
ALTER TABLE TABLE_RECEPTION ADD CONSTRAINT FK_TABLE_RECEPTION_3 FOREIGN KEY (COD_PATIENT) REFERENCES TABLE_PATIENT (COD_PATIENT) ON DELETE CASCADE ON UPDATE CASCADE;



Правильно ?
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39218790
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZiphПравильно ?
Рекомендую потратить день-два на освоение темы http://www.sql.ru/forum/133383/chitat-vsem-kto-prishel-suda-v-pervyy-raz
Там и прекрасный рабочий инструмент есть IBExpert.

PK поля надежнее делать BIGINT, у FK полей делать префикс FK, а не PK. Payment не float, а numeric с нужной разрядностью. DATA_RECEPTION - лучше timestamp. Название улиц легко переваливает за 10 символов и т.п.
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39218800
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ziph,

стоит подумать над тем действительно ли во всех FK требуется каскадное удаление, а тем более каскадное обновление
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39218825
Ziph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисZiph,

стоит подумать над тем действительно ли во всех FK требуется каскадное удаление, а тем более каскадное обновление

Если удалить, допустим, врача из таблицы, то он же останется в дочерней? Почему же не нужно в данных fk каскадное удаление\обновление?
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39218833
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ziph,

я с трудом могу поверить что врача можно удалить, если он уже выписал рецепт или вообще поработал хотя бы день. Уволить можно, но это же не значит что все пациенты, рецепты выписанные врачом должны исчезнуть.
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39218835
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZiphСимонов ДенисZiph,

стоит подумать над тем действительно ли во всех FK требуется каскадное удаление, а тем более каскадное обновление

Если удалить, допустим, врача из таблицы, то он же останется в дочерней? Почему же не нужно в данных fk каскадное удаление\обновление?
Это называется "историчность" - у врача должны быть даты начала работы и увольнения.
Как и у пациента - даты постановки на учет и снятия с оного.
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39218843
Ziph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А, блин, о этом не подумал. Получается ни в одном fk этого не нужно
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39219094
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

причём смутно помнитмся вроде была на iBase статья о структурах данных с првязкой к временным периодам, но сейчас не нашел
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39220703
Ziph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, такой вопрос. Как заблокировать запись для манипуляций с ней, если кто-то ее уже изменяет\удалил, но dbgrid еще не обновился ?
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39220822
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В гугле "firebird select with lock".
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39220992
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Ziph!
You wrote on 21 апреля 2016 г. 11:14:59:

Ziph> Господа, такой вопрос. Как заблокировать запись для манипуляций с ней http://ibase.ru/pslock/
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39224386
Ziph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как обновить таблицу у всех пользователей после изменения\удаления записи?
...
Рейтинг: 0 / 0
Контроль целостности бд, параллельность работы пользователей
    #39224443
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZiphА как обновить таблицу у всех пользователей после изменения\удаления записи?
Читай http://www.firebirdsql.org/file/documentation/papers_presentations/Power_Firebird_events.pdf
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Контроль целостности бд, параллельность работы пользователей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]