powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура данных
2 сообщений из 2, страница 1 из 1
Структура данных
    #33471566
u4x96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть:
1. Сеть книжных магазинов(целых два),торговля на 99% подержаными книгами.
2. Каждая книга(экземпляр) обладает уникальными данными.(например состояние баркод).
3. Есть дешевые книги, учитываеммые только по количеству.
4. Книги поступаю бесплатно, или закупаются.
5. Книги продаются в магазинах, или через Internet.
6. Книги списываются(даряться или здаются в макулотуру).
7. Oracle 10g XE.
Нету:
1. Лизензий на ПО и возможности использовать пиратское ПО.
2. Четкого технического задания, Сделай как хочеш; а там посмотрим.

Есть несколько планов реализации, вот один аля 1С.
Основные таблицы:
1. Книги
2. Екземпляры, связывается с т.1.
3. Документы, основные поля:
3.1. тип 1..5 (приход, закупка, продажа, продажа_быстрая, списание)
3.2. проведен Y/N
3.3. магазин
4. Строки документа, основные поля:
4.1. документ
4.2. баркод
4.3. кол-во
5. Движение , основные поля:
5.1. документ
5.2. баркод
5.3. кол-во(отрицатеьное для продажа, продажа_быстрая, списание)

Тригер таблицы Документ ловит изменение поля "проведен" и в зависимости от типа вызывает процедуру проведения, или отмены проведения. Процедура проведения создает строки в "Движемие"

Создается материализованое представление "Остаток" для таблицы движения

Для книг учитываемых по количеству, создаются записи в таблизы "экземпляры": "Книга 2€", "Книга 1€", и т.д.

Хотелосьбы услышать мнения по структуре данных, и возможых подводных камнях
...
Рейтинг: 0 / 0
Структура данных
    #33471862
u4x96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наброски:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
CREATE TABLE "DOC_TYPE" (
  "ID" NUMBER( 2 ) NOT NULL PRIMARY KEY, 
  "NAME" VARCHAR2( 50 )
)
/
INSERT INTO "DOC_TYPE"("ID","NAME") VALUES (  1 , 'bekommen');
INSERT INTO "DOC_TYPE"("ID","NAME") VALUES (  2 , 'kaufen');
INSERT INTO "DOC_TYPE"("ID","NAME") VALUES (  3 , 'verkaufen');
INSERT INTO "DOC_TYPE"("ID","NAME") VALUES (  4 , 'schnell_verkaufen');
INSERT INTO "DOC_TYPE"("ID","NAME") VALUES (  5 , 'schmeisen');
/
CREATE TABLE "LADEN" (
  "ID" NUMBER( 2 ) NOT NULL PRIMARY KEY, 
  "NAME" VARCHAR2( 50 )
)
/
CREATE TABLE "BENUTZER" (
  "ID" NUMBER( 9 ) NOT NULL PRIMARY KEY, 
  "NAME" VARCHAR2( 50 )
)
/
CREATE TABLE "ZUSTAND" (
  "ID" NUMBER( 2 ) NOT NULL PRIMARY KEY, 
  "NAME" VARCHAR2( 50 )
)
/
CREATE TABLE "EINBAND" (
  "ID" NUMBER( 2 ) NOT NULL PRIMARY KEY, 
  "NAME" VARCHAR2( 50 )
)
/
CREATE TABLE "BUCH" (
  "ID" NUMBER( 9 ) NOT NULL PRIMARY KEY, 
  "TITEL" VARCHAR2( 255 ) NOT NULL, 
  "AUTHOR" VARCHAR2( 255 ) NOT NULL, 
  "VERLAG" VARCHAR2( 100 ), 
  "ISBN" NUMBER( 13 ) UNIQUE, 
  "JAHR" VARCHAR2( 10 ), 
  "ORT" VARCHAR2( 50 ), 
  "SEITEN" VARCHAR2( 25 ), 
  "EINBAND_ID" NUMBER( 2 ) REFERENCES "EINBAND"("ID"),
  "INFO" VARCHAR2( 1000 )
)
/ 
CREATE TABLE "EXEMPLAR" (
  "BARCODE" NUMBER( 9 ) NOT NULL PRIMARY KEY, 
  "BUCH_ID" NUMBER( 9 ) NOT NULL REFERENCES "BUCH"("ID"),
  "ZUSTAND_ID" NUMBER( 2 ) NOT NULL REFERENCES "ZUSTAND"("ID"), 
  "GEWICHT" NUMBER( 9 , 3 ) NOT NULL, 
  "BEMERKUNG" VARCHAR2( 1000 )
)
/ 
CREATE TABLE "DOCUMENT" (
  "ID" NUMBER( 9 ) NOT NULL PRIMARY KEY, 
  "TYPE_ID" NUMBER( 2 ) NOT NULL REFERENCES "DOC_TYPE"("ID"),
  "DOC_DATE" DATE NOT NULL, 
  "LADEN_ID" NUMBER( 2 ) NOT NULL REFERENCES "LADEN"("ID"),
  "DOC_BENUTZER_ID" NUMBER( 9 ) NOT NULL REFERENCES "BENUTZER"("ID"), 
  "AKZEPTIERT" NUMBER( 1 )
)
/ 
CREATE TABLE "DOCUMENT_ITEM" (
  "ID" NUMBER( 9 ) NOT NULL PRIMARY KEY, 
  "DOC_ID" NUMBER( 2 ) NOT NULL REFERENCES "DOCUMENT"("ID"),
  "BARCODE" NUMBER( 9 ) NOT NULL REFERENCES "EXEMPLAR"("BARCODE"), 
  "MENGE" NUMBER( 3 ) NOT NULL,
  "SUMME" NUMBER( 9 , 2 ) NOT NULL
)
/ 
CREATE TABLE "BEWEGEN" (
  "ID" NUMBER( 9 ) NOT NULL PRIMARY KEY, 
  "DOC_ID" NUMBER( 2 ) NOT NULL REFERENCES "DOCUMENT"("ID"),
  "BARCODE" NUMBER( 9 ) NOT NULL REFERENCES "EXEMPLAR"("BARCODE"), 
  "LADEN_ID" NUMBER( 2 ) NOT NULL REFERENCES "LADEN"("ID"),
  "MENGE" NUMBER( 3 ) NOT NULL
)
/ 
CREATE OR REPLACE
TRIGGER "TRIGGER1" BEFORE UPDATE OF "AKZEPTIERT" ON "DOCUMENT" 
FOR EACH ROW
BEGIN
  IF (:new."AKZEPTIERT"= 1 ) THEN
    IF (:new."TYPE_ID"< 3 ) THEN
      INSERT INTO "BEWEGEN"
        SELECT "ID", "DOC_ID", "BARCODE", :new."LADEN_ID", "MENGE"
        FROM "DOCUMENT_ITEM"
        WHERE "DOC_ID"=:new."ID";
    ELSE
      INSERT INTO "BEWEGEN"
        SELECT "ID", "DOC_ID", "BARCODE", :new."LADEN_ID", -"MENGE" AS "MENGE"
        FROM "DOCUMENT_ITEM"
        WHERE "DOC_ID"=:new."ID";
    END IF;
  ELSE
    DELETE FROM "BEWEGEN" WHERE "DOC_ID"=:new."ID";
  END IF;
END;
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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