Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура данных / 2 сообщений из 2, страница 1 из 1
08.01.2006, 01:49
    #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
08.01.2006, 16:03
    #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]