定义表/主键

时间:2010-01-08 19:12:19

标签: database ms-access primary-key

我正在为特许经营者设计数据库。我的技能水平最好是中级(我只是在特许经营者办公室工作)。该数据库必须定义商店位置和特许经营商。所以我知道我需要一个“商店”表和一个“特许经营”表。 “商店编号”将是商店表中的主键。一个特许经营者可以拥有多家商店。我想我可以在特许经营权的表格中指定一个“加盟商ID”作为主要钥匙,以便将特许经营商加入商店。这是我的问题:每家商店最多可以拥有4家特许经营商。所以我坚持如何定义所有这些。我不确定我可以做多个特许经营ID,即使我可以,通常,商店只有1或2人拥有。这意味着许多空白字段。此外,我不确定当我需要提取查询时它将如何组合在一起。有关最合乎逻辑的方法的任何建议吗?

4 个答案:

答案 0 :(得分:3)

你需要一个连接表,创建一个名为franchisee_store的表,其中包含2个id字段,1表示商店的id,1表示加盟商的id。

here就是一个很好的例子。

答案 1 :(得分:0)

您需要的是多对多连接表。这是以第三范式执行此操作的正确方法。

示例:

franchisees:
    farnchisee_id
    other stuff
stores:
    store_id
    other stuff
franchisee_stores:
    frachisee_id
    store_id

向表中添加属性数组通常不是一个好主意,因为可以使用连接表更好地处理这些属性。正如您已经说过的那样,商店中的四个特许经营商会为那些商店减少空间,而且更重要的是,限制可以任意拥有商店的特许经营商的数量。

答案 2 :(得分:0)

好的,对于商店来说,你也拥有一个有效的主键 - StoreNumber。所以你的“Store”表就像是

Store     StoreNumber INTEGER   PRIMARY KEY
          StoreName   STRING 
          ......

然后你有另一张桌子加盟商将持有特许经营商及其信息 - 主要钥匙将是特许经营权

Franchisee  FranchiseeID    INTEGER  PRIMARY KEY
            FranchiseeName  STRING
            (other fields)

要加入这两者,因为您可以拥有多个所有者,所以需要一个StoreOwner表,如下所示:

StoreOwner    StoreNumber    INTEGER  FOREIGN KEY to "Store"
              FranchiseeID   INTEGER  FOREIGN KEY to "Franchisee"

两个字段(StoreNumber, FranchiseeID)的组合将成为StoreOwner中的主键。

这样,您可以为特定商店拥有任意数量的所有者。

答案 3 :(得分:0)

我想知道是否有人对如何在Jet / ACE数据存储中强制执行“每个商店的4个特许经营商”规则有任何想法。当然,A2010添加了新的表级数据宏,它可以像触发器一样运行,允许您为连接表定义一个可以强制执行该业务规则的数据宏。

但在A2010之前,没有引擎级方法可以做到这一点 - 你必须在应用程序本身中加入一些逻辑。

我认为这样做的一种方法是在连接表中添加第3列,这是一个特许经营商号码。作为PK的一部分,它将是必需的,如果您在其上放置验证规则,如“1和4之间”。这不会自动增加,所以你必须在代码中处理它,但它会阻止添加不符合规则的记录。

有没有人对解决这部分问题的其他任何方法有任何建议?我很想知道是否有某种方法可以使用缺少触发器和多记录表级约束的表来对其进行建模。但它必须在Jet / ACE中工作才能在这里可行。