Nano Hash - криптовалюты, майнинг, программирование

Дизайн базы данных при наличии внешнего ключа или строки

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

Как мне это реализовать? Есть ли таблица case и подтаблицы case_internal_sv и case_external_sv?


  • Являются ли внешние надзорные органы и внутренние надзорные органы специализированными подклассами надзорных органов? 04.02.2017

Ответы:


1

В вашем вопросе не так много информации, на которой можно основывать ответ.

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

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

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

04.02.2017

2

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

Какую базу данных вы используете?

04.02.2017
  • Я использую PostgreSQL 04.02.2017

  • 3

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

    Простым решением может быть столбец 'sv_type' в таблице 'case'. И иметь две колонки

    • 'internal_sv_id', внешний ключ, допускающий значение NULL, к таблице сотрудников
    • 'external_sv_name', строка, допускающая значение NULL, для сохранения внешнего имени.

    Затем проверьте наличие руководителя в одном из этих двух столбцов на основе 'sv_type'

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

    Что касается меня, я бы выбрал самое простое решение в случае сомнений.

    04.02.2017
  • Это моя мысль точно. Думал о том, чтобы сделать два поля, как вы описываете, и сделать их обнуляемыми. Тогда, возможно, возможно, создайте ограничение, требующее заполнения. 04.02.2017
  • Эта схема не проста и затрудняет обеспечение целостности — это невозможно сделать просто с первичными и внешними ключами, и потребуется дополнительный код для ограничения значений в двух столбцах. Задействованные JOIN вряд ли будут дорогостоящими, учитывая, что в мире не может быть такого количества супервизоров, особенно если учесть дополнительные затраты на создание пользовательского интерфейса и обеспечение целостности потенциально нескольких клиентов. 04.02.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..