После подписки соединение (TCP?) остается открытым все время для поддержки последующих обратных вызовов? Я имею в виду, что обратные вызовы используют то же соединение, которое было инициировано потребителем при подписке?
blockquote>Да. Вы можете наблюдать это, используя множество различных средств - сетевые инструменты, такие как
netstat
,ss
, Wireshark, или используя инструменты RabbitMQ, такие как веб-интерфейс управления или командаrabbitmqctl
. Наконец, все соединения / разъединения регистрируются.ПРИМЕЧАНИЕ: команда RabbitMQ отслеживает список рассылки
rabbitmq-users
и только иногда отвечает на вопросы о StackOverflow.
4 сотрудника таблиц, студенты, родители и человек для универсального материала. У штата, студентов и родителей есть внешние ключи, которые каждый вернул для доработки в Человека (не наоборот).
У человека есть поле, которое определяет то, что подкласс этого человека (т.е. штат, студент или родитель).
Править:
Как указано HLGM, адреса должны существовать в отдельной таблице, поскольку у любого человека может быть несколько адресов. (Однако - я собираюсь не согласиться со мной - можно хотеть сознательно ограничить адреса одному на человека, ограничивая выбор для списков рассылки и т.д.).
Хорошо я думаю, что все подходы допустимы и любой лектор, который снижает цену для того, чтобы пихнуть его в одной таблице (если требования не являются конкретными, чтобы сказать, что Вы не были должны) удалять жизнеспособную стратегию из-за их собственного личного мнения.
Я настоятельно рекомендую, чтобы Вы проверили документацию относительно NHibernate, поскольку это обеспечивает разные подходы для выполнения вышеупомянутого. Который я теперь попытаюсь плохо бессмысленно повторить.
Ваши опции:
3) "Надлежащее" наследование. Нормализованная версия. Вы почти там, но Ваш ключ находится в неправильном месте IMO. Ваш Список сотрудников должен содержать PersonId, таким образом, можно затем сделать:
выберите employee.id, person.name от человека внутреннего объединения сотрудника на employee.personId = person.personId
Получить все имена сотрудников, где имя только указано на таблице человека.
Я пошел бы для № 3.
Ваша цель состоит в том, чтобы произвести впечатление на лектора, не премьер-министра или клиента. Академики склонны не любить, аннулирует и мог бы (подсознательно) оштрафовать Вас за использование других методов (которые полагаются, аннулирует.)
И Вам не обязательно нужно это django расширение (PRIMARY KEY... ССЫЛКИ...), Вы могли использовать обычный FOREIGN KEY для этого.
"Таким образом для тех, кто смоделировал наследование в базе данных прежде; как Вы делали это? Какой метод Вы рекомендуете и почему?"
Методы 1 и 3 хороши. Различия находятся главным образом в том, каковы Ваши варианты использования.
1) адаптируемость - который легче изменить? Несколько отдельных таблиц с отношениями FK к родительской таблице.
2) производительность - который требует меньшего количества соединений? Одна единственная таблица.
Черт. Никакой дизайн не выполняет обоих.
Кроме того, существует третий дизайн в дополнение к Вашей монотаблице и FK к родителю.
Три отдельных таблицы с некоторыми общими столбцами (обычно копия-и-вставка столбцов суперкласса среди всех таблиц подкласса). Это очень гибко и легко работать с. Но, это требует, чтобы объединение этих трех таблиц собрало полный список.
Базы данных OO проходят тот же материал и придумывают в значительной степени те же опции.
Если точка должна смоделировать подклассы в базе данных, Вы, вероятно, уже думаете вроде решений, которые я видел в реальных базах данных OO (покидающий пустые поля).
В противном случае Вы могли бы думать о создании системы, которая не использует наследование таким образом.
Наследование должно всегда использоваться вполне экономно, и это - вероятно, довольно тяжелый случай для него.
Хорошая инструкция никогда не должна использовать наследование, если у Вас на самом деле нет кода, который делает разные вещи для поля "Родительского" класса, чем к тому же полю в "Дочернем" классе. Если бизнес-код в Вашем классе конкретно не относится к полю, то поле абсолютно не должно вызывать наследование.
Но снова, если Вы находитесь в школе, которая не может соответствовать тому, что они пытаются преподавать...
"Корректный" ответ в целях присвоения является, вероятно, № 3:
Person
PersonId Name Address1 Address2 City Country
Student
PersonId StudentId GPA Year ..
Staff
PersonId StaffId Salary ..
Parent
PersonId ParentId ParentType EmergencyContactNumber ..
Где PersonId всегда является первичным ключом и также внешним ключом в последних трех таблицах.
Мне нравится этот подход, потому что он помогает представить того же человека, имеющего больше чем одну роль. Учитель мог очень хорошо также быть родителем, например.
Я предлагаю пять таблиц 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