1

米国大統領とその任期に関する詳細を格納するデータベースを設計します。また、生年月日と出生地、性別、所属政党の詳細を記録します。大統領の前任者と後継者を特定できるように、大統領の順序を記録する必要があります。Grover Cleveland は連続して 2 期を務めたこと、および政治的所属が変更される可能性があることを忘れないでください。

これは私がこれまでに行ったことであり、これを改善できるかどうかを教えてください。また、この「大統領の前任者と後継者を特定できる」ことをどのように行うことができますか?これは再帰的な関係を使用して行われ、どのように実行しますか?

Table President       Table Origin

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

4 に答える 4

5

さて、この状況では、Presidents と Terms という 2 つのエンティティ (テーブル) があります。規約には、その期間の日付と現在の会長が記録されます。

Presidents テーブルには、Terms テーブルで説明されているように、Terms を含まない社長の詳細が記録されます。

これを知っていれば、自分で質問に答えることができます。ここにいくつかの手がかりがあります:

前任者と後継者を特定します。 これは日付によって行われるため、先行は現在表示している日付の直前の日付であり、後続は直後の日付になります。あなたが見ている大統領(初代大統領と現大統領)には、前任者と後継者が常に存在するとは限らないことに注意してください。

ORDER BY [DATE] と SELECT TOP を調べたい...

技術的には、この設計では出生地の 3 番目のテーブルをさらに作成できますが、これはセマンティクスです。

あなたの現在の考えでは、任期を大統領のテーブルに置きます。これは、2 期目の大統領を対象としていません。ただし、2 つの列を使用することはできますが、データを正規化すると、Terms がおそらく別のテーブルになる可能性があることがわかります (ただし、設計上の議論では、1 つのテーブルにつき 2 つの項しかないことが示されているため、スイング アンド ラウンドアバウトになります)。

実際、大統領に関する多くのデータは、正規化ルールを使用して他のテーブルに分岐することができますが、まだそれを明らかにするつもりはありません...

具体的な質問がある場合は、コメントで質問してください-宿題なので間接的でした:)

于 2010-07-19T14:00:30.740 に答える
1

ERD 画像 http://michaelquiles.homeserver.com/notes/sites/default/files/images/Capture.PNG

これは正しいようですか?

于 2010-07-19T17:39:58.237 に答える
1

データベースを設計しようとするとき、私が実行する最初のステップは、エンティティとそれらの関係を特定することです。私の経験では、それを行うための最良の方法は、要件(あなたの場合は宿題の質問)を調べて、名詞のリストを開始することです. それぞれが潜在的なエンティティです。この場合、次のように表示されます。

大統領 任期 政党 序列

私が見ている関係は、大統領には 1 つ以上の任期があり、1 つ以上の政党所属を持つことができるということです (そして、政党はそれに所属している 1 人以上の大統領を持つことができるので、これは多数になります)対多関係。)

さらに調べてみると、シーケンスはより派生的な情報であるように思えます。出生地と生年月日は、実際のエンティティというよりも大統領の属性のように見えますが、「場所」をそれ自体のエンティティにすることもできます。それで、大統領、任期、政党、そしておそらく市、州などの表を書き始めます。

それが完了したら、これらの各エンティティの属性の要件を調べ始めます。大統領には生年月日、出生地、性別があります。

次に、エンティティ間の関係を追加します。これには、別のエンティティへの外部キーである単純な列を追加する場合や、エンティティに結合するまったく新しいテーブルを追加する場合があります。

用語については、開始日と終了日だけに固執します。「用語ID」に対して提案します。単純な SQL クエリを使用して、日付から用語番号をいつでも見つけることができます。

于 2010-07-19T14:29:43.813 に答える
0

大統領を彼らの起源にリンクするために、あなた
presID
はテーブル起源の外部キーとしてあなたを持ってくる必要があるでしょう

ただし、複数の任期を持つ大統領が多数いるため、tbl_termを作成する方が適切な場合があることは事実です。上記の例では、複数の用語に対して複数の社長エントリが必要になります。

tbl_term
PK term_id
FK pres_id
term

先行/後続を取得するには
DECLARE @maxTerm INT
DECLARE @minTerm INT

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

次に、前任者は
SELECT p.presLName, p.presFName FROM tbl_pres AS p
JOIN tbl_term AS t
ON p.pres_id = t.pres_id
WHERE t.term_id = @minTerm - 1

逆に
SELECT p.presLName, p.presFName FROM tbl_pres AS p
JOIN tbl_term AS t
ON p.pres_id = t.pres_id
WHERE t.term_id = @maxTerm + 1

于 2010-07-19T13:56:30.273 に答える