Моделирование наследования в базе данных

После подписки соединение (TCP?) остается открытым все время для поддержки последующих обратных вызовов? Я имею в виду, что обратные вызовы используют то же соединение, которое было инициировано потребителем при подписке?

blockquote>

Да. Вы можете наблюдать это, используя множество различных средств - сетевые инструменты, такие как netstat, ss, Wireshark, или используя инструменты RabbitMQ, такие как веб-интерфейс управления или команда rabbitmqctl. Наконец, все соединения / разъединения регистрируются.


ПРИМЕЧАНИЕ: команда RabbitMQ отслеживает список рассылки rabbitmq-users и только иногда отвечает на вопросы о StackOverflow.

5
задан Adam Taylor 7 January 2009 в 11:28
поделиться

7 ответов

4 сотрудника таблиц, студенты, родители и человек для универсального материала. У штата, студентов и родителей есть внешние ключи, которые каждый вернул для доработки в Человека (не наоборот).

У человека есть поле, которое определяет то, что подкласс этого человека (т.е. штат, студент или родитель).

Править:

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

5
ответ дан 13 December 2019 в 22:18
поделиться

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

Я настоятельно рекомендую, чтобы Вы проверили документацию относительно NHibernate, поскольку это обеспечивает разные подходы для выполнения вышеупомянутого. Который я теперь попытаюсь плохо бессмысленно повторить.

Ваши опции:

  • 1) Одна таблица со всеми данными, которые имеют столбец "разделителя". Этот столбец указывает, какой человек человек. Это жизнеспособно в простых сценариях и (серьезно) высокой производительности, где соединения причинят боль слишком много
  • 2) Таблица в классе, который приведет к дублированию столбцов, но избежит соединений снова, таким образом, ее простое и немного более быстрое (хотя только немного и индексация смягчает это в большинстве сценариев).
  • 3) "Надлежащее" наследование. Нормализованная версия. Вы почти там, но Ваш ключ находится в неправильном месте IMO. Ваш Список сотрудников должен содержать PersonId, таким образом, можно затем сделать:

    выберите employee.id, person.name от человека внутреннего объединения сотрудника на employee.personId = person.personId

Получить все имена сотрудников, где имя только указано на таблице человека.

2
ответ дан 13 December 2019 в 22:18
поделиться

Я пошел бы для № 3.

Ваша цель состоит в том, чтобы произвести впечатление на лектора, не премьер-министра или клиента. Академики склонны не любить, аннулирует и мог бы (подсознательно) оштрафовать Вас за использование других методов (которые полагаются, аннулирует.)

И Вам не обязательно нужно это django расширение (PRIMARY KEY... ССЫЛКИ...), Вы могли использовать обычный FOREIGN KEY для этого.

2
ответ дан 13 December 2019 в 22:18
поделиться

"Таким образом для тех, кто смоделировал наследование в базе данных прежде; как Вы делали это? Какой метод Вы рекомендуете и почему?"

Методы 1 и 3 хороши. Различия находятся главным образом в том, каковы Ваши варианты использования.

1) адаптируемость - который легче изменить? Несколько отдельных таблиц с отношениями FK к родительской таблице.

2) производительность - который требует меньшего количества соединений? Одна единственная таблица.

Черт. Никакой дизайн не выполняет обоих.

Кроме того, существует третий дизайн в дополнение к Вашей монотаблице и FK к родителю.

Три отдельных таблицы с некоторыми общими столбцами (обычно копия-и-вставка столбцов суперкласса среди всех таблиц подкласса). Это очень гибко и легко работать с. Но, это требует, чтобы объединение этих трех таблиц собрало полный список.

1
ответ дан 13 December 2019 в 22:18
поделиться

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

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

В противном случае Вы могли бы думать о создании системы, которая не использует наследование таким образом.

Наследование должно всегда использоваться вполне экономно, и это - вероятно, довольно тяжелый случай для него.

Хорошая инструкция никогда не должна использовать наследование, если у Вас на самом деле нет кода, который делает разные вещи для поля "Родительского" класса, чем к тому же полю в "Дочернем" классе. Если бизнес-код в Вашем классе конкретно не относится к полю, то поле абсолютно не должно вызывать наследование.

Но снова, если Вы находитесь в школе, которая не может соответствовать тому, что они пытаются преподавать...

0
ответ дан 13 December 2019 в 22:18
поделиться

"Корректный" ответ в целях присвоения является, вероятно, № 3:

Person
PersonId Name Address1 Address2 City Country

Student
PersonId StudentId GPA Year ..

Staff
PersonId StaffId Salary ..

Parent
PersonId ParentId ParentType EmergencyContactNumber ..

Где PersonId всегда является первичным ключом и также внешним ключом в последних трех таблицах.

Мне нравится этот подход, потому что он помогает представить того же человека, имеющего больше чем одну роль. Учитель мог очень хорошо также быть родителем, например.

0
ответ дан 13 December 2019 в 22:18
поделиться

Я предлагаю пять таблиц Person Student Staff Parent Address

То, ПОЧЕМУ - потому что у людей может быть несколько addesses и люди, может также иметь несколько ролей и информацию, которую Вы хотите для штата, отличается, чем информация, которую необходимо хранить для родителя или студента.

Далее можно хотеть к названию магазина как last_name, Middle_name, first_name, Name_suffix (как младший) вместо как просто имени. Живо я Вы willwant, чтобы смочь искать на last_name! Имя не уникально, таким образом, необходимо будет удостовериться, что у Вас есть уникальный суррогатный первичный ключ.

Читайте о нормализации прежде, чем попытаться разработать базу данных. Вот источник для запуска с: http://www.deeptraining.com/litwin/dbdesign/FundamentalsOfRelationalDatabaseDesign.aspx

0
ответ дан 13 December 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: