我的数据库中有一个表车,其中一个列是purchaseDate。我想要能够标记每辆汽车与许多政策(限制在10个政策)。每项保单都有一段生命时间(如“5年”、“10个月”等),也就是说,从汽车的purchaseDate开始,保险单可以适用多久。
我需要执行以下操作:
当插入一辆汽车时,它将设置多个策略(至少设置了一个策略),有时一辆汽车将被更新以添加/删除Policy
‘
我目前的设计是(pol0..pol9是策略):
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是需要编写的噩梦。,因为我不知道每个策略在哪一列中可以是,所以我必须检查所有列的每一个策略等等。所以我想知道是否值得改变这一点。我的问题是:
为了节省一些空间,选择了
,
- 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类等。您有什么建议?
,我们就无法知道这一点。
发布于 2010-05-14 16:10:49
发布于 2010-05-14 16:11:27
我建议给关系它自己的表,包含一个汽车id和一个政策id。
发布于 2010-05-14 16:12:45
我建议更改它,以便您有一个在其中包含汽车Id的Policy表。因此,您不必链接到Car表中的一组策略,而是链接到策略表中的单个汽车。然后包含一个TTL列和一个Status列,这样它们就可以过期,并且可以使用策略表中的Car Id进行查询。
只要每项政策只能有一辆车,而每套保单只有一辆车(谁有没有车的保单,对吧?)那么这是一个很好的方法。
更新:啊,那我看错了。如果是很多人,那么按照其他人说的去做,然后制作CarPolicy表。
https://stackoverflow.com/questions/2835636
复制相似问题