Squeak.ru - шаблоны программирования

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

Например: у меня есть таблица «история» с внешним ключом, который может указывать на разные таблицы/объекты в зависимости от значения поля.

История таблицы:

create table history(
    id int PimaryKey AUTO_INC,
    elementid int, (ForeignKey)
    elementtype varchar
)

эта таблица заполняется, например:

id               ElementId           ElementType
1                1                   Device
2                2                   Simcard
3                2                   Simcard

это говорит о том, что у нас есть

  • 1 запись для объекта типа "Устройство" с идентификатором "1"
  • 2 записи для сущности типа "Симкарта" с id "2"

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

Это правильный способ интеграции динамического внешнего ключа? Я также подумал о создании списка с таблицами/сущностями, на которые можно ссылаться. Таким образом, таблица будет выглядеть так:

ALTER TABLE history MODIFY ElementType INTEGER;

ElementType будет означать:

create table entities(
    id int PimaryKey AUTO_INC,
    name varchar
)

история новой таблицы заполняется, например:

id               ElementId           ElementType
1                1                   1
2                2                   2
3                2                   2

Таблица сущностей заполняется, например:

id               name
1                Device
2                Simcard

  • Это совпадение, что elementid из 2 равно симкарте? Причина, по которой я спрашиваю, заключается в том, что если бы это всегда было так, elementid уже идентифицировал бы элемент как сим-карту, и, таким образом, столбец elementtype был бы избыточным. 13.03.2014
  • @SchmitzIT нет. elementId относится к идентификатору записи сущности, заполненной в elementType. Например, у меня есть сим-карта сущности с парой экземпляров/строк. Я хочу иметь идентификатор записи 3 сим-карты сущности, поэтому это будет экземпляр истории с: elementid = 3 elementType= simcard ElementType относится к сущности 13.03.2014

Ответы:


1

Правильный способ реализации динамических FK — не делать этого.

Вот причины и что делать вместо этого сделать.

13.03.2014
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...