powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Иерархические структуры
7 сообщений из 7, страница 1 из 1
Иерархические структуры
    #35455305
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую всех.
Есть идейка, интересно было бы послушать Ваше мнение. Понимаю, что тема избитая, но ... хотелось бы подстраховаться, чтобы потом не было мучительно больно :)
Примерная реализация такова:
1. Реестр объектов:
Код: plaintext
1.
2.
3.
4.
5.
create table objects(
  object_id    bigint,
  parent_id    bigint,
  primary key (object_id),
  foreign key (parent_id) references objects(object_id)
)
2. Детализация объектов:
Код: plaintext
1.
2.
3.
4.
5.
create table A(
  object_id    bigint,
  ...,
  primary key(object_id),
  foreign key (object_id) references objects(object_id)
)
То же самое для всех типов объектов B, C, ..., Y,Z. Оценка для кол-ва строк в objects = порядка 100000

Вопрос 1: Хороша ли такая архитектура?

Вопрос 2: хорошо ли совмещать PK с FK? Не ожидаются ли какие-нибудь неожиданные грабли? И еще, чем чреват другой вариант, если не задать PK, а задать FK на столбец A.object_id с ограничением UNIQUE?
В качестве SQL сервера рассматриваются два варианта: MSSQL2005 и Firebird 2.1
...
Рейтинг: 0 / 0
Иерархические структуры
    #35455360
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем это делить на две таблицы?
у вас предполагается отличное от единицы количество детализаций на один объект?
...
Рейтинг: 0 / 0
Иерархические структуры
    #35455387
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftа зачем это делить на две таблицы?
у вас предполагается отличное от единицы количество детализаций на один объект?
Нет, но количество типов объектов достаточно большое число (порядка 20). На каждый тип объекта отдельная таблица детализации. Самое главное я, пожалй, пропустил. БД описывает структуру электрической сети, которая разнородна. Таблица реестра объектов нужна для соединения объектов (через таблицу линков).
...
Рейтинг: 0 / 0
Иерархические структуры
    #35455532
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senya_LНет, но количество типов объектов достаточно большое число (порядка 20).Насколько фиксировано это число? как часто будет изменяться?
...
Рейтинг: 0 / 0
Иерархические структуры
    #35455550
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft Senya_LНет, но количество типов объектов достаточно большое число (порядка 20).Насколько фиксировано это число? как часто будет изменяться? Судя по тому, что в последнее время глубина детализации все время возрастает по требованию заказчика, то ответ - раз в 2-3 месяца (за последние 6 месяцев добавлены 3 новых типа объекта, 2 - мною лично). Сейчас все это крутится на совсем другой архитектуре, стоит вопрос о ее смене. Сейчас стадия проектирования
...
Рейтинг: 0 / 0
Иерархические структуры
    #35456252
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senya_LВопрос 2: хорошо ли совмещать PK с FK? Не ожидаются ли какие-нибудь неожиданные грабли?Что в Вашем понимании совмещать ? Как PK, так и FK описывают ограничения на хранимые данные. Каждое из них имеет совершенно разный и независимый смысл, никоим образом не дублируя друг друга. Поэтому их существование определяется только вами: хотите ли вы доверить проверку этих ограничений СУБД или будете проверять их каким-либо другим способом. Или вообще не будете проверять и решите, что пользователь имеет право на любую ошибку. Правда, есть риск, что в случае инцидентов разгребать последствия придется вам, или, что гораздо хуже, тем, кто будет после вас сопровождать такую систему. В большинстве случаев такие ограничения лучше объявлять явно, иначе будет риск нарушить целостность данных совершенно случайным и непредсказумым образом.

Senya_Lчем чреват другой вариант, если не задать PK, а задать FK на столбец A.object_id с ограничением UNIQUE?
В качестве SQL сервера рассматриваются два варианта: MSSQL2005 и Firebird 2.1Почти ничем, за маленьким исключением, ограничения UNIQUE позволяют существование NULL в тех столбцах, на которые наложены. Поэтому если такое значение не является допустимым для данных в этих столбцах, то лучше, IMHO, использовать PRIMARY KEY, чтобы потом, опять же не удивляться и не исправлять ошибки в данных. Если же на соотвествующие столбцы наложить ограничение типа CHECK (Field IS NOT NULL), то UNIQUE по поведению становится практически полным аналогом PK. В MS SQL можно устанавливать FOREIGN KEY не только на PK, но и UNIQUE. Предполагаю, что Firebird в этом смысле вряд ли отличается от MS SQL.
...
Рейтинг: 0 / 0
Иерархические структуры
    #35457182
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChA....
Благодарю. Да, пожалуй, разницы не будет. Правда параллельно в другом форуме выяснил, что в MSSQL если не объявлять PK, то могут быть заморочки с репликацией данных.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Иерархические структуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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