Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> посоветуйте структуру базы данных 
:(
    Опции темы
alexIrish
Дата 31.1.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



Здравствуйте.
переделываю базу данных, по сути состоящую из одной таблицы (штук 55 полей)
OrderNumber, Distributor, PartNumber,PartDescription, License_quantity, Ship_Date, Serial_number,
RequestDate, CustomerName, CompanyName, Address, City, PostCode, Country, Phone, Fax, Email,
ReasonNewKey, HardwareID, IssueDate, LicenseKey, ReasonReplacementKey1, R1HardwareID, R1IssueDate, R1LicenseKey, ReasonReplacementKey2, R2HardwareID, R2IssueDate,R2LicenseKey,...
, ReasonReplacementN, RnHardwareID, RnIssueDate, RnLicense key.

 Короче все сделано в одну линию. работают люди на етой базе уже лет 8. Проблемы  начались когда количество ключей на замену превышает N. (N = 5 smile

OrderNumber уникальный, заказ может включать несколько Serial_number.
Каждый Serial_number уникальный, отсылается только одному CompanyName, но может иметь несколько License_quantity. На каждый License_quantity дается один новый ключ, который в последствии может заменятся по заросу от пользователя (указывается ReasonReplacementKey)
На данный момент для каждого OrderNumber имеется [Кол-во Serial_number в заказе]*License_quantity  записей + еще записи, когда когда количество ключей на замену превышает N,
оператор начинает новую строку.


Я разделил таблицу на: 1.Заказы (OrderNumber(PK),Distributor,PartNumber,PartDescription,License_quantity, Ship_Date, Serial_number(FK))
                                        2. Пользователи
(Serial_number,CustomerName, CompanyName, Address, City, PostCode, Country, Phone, Fax, Email)
                                        3. LicenseKeys
(Serial_number, ReasonID, HardwareID, IssueDate, LicenseKey, Comments)
                                        4. IssueDescriptions (ReasonID(PK) , Reason Description ( 6 значений :
новый ключ, неисправность, апгрейд...)
Связь 1->2 и 1->3 по Serial_number. Связь 3->4 должна быть по IssueID, но не могу создать, так как не могу определить PK в таблице 3.
проблема, что:
-если License_quantity > 1, то запросы на ключи может слать один и тот же чел (админ). 
-hardware ID не уникальный номер,
- LicenseKey зависит от hardware ID ( при одинаковых hardware ID и ключи одинаковые)

Вот и ломаю голову как ето все получше скомпоновать/разделить  smile 

Спасибо если кто поможет. или попытается.
Да, и база - мдб в Аксесе, исходная таблица ~ 1.5 млн записей, переносится будет на SQL server 2000 ( Access adp project)





PM MAIL   Вверх
Akina
Дата 31.1.2008, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Значит так. Начнем с того, что забудем про существование базы и соответственно таблицы.

Объясняй сущность процесса и его физику.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
alexIrish
Дата 31.1.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



1.Фирма рассылает софт по диллерам, либо сама продает. Каждый заказ имеет:
- номер заказа,
- Имя диллера (компания)
- абривиатуру софта ( Part name)
- Описание софта (soft description)
- серийный номер продукта
- колво купленных лицензий.

Заказы проходят по MySAP, информация обозначеная выше берется оттуда и заносится в базу оператором. Лицензии могут продаваться отдельно, т.е их число может увеличится. Допустим купили софт с SDK & one user licenses,
попробовали, понравилось купили еще 100 лизензий на тот же серийник.

2. Конечные пользователи присылают запросы по мейлу на активацыю софта. запрос включает в себя:
- Имя конечного пользователя 
- Название компании
- адрес, город, почтовый индекс, страну, телефон, факс, емейл
- серийный номер софта
- hardware ID, строка генерируемая софтом при инсталяции.
- причину запроса ( [New purchase, Upgrade] при первой инсталяции, [hardware failure, hardware upgrade, ... ] для последующих переустановок.
- для ключ на замену, предидущее hardware ID с етого компа.

hardware ID может быть одинаковым для разных серийных номеров/ компов, но никогда для одного и тогоже компа. Оператор сверяет серийник, проверяет кол-во лицензий вносит данные в таблицу, генерирует ключ, вносит его тоже в таблицу отсылает ключ пользователю. Для софта с многими лицензиями, все запросы могут приходить от одного чела (админ и т.д.), те первые персональные данные те же, включая [Имя конечного пользователя]

Ну вроде все.

Да, и разные софты могут продаваться одним и тем же диллерам и соответсвенно любой конечный пользователь может купить два и больше разных продуктов данной компании.


Это сообщение отредактировал(а) alexIrish - 31.1.2008, 16:03
PM MAIL   Вверх
Rodman
Дата 31.1.2008, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 1
Всего: 122



Вот как я это представляю

Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  Sales.rar 10,98 Kb
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Akina
Дата 31.1.2008, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Вот один из возможных вариантов:

Сущности:

- операция (основная сущность)
- дилер
- клиент
- софт
- лицензия

Дилер - в принципе сторонняя характеристика заказа. Если продажа идет через него - он фигурирует в заказе, если напрямую - не фигурирует.
Клиент - конечная точка заказа. С ним все понятно.
Софт - в принципе чисто справочное данное.
Лицензия - на самом деле сюда входит и экземпляр продаваемого софта (эдакий виртуальный тип лицензии "коробка")...
Операция - единичное действие, т.е. действие с элементарной единицей товара с одним клиентом в рамках одного заказа.

Вот и получается.

Основная таблица - это таблица операций. Заказов. При этом один реальный заказ может порождать несколько строк в таблице (скажем строка софта с коробкой и строка лицензий) с одним номером заказа (но разными ИД, есссно).
К ней линкуется таблица Дилеров (если прямая продажа - то Null).
К ней линкуется таблица Клиентов (как я понимаю, дилер клиента не скрывает, иначе невозможно обеспечить запросы по ре- или просто активации).
К ней линкуется таблица Софта (тупо о каком программном продукте речь).
К ней линкуется таблица типов операций. Тут собственно и описывается суть того что делается (продается коробка, продается доп. лицензия, выполняется активация или реактивация, апгрейд, продление и т.п.). В зависимости от типа операции дополнительные поля в основной таблице либо заполняются/не заполняются, либо по-разному интерпретируются. К ней уже линкуется таблица типов лицензий (Null, если действие не предусматривает лицензии, скажем продажа коробки с софтом или документацией) со своими характеристиками (тоже возможны разные интерпретации в зависимости от типа лицензии). Либо эта парочка формируется как одна таблица, а не две.

Добавлено через 4 минуты и 21 секунду
Цитата(Rodman @  31.1.2008,  17:24 Найти цитируемый пост)
Вот как я это представляю 

Боюсь, твоя схема не предусматривает кучи операций... Что делать, если по одному заказу проходит два софта? Где в ней будет отображаться замена версии и соответствующая замена лицензии? И так далее... я уж не говорю о том, что у тебя будут плодиться копии записей о покупателях.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Rodman
Дата 31.1.2008, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 1
Всего: 122



Цитата(Akina @  31.1.2008,  15:34 Найти цитируемый пост)
Дилер - в принципе сторонняя характеристика заказа. Если продажа идет через него - он фигурирует в заказе, если напрямую - не фигурирует.

тут я сомневаюсь... как я понял продажа идет только через него!
Цитата(Akina @  31.1.2008,  15:34 Найти цитируемый пост)
Софт - в принципе чисто справочное данное.
Лицензия - на самом деле сюда входит и экземпляр продаваемого софта (эдакий виртуальный тип лицензии "коробка")...

ну это я все в одну сущность кинул..
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Akina
Дата 31.1.2008, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(Rodman @  31.1.2008,  17:40 Найти цитируемый пост)
тут я сомневаюсь... как я понял продажа идет только через него!

Мне так не показалось:
Цитата(alexIrish @  31.1.2008,  16:40 Найти цитируемый пост)
Фирма рассылает софт по диллерам, либо сама продает.


Цитата(Rodman @  31.1.2008,  17:40 Найти цитируемый пост)
это я все в одну сущность кинул.. 

Мне это не кажется правильным... хотя почему нет?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
alexIrish
Дата 31.1.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



Rodman, можно попросить ваш пример в формате а2000 выложить?
Нигде рядом нету версии выше:(

Большое спасибо за рекомендации, сейчас буду ваять, наваяю, обьявлю.
Еще раз спасибо.
PM MAIL   Вверх
Rodman
Дата 31.1.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 1
Всего: 122



вот... а2000

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  Sales1.rar 10,71 Kb
PM MAIL WWW Skype GTalk YIM MSN   Вверх
alexIrish
Дата 1.2.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



Привет всем.
И попытался подумать и решил сделать так ( см. файл)
Почему:
-Все- таки, уникальная сущность ето заказ, его номер. Он может включать сколькко угодно 
софта/серийников но сам заказ всегда один. Инфа в таблице заказов чисто справочная. Роль играет только номер заказа
- ну и дальше, на каждый серийный номер можно повесить [LicenseQty] пользователей.
- соответственно каждый серийный номер не должен иметь больше  чем [LicenseQty] операций с
IssueDescriptionID =(1- "New purchase" , 2 - " Upgrade")

Ваше мнение?

Да и сразу спрошу: в таблицах ("Oreders", "LicenseOperations", "Users") поля ...ID - автономера.
В аксесе нет проблем, а вот в SQL server, по моему нет такого типа данных:(


Это сообщение отредактировал(а) alexIrish - 1.2.2008, 12:33

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  Ralations.rar 40,51 Kb
PM MAIL   Вверх
Akina
Дата 1.2.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(alexIrish @  1.2.2008,  13:28 Найти цитируемый пост)
-Все- таки, уникальная сущность ето заказ, его номер. Он может включать сколькко угодно 
софта/серийников но сам заказ всегда один.

Заказ представляет из себя ГРУППУ элементарных действий.

Цитата(alexIrish @  1.2.2008,  13:28 Найти цитируемый пост)
поля ...ID - автономера. В аксесе нет проблем, а вот в SQL server, по моему нет такого типа данных:(

Цитата

IDENTITY

Indicates that the new column is an identity column. When a new row is added to the table, Microsoft® SQL Server™ provides a unique, incremental value for the column. Identity columns are commonly used in conjunction with PRIMARY KEY constraints to serve as the unique row identifier for the table. The IDENTITY property can be assigned to tinyint, smallint, int, bigint, decimal(p,0), or numeric(p,0) columns. Only one identity column can be created per table. Bound defaults and DEFAULT constraints cannot be used with an identity column. You must specify both the seed and increment or neither. If neither is specified, the default is (1,1).




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
alexIrish
Дата 1.2.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



Akina, спасибо за Identity.
Цитата

Заказ представляет из себя ГРУППУ элементарных действий.

Физически да, но в данном случае таблица заказов дает информацию что такой заказ существует.
Сам процесс продажи софта в данном случае играет роль индикатора: либо софт был продан (соответственно существует номер заказа) либо нет. 
Подумав,перекинул поля PartNumber, Description в таблицу SerialNumbers, так как ето всетаки инфа о софте, как и серийный номер smile

Ваяем дальше!
PM MAIL   Вверх
alexIrish
Дата 5.2.2008, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



Снова здрасьте.
Базу я разделил, сделал форму.  С новыми записями все в порядке. 
А вот как перелопатить милион записей из старой таблицы в новые? smile 
Там и по ключам ошибки получаю ( в старой таблице есть дублирующиеся данные по заказам и серийным номерам. ) 
Я ручками ето год делать буду. 
У кого есть идеи?
Для наглядности выложил базу со старой таблицей "BigTable" и всеми новыми созданными на данный момент.



Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  db1.rar 15,45 Kb
PM MAIL   Вверх
Akina
Дата 5.2.2008, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(alexIrish @  5.2.2008,  19:50 Найти цитируемый пост)
А вот как перелопатить милион записей из старой таблицы в новые?  
Там и по ключам ошибки получаю ( в старой таблице есть дублирующиеся данные по заказам и серийным номерам. ) 
Я ручками ето год делать буду. 

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Akina
Дата 5.2.2008, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



И по структуре.

1) Непонятна связь SerialNumbers - Users. Это что - один сериал может быть на несколько юзеров?
2) Аналогично по SerialNumbers - LicenseOpreations... впрочем, тут я как раз могу представить - сперва поставили, потом переставили или продлили...
3) Связь LicenseOpreations - IssueDescription, по-моему, просто не туда воткнута.
4) Связь SerialNumbers - Orders вообще лишена смысла, ибо ни на одной стороне нет ключевого поля, хотя в каждой из таблиц оно есть.

Но если ЭТО вдруг начнет работать... впрочем, ты еще запросов не начал писАть...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.1251 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.