Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Хранение констант / 19 сообщений из 19, страница 1 из 1
16.02.2011, 16:33
    #37120379
MSVS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
Добрый день!

Столкнулся с такой проблемой, как хранить в БД такой объект как константа (в данном контексте это пользовательская константа, короче то понятие, которое есть в 1С). С простыми типами этих констант вроде нет проблем, их можно в одной таблице легко поселить, а как быть если эта константа является ссылкой на другой объект, скажем справочник? Думаю делать для каждой ссылочной константы свою таблицу не выход.
...
Рейтинг: 0 / 0
16.02.2011, 16:37
    #37120390
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
так вы посмотрите как они реализованы в той же 1С:
таблица с кучей полей и одной записью
ну для пущего шика реализации синглтона можно сделать триггер на запрет добавление записей больше 1-й
...
Рейтинг: 0 / 0
16.02.2011, 16:46
    #37120427
MSVS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
Так в 1с там ссылка на нужные тип есть.
Я не могу понять, как в класс, который будет с константами работать определить класс, который нужен если вдруг константу решили поменять. Как вариант думал хранить еще строку с типом и потом уже по этому типа создавать экземпляр нужного класса:
switch (type)
{
case "sprContargent":
CConta myContr;
case "sprNomenkl":
CNomenkl myNomenk;
}

и т.д.
...
Рейтинг: 0 / 0
16.02.2011, 16:58
    #37120477
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
так ты про проектирование БД или про что?
если хочешь контролировать, то можно сделать внешний ключ на поле
или про что ты?
если надо поменять тип константы, так это как бы равносильно изменению типа поля таблицы
вы часто их собрались менять?
...
Рейтинг: 0 / 0
16.02.2011, 17:08
    #37120517
MSVS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
Изначально конечно про БД, но в итоге это скажется на само приложение.

Если в константе будет хранится значение простого типа, то имеем:

id | name | value
0000001 | Название фримы | Рога и копыта

если у нас ссылочный тим

0000002 | Гл. бухгатер | 0000002 - это id из таблицы где сотрудники хранятся, получается что это уже внешний ключ
при том следующая константа, будет ссылаться на другу табилцу
...
Рейтинг: 0 / 0
16.02.2011, 17:10
    #37120526
MSVS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
Сейчас пришла мысль, что у таблиц справочников можно сделать поле вида "основное значение" - у кого оно Истина и будут той константой, останется повесить тот триггер, который не будет разрешать устанавливать Истину для более чем одной записи.
...
Рейтинг: 0 / 0
16.02.2011, 17:11
    #37120533
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
почему сабж нельзя сделать с помощью какого-то аналога EAV ?
...
Рейтинг: 0 / 0
16.02.2011, 17:15
    #37120545
MSVS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
LSVпочему сабж нельзя сделать с помощью какого-то аналога EAV ?

В плане хранения - это не проблема, меня смущает дальнейшая работа в приложении.
Изначально стали работать с метаданными (МД), но потом погрязли в этом и решили, что проще сделать по стандартной схеме, но здесь эти константы.
...
Рейтинг: 0 / 0
16.02.2011, 17:20
    #37120567
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
я вам говорю - сделайте таблицу с количеством полей, равным количеству констант
Таблица констант
Код: plaintext
1.
2.
3.
CREATE TABLE CONSTANTS(
CompanyName VARCHAR( 100 ),
ChiefAccountant BIGINT FOREIGN KEY REFERENCES Personal(ID)
)
CompanyName ChiefAccountantРога и копыта 117
...
Рейтинг: 0 / 0
16.02.2011, 17:27
    #37120588
MSVS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
Nafя вам говорю - сделайте таблицу с количеством полей, равным количеству констант
Таблица констант
Код: plaintext
1.
2.
3.
CREATE TABLE CONSTANTS(
CompanyName VARCHAR( 100 ),
ChiefAccountant BIGINT FOREIGN KEY REFERENCES Personal(ID)
)
CompanyName ChiefAccountantРога и копыта 117
а ведь действительно выход
...
Рейтинг: 0 / 0
16.02.2011, 18:59
    #37120870
Chop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
MSVS... как быть если эта константа является ссылкой на другой объект, скажем справочник? можно сделать тупо:
отказаться от внешних ключей в таблице констант
в одном поле хранить значение id объекта
в другом - ссылку на таблицу-источник объекта (название таблицы в БД)
...
Рейтинг: 0 / 0
16.02.2011, 19:37
    #37120951
Flying Dutchman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
Nafну для пущего шика реализации синглтона можно сделать триггер на запрет добавление записей больше 1-й

Можно и без триггера (пример для Oracle):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
create table Singleton (
    Id    number default  0 ,
    Data  nvarchar2( 100 ),
    Primary key(Id)
  );

alter table Singleton add (
  constraint Singleton_Chk check (Id =  0 ));
...
Рейтинг: 0 / 0
17.02.2011, 11:05
    #37121773
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
Nafя вам говорю - сделайте таблицу с количеством полей, равным количеству констант
За всех не скажу, но, например, в Oracle в таблице может быть не более 1000 полей.
...
Рейтинг: 0 / 0
17.02.2011, 11:09
    #37121782
Chop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
Nafя вам говорю - сделайте таблицу с количеством полей, равным количеству константчто делать, если в процессе работы придется убрать/добавить/изменить константу?
менять каждый раз структуру БД?
...
Рейтинг: 0 / 0
17.02.2011, 18:32
    #37123129
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
ChopNafя вам говорю - сделайте таблицу с количеством полей, равным количеству константчто делать, если в процессе работы придется убрать/добавить/изменить константу?
менять каждый раз структуру БД?+500
Постоянная смена структуры - тупик.

Что мешает сделать одну таблицу с полями всех типов (строка, дата, целое, флоат, булеан) ?
Добавление константы = добавление строки.
Главное найти правильный ключ поиска нужной константы.
...
Рейтинг: 0 / 0
18.02.2011, 17:32
    #37125213
Flying Dutchman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
LSVChopпропущено...
что делать, если в процессе работы придется убрать/добавить/изменить константу?
менять каждый раз структуру БД?+500
Постоянная смена структуры - тупик.

Что мешает сделать одну таблицу с полями всех типов (строка, дата, целое, флоат, булеан) ?
Добавление константы = добавление строки.
Главное найти правильный ключ поиска нужной константы.

Если использовать SQL Server, то задача упрощается, потому что там имеется тип данных sql_variant, позволяющий хранить в одномй колонке данные разных типов (в Oracle для этой цели есть тип ANYDATA). Например, я использую такую таблицу для констант:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table Parameter (
    Name nvarchar( 100 ) not null,
    Parameter_Type nvarchar( 20 ) not null 
        constraint Chk_Parameter_Type check (Parameter_Type in ('INT','STRING','DATETIME')),
    Value sql_variant not null,
    Description nvarchar( 500 ) not null)
go

alter table Parameter
  add constraint PK__Parameter primary key clustered (Name)
go

Колонка Parameter_Type, вообще говоря, не нужна, так как тип хранимого значения хранится в самом sql_variant, но используется для упрощения запросов.
...
Рейтинг: 0 / 0
18.02.2011, 18:21
    #37125317
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
потому что там имеется тип данных sql_variantЕсли константы нужны только самому приложению, то можно, но если они нужны в т.ч. для SQL то это недопустимо.
...
Рейтинг: 0 / 0
18.02.2011, 18:47
    #37125377
Flying Dutchman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
LSVпотому что там имеется тип данных sql_variantЕсли константы нужны только самому приложению, то можно, но если они нужны в т.ч. для SQL то это недопустимо.

Почему ?
...
Рейтинг: 0 / 0
20.02.2011, 09:42
    #37126581
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение констант
Постоянно добавляете и удаляете новые константы?
Тогда давайте вообще будем рассматривать только EAV, а вдруг вообще на ходу сущность надо добавить/убрать
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Хранение констант / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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