нужна помощь в разработке базы данных - PullRequest
1 голос
/ 19 июля 2010

Разработка базы данных для хранения сведений о президентах США и их полномочиях. Кроме того, запишите детали их даты и места рождения, пола и принадлежности к политической партии. Вы должны записать последовательность президентов, чтобы можно было определить предшественника и преемника любого президента. Помните, Гровер Кливленд отбыл два непоследовательных срока, и политическая принадлежность может измениться.

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

Table President       Table Origin

PK presID            PK orID    
   presFName            orCity
   presLName            orState
   affiliation          birthDate
   gender
   term

Ответы [ 4 ]

5 голосов
/ 19 июля 2010

Ну, у вас есть две сущности (таблицы) в этой ситуации: президенты и термины. В Условиях будет указана дата и действующий президент срока.

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

Зная это, вы можете сами ответить на вопросы. Вот несколько подсказок:

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

Вы хотите посмотреть в ORDER BY [DATE] и ВЫБРАТЬ ТОП ...

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

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

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

Если у вас есть какие-то конкретные вопросы, то задавайте в комментариях - я был косвенным, потому что это домашнее задание :)

1 голос
/ 19 июля 2010
1 голос
/ 19 июля 2010

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

Президентские сроки при исполнении служебных обязанностей Последовательность политической партии

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

При дальнейшем рассмотрении мне кажется, что последовательностьболее производная информация.Место рождения и дата рождения больше похожи на атрибуты президента, чем на фактическую сущность, хотя вы можете превратить «место» в его собственную сущность.Итак, я бы начал составлять таблицы для президентов, терминов, политических_партий и, возможно, городов, штатов и т. Д.

Как только это будет сделано, я начну просматривать требования к атрибутам каждого из этих объектов.У президента есть дата рождения, место рождения и пол.

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

В терминах я бы просто придерживался дат начала и окончания.Я бы посоветовал против любого «термина id».Вы всегда можете найти числа терминов из дат с помощью простых запросов SQL.

0 голосов
/ 19 июля 2010

Ну, чтобы связать президентов с их происхождением, вам нужно будет принести свои
presID
В качестве внешнего ключа в таблице Origin

Однако это правда, что вам лучше подготовить создание tbl_term, потому что есть много президентов с более чем одним сроком. Приведенный выше пример потребует, чтобы у вас было несколько записей президента для нескольких терминов.

tbl_term
ПК term_id
ФК pres_id
срок

Для извлечения предшественников / преемников
DECLARE @maxTerm INT
DECLARE @minTerm INT

SELECT @maxTerm = MAX(term_id), @minTerm = MIN(term_id) FROM tbl_term AS t<br> JOIN tbl_pres AS p<br> ON p.pres_id = t.pres_id<br> WHERE p.presLName = 'lname'<br> AND p.presFName = 'fname'

Тогда предшественник
SELECT p.presLName, p.presFName FROM tbl_pres AS p<br> JOIN tbl_term AS t<br> ON p.pres_id = t.pres_id<br> WHERE t.term_id = @minTerm - 1

наоборот
SELECT p.presLName, p.presFName FROM tbl_pres AS p<br> JOIN tbl_term AS t<br> ON p.pres_id = t.pres_id<br> WHERE t.term_id = @maxTerm + 1

...