Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Контроль целостности бд, параллельность работы пользователей / 17 сообщений из 17, страница 1 из 1
18.04.2016, 21:58
    #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
18.04.2016, 22:15
    #39218640
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль целостности бд, параллельность работы пользователей
Ziph,

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

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

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


Имена столбцов поправил. Почитал про данные средства, более-менее представления имеются, теперь как это применить к таблицам?
...
Рейтинг: 0 / 0
19.04.2016, 08:46
    #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
19.04.2016, 09:06
    #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
19.04.2016, 09:48
    #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
19.04.2016, 09:55
    #39218800
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль целостности бд, параллельность работы пользователей
Ziph,

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

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

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

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

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

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

причём смутно помнитмся вроде была на iBase статья о структурах данных с првязкой к временным периодам, но сейчас не нашел
...
Рейтинг: 0 / 0
20.04.2016, 23:17
    #39220703
Ziph
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль целостности бд, параллельность работы пользователей
Господа, такой вопрос. Как заблокировать запись для манипуляций с ней, если кто-то ее уже изменяет\удалил, но dbgrid еще не обновился ?
...
Рейтинг: 0 / 0
21.04.2016, 08:56
    #39220822
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль целостности бд, параллельность работы пользователей
В гугле "firebird select with lock".
...
Рейтинг: 0 / 0
21.04.2016, 11:15
    #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
26.04.2016, 08:48
    #39224386
Ziph
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль целостности бд, параллельность работы пользователей
А как обновить таблицу у всех пользователей после изменения\удаления записи?
...
Рейтинг: 0 / 0
26.04.2016, 10:02
    #39224443
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль целостности бд, параллельность работы пользователей
ZiphА как обновить таблицу у всех пользователей после изменения\удаления записи?
Читай http://www.firebirdsql.org/file/documentation/papers_presentations/Power_Firebird_events.pdf
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Контроль целостности бд, параллельность работы пользователей / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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