2010-07-19 166 views
1

设计一个数据库来存储有关美国总统及其任期的详细信息。另外,还要记录他们的出生日期和地点,性别以及政党隶属关系的详情。你需要记录总统的先后顺序,以便任何总统的前任和继任者都能被确定。记住Grover Cleveland服务于两个非连续条款,并且政治关联可以改变。需要数据库设计帮助

这是我到目前为止让我知道,如果这可以改善请。我怎样才能做到这一点?“任何总统的前任和继任者都可以被识别出来”,这是通过递归关系来完成的吗?我将如何执行这个任务?

Table President  Table Origin 

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

什么?没有性别可以改变的警告? – Wrikken 2010-07-19 13:46:18

+0

不是性别,隶属关系是指共和党或民主政党 – 2010-07-19 13:47:14

+1

想想你可能拥有的关系: 总统可以服务很多条款,但一个条款只能由一位总裁服务 总统有一个Origin。多位总统可能来自同一个地方 您与某个术语关联的是什么样的数据? – 2010-07-19 13:49:07

回答

5

那么,你必须在这种情况下,两个实体(表):总统和条款。该条款将记录该期限的日期和现任总裁。

总统表将记录总裁的详细信息,不包括条款,因为这包括在条款表中。

知道这一点,你可以自己回答问题。以下是一些线索:

确定前任和继任者。这将按日期完成,因此您知道前任是您现在正在查看的前一个日期之前的前一个日期,并且后继将是之后的立即日期。请注意,前任和继任者可能并不总是存在于你正在看的总统(第一任总统和现任总统)。

你想看看ORDER BY [日期],然后选择TOP ...

技术上的设计可以进一步创造发源地第三个表,但是这是语义。

您目前的想法是将任期放入总统表 - 这不包括一名连任的第二任总统。但是,您可以设置两列 - 但数据的标准化将向您显示条款可能是一个单独的表格(但是,一个设计参数表示每条只有两个条款,所以它的摆动和环行)。

其实,很多有关总统的数据可以跨足使用规范化规则其他表 - 但我不会放弃这种美丽只是还没有...

如果您有任何具体问题,然后在评论中问 - 我一直是间接的,因为它的功课:)

0

好,以总统链接到他们的来历,你需要携带超过您
presID
如表原产地外键

但是这是事实,你可能会得到更好的服务创造一个tbl_term,因为有许多总统有多个任期。上面的例子将要求你有多个总统条目的多个条款。

tbl_term
PK term_id
FK pres_id
术语

要检索的前辈/继任
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

+0

这也假定条款被存储为连续的整数,这可能是也可能不是最好的方式。 – FlyingStreudel 2010-07-19 14:05:15

1

当试图设计一个数据库时,我采取的第一步是尝试识别实体及其关系。根据我的经验,最好的方法是通过要求(您的案例中的作业问题)并列出名词。每一个都是一个潜在的实体。在这种情况下,我看到:

总统 条款在办公室 政党 序列

,我看到的将是一个总统有一个或多个方面,可以有一个或多个政治党派的关系(和一个政党可以有一个或多个与其有关的总统 - 所以这将是一个多对多的关系。)

经过进一步的审查,在我看来,序列是更多的派生信息。出生地和出生日期似乎更像是总统而不是实体的属性,尽管你可以将“地点”变成自己的实体。因此,我开始为总统,术语,政治课程以及可能的城市,州等等制定表格。

一旦完成,我开始查看每个实体的属性要求。总统有出生日期,出生地和性别。

现在添加实体之间的关系,这可能涉及在某些情况下添加一个简单列,这些列是另一个实体的外键,或者可能涉及添加连接到实体的全新表。

对于条款,我只是坚持开始和结束日期。我会建议反对任何“术语ID”。您始终可以通过简单的SQL查询找到日期中的数字。