首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在DB模式中设计这种关系

如何在DB模式中设计这种关系
EN

Stack Overflow用户
提问于 2010-05-14 16:05:14
回答 3查看 100关注 0票数 0

我的数据库中有一个表车,其中一个列是purchaseDate。我想要能够标记每辆汽车与许多政策(限制在10个政策)。每项保单都有一段生命时间(如“5年”、“10个月”等),也就是说,从汽车的purchaseDate开始,保险单可以适用多久。

我需要执行以下操作:

当插入一辆汽车时,它将设置多个策略(至少设置了一个策略),有时一辆汽车将被更新以添加/删除Policy

  • searches,必须考虑日期/策略,例如:‘选择到今天为止没有任何策略覆盖的所有汽车’

我目前的设计是(pol0..pol9是策略):

代码语言:javascript
复制
CREATE TABLE Car (
 id int NOT NULL IDENTITY(1,1),
 purchaseDate datetime NOT NULL,
 //more stuff...
 pol0 smallint default NULL,
 pol1 smallint default NULL,
 pol2 smallint default NULL,
 pol3 smallint default NULL,
 pol4 smallint default NULL,
 pol5 smallint default NULL,
 pol6 smallint default NULL,
 pol7 smallint default NULL,
 pol8 smallint default NULL,
 pol9 smallint default NULL,
 PRIMARY KEY  (id)
)

CREATE TABLE Policy (
 id smallint NOT NULL,
 name varchar(50) collate Latin1_General_BIN NOT NULL,
 ttl varchar(100) collate Latin1_General_BIN NOT NULL,
 PRIMARY KEY (id)
 )

我面临的问题是,执行上述查询的sql是需要编写的噩梦。,因为我不知道每个策略在哪一列中可以是,所以我必须检查所有列的每一个策略等等。所以我想知道是否值得改变这一点。我的问题是:

为了节省一些空间,选择了

  1. 作为策略id,而不是“int标识”,因为将会有数以百万计的汽车记录。它只是在创建策略时增加了复杂性,因为我们必须处理id等等。值得这样做吗?

  1. ,我在想,也许有一个更好的设计?显然,我们可以将策略/汽车关系转移到它自己的表CarPolicy,好处是:

代码语言:javascript
复制
- no limit on 10 policies per car
- adding/removing etc much easier
- when only the default policy is applied (when no others are applied one called Default policy is applied), we could signal that by not having any entry in CarPolicy, now this is just done inserting the Default policy id in one of the columns.

缺点是我们需要更改DB、ORM类等。您有什么建议?

  1. 可能还有另一种实现此功能的智能方法,如果不使用CarPolicy表?

,我们就无法知道这一点。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-14 16:10:49

  1. --很长一段时间以来,使用smallint来节省空间已经有很长时间了;这样做在性能上不会有任何明显的差异,它只会带来潜在的麻烦。
  2. A单独的CarPolicy表肯定是正确的方法,原因如下。做改变是有前期成本的,但一旦完成,它就会自己付出很多倍的代价,省去了麻烦。
票数 4
EN

Stack Overflow用户

发布于 2010-05-14 16:11:27

我建议给关系它自己的表,包含一个汽车id和一个政策id。

票数 0
EN

Stack Overflow用户

发布于 2010-05-14 16:12:45

我建议更改它,以便您有一个在其中包含汽车Id的Policy表。因此,您不必链接到Car表中的一组策略,而是链接到策略表中的单个汽车。然后包含一个TTL列和一个Status列,这样它们就可以过期,并且可以使用策略表中的Car Id进行查询。

只要每项政策只能有一辆车,而每套保单只有一辆车(谁有没有车的保单,对吧?)那么这是一个很好的方法。

更新:啊,那我看错了。如果是很多人,那么按照其他人说的去做,然后制作CarPolicy表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2835636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档