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

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

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

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

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

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

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

В плане хранения - это не проблема, меня смущает дальнейшая работа в приложении.
Изначально стали работать с метаданными (МД), но потом погрязли в этом и решили, что проще сделать по стандартной схеме, но здесь эти константы.
...
Рейтинг: 0 / 0
Хранение констант
    #37120567
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вам говорю - сделайте таблицу с количеством полей, равным количеству констант
Таблица констант
Код: plaintext
1.
2.
3.
CREATE TABLE CONSTANTS(
CompanyName VARCHAR( 100 ),
ChiefAccountant BIGINT FOREIGN KEY REFERENCES Personal(ID)
)
CompanyName ChiefAccountantРога и копыта 117
...
Рейтинг: 0 / 0
Хранение констант
    #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
Хранение констант
    #37120870
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSVS... как быть если эта константа является ссылкой на другой объект, скажем справочник? можно сделать тупо:
отказаться от внешних ключей в таблице констант
в одном поле хранить значение id объекта
в другом - ссылку на таблицу-источник объекта (название таблицы в БД)
...
Рейтинг: 0 / 0
Хранение констант
    #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
Хранение констант
    #37121773
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nafя вам говорю - сделайте таблицу с количеством полей, равным количеству констант
За всех не скажу, но, например, в Oracle в таблице может быть не более 1000 полей.
...
Рейтинг: 0 / 0
Хранение констант
    #37121782
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nafя вам говорю - сделайте таблицу с количеством полей, равным количеству константчто делать, если в процессе работы придется убрать/добавить/изменить константу?
менять каждый раз структуру БД?
...
Рейтинг: 0 / 0
Хранение констант
    #37123129
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChopNafя вам говорю - сделайте таблицу с количеством полей, равным количеству константчто делать, если в процессе работы придется убрать/добавить/изменить константу?
менять каждый раз структуру БД?+500
Постоянная смена структуры - тупик.

Что мешает сделать одну таблицу с полями всех типов (строка, дата, целое, флоат, булеан) ?
Добавление константы = добавление строки.
Главное найти правильный ключ поиска нужной константы.
...
Рейтинг: 0 / 0
Хранение констант
    #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
Хранение констант
    #37125317
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что там имеется тип данных sql_variantЕсли константы нужны только самому приложению, то можно, но если они нужны в т.ч. для SQL то это недопустимо.
...
Рейтинг: 0 / 0
Хранение констант
    #37125377
Flying Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVпотому что там имеется тип данных sql_variantЕсли константы нужны только самому приложению, то можно, но если они нужны в т.ч. для SQL то это недопустимо.

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


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